Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
268to272
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
268to272
268to272
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Benötige Dringend Hilfe (Kopieren)

Benötige Dringend Hilfe (Kopieren)
16.06.2003 11:25:30
Jörg
Hallo,
ich habe ein Problem mit dem Finden von WErten und anschließendem Kopieren.
Das Macro muß heute Abend funktionieren.

Das Macro:
Public Sub Freier_Fuehler_1()
Dim wksAus As Worksheet
Dim wksSim As Worksheet
Dim lngRow As Long, lngRowDest As Long
Dim intCounter As Integer, intCopyCount As Integer
Dim varKrit As Variant, varFind As Variant
Application.ScreenUpdating = False
varKrit = TextBox3.Value
If varKrit = "" Then Exit Sub
Set wksAus = Worksheets("Auswert")
Set wksSim = Worksheets("Simpati-Daten")
With wksSim.Range("D:D")
Set varFind = .Find(What:=varKrit, After:=Range("D1"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, _
MatchCase:=True)
If Not varFind Is Nothing Then
intCounter = 30
lngRow = varFind.Row
With wksAus.Range("D:D")
lngRowDest = .Range("D65536").End(xlUp).Row - 2
End With
If lngRowDest > 1 Then lngRowDest = lngRowDest + 1
Do
If wksSim.Cells(lngRow - 1 * intCounter, varFind.Column).Value = varFind Then
intCopyCount = intCopyCount + 1
wksSim.Range(wksSim.Cells(lngRow - 1 * intCounter, 7), _
wksSim.Cells(lngRow - 1 * intCounter, 7)).Copy _
Destination:=wksAus.Range(wksAus.Cells(lngRowDest + 1 + intCopyCount, 7), _
wksAus.Cells(lngRowDest + 1 + intCopyCount, 7))
End If
intCounter = intCounter + 1
If intCopyCount = 30 Then Exit Do
Loop Until lngRow - 1 * intCounter < 1
Else
Msgbox "Sollwert 2 """ & varKrit & """ wurde nicht gefunden"
End If
End With
Application.ScreenUpdating = True
Call Auswerten_2
End Sub


Funktion:
Das Macro soll denn WErt aus det Textbox in der Spalte D finden
und dann z.b. von der Spalte F ab der letzten gefundenen Stelle 30mal die Zeile der Spalte F kopieren.
Er macht aber nur 3 kopien bei 30 vorhandenen Spalten.

Gruß Jörg

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 12:29:09
Nike

Hi,
ich glaube ich bräuchte auch noch ein paar Wertepaare,
um mir dabei wirklich was vorstellen zu können...

Verdächtig sieht mir in jedem Fall diese Zeile aus:

wksSim.Range(wksSim.Cells(lngRow - 1 * intCounter, 7), _
wksSim.Cells(lngRow - 1 * intCounter, 7)).Copy

insbesondere das hier:
lngRow - 1 * intCounter

Da wird doch der Zeilenzähler multipliziert,
- absichtlich?
Naja, wenn's was anderes ist,
bräuchte ich wohl noch etwas mehr input...

Bye

Nike

Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 12:42:40
Jörg

Also ich kann Dir folgendes Input
geben.

Die org. Version sah vor das ich nur jede 5 Zeile 5mal kopiere .Dann habe ich einfach die werte lngRow - 5 * intCounter durch lngRow - 1 * intCounter ersetzt.
Was würde denn passieren wenn ich den multiplikator entferne?

Jörg


Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 12:54:11
Nike

Hi,

wenn der Multiplikator weg ist? - Einfach mal probieren ;-)

> Das Macro soll denn WErt aus det Textbox in der Spalte D finden
und dann z.b. von der Spalte F ab der letzten gefundenen Stelle 30mal die Zeile der Spalte F kopieren.
Er macht aber nur 3 kopien bei 30 vorhandenen Spalten.

Soll ein und dieselbe Zeile 30 mal untereinander kopiert
werden, oder ab der Fundstelle alle 30 folgenden Zeilen?
Wenn z.B. in Zeile 50 der Wert gefunden wird,
alle Zeilen, von 50 bis 80???

Bye

Nike

Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 13:36:12
RAnton

Hallo Jörg

Ich denke diese Zeile, die Nike schon gefunden hat, ist sehr merkwürdig.

lngRow - 1 * intCounter

soll das nicht eher (lngRow-1)* intCounter

sein.

Hast du mal den Code im Einzelschrittverfahren Step-By-Step durchwandert?

Gruß
RAnton

Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 13:41:39
Jörg

Hi Nike,

so ungefähr :

es soll der letzte Wert (in der Spalte befinden sich Sollwerte)
gefunden werden (vor der sollwertänderung) und von dort 30 mal nach oben kopiert werden.

Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 14:51:01
Nike

Hi,
sorry, was meinst du mit 30 mal nach oben?

Sagen wir mal es wird Hallo gesucht und in Zelle D40 gefunden.
Was soll nun kopiert werden? D40 bis D10 nach wohin?
Oder A10:IV40
Beschreib mal ein bischen mehr...

Bye

Nike

Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 15:01:49
Jörg

Hallo,

wenn der Wert in der Spalte DE in Zeile XY gefunden wurde,
dann werden die 30 Zeilen über der Zeile XY
in die Mappe1 in die letzte freie Zeile in der Spalte DE kopiert werden.

Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 15:41:48
Nike

Hi,
meinst du D oder DE würde bedeuten Columns 4 oder 109

naja, hier mal ein Versuch, ohne diese Hochzählere,
wenn dann wird in einem Rutsch kopiert ;-)

Bye

Nike

Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 17:26:29
Jörg

Nun bekomme ich immer ien Fehlermeldung "Laufzeizfehler 1004"
In folgenden Bereich:

Range(varFind, varFind.Offset(-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 1), wksAus.Cells(lngRowDest + 30, 1))

sonst sieht es so aus wie sein sollte.

Gruß Jörg

Re: Benötige Dringend Hilfe (Kopieren)
16.06.2003 17:31:45
Jörg

Kann ich denn auch mehrere Spalten dann damit kopieren?
Denn ich habe einen WErt, da muß die Spalte 1:4 kopiert
werden.

Ich hoffe das wir die Lösung finden.

Gruß Jörg

Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
17.06.2003 09:08:52
Nike

Hi,
natürlich kannst du auch columns kopieren ;-)
Den Fehler sollte man weg bekommen, wenn du die TakeFOcusOnClick
Eigenschaft auf false setzt...

oder das Blatt noch mit angeben:
wksSim.Range(wksSim.varFind, wksSim.varFind.Offset(-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 4), wksAus.Cells

oder so:
wksSim.Range(varFind, varFind.Offset(-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 4), wksAus.Cells

Mal probieren...

Bye

Nike

Re: Benötige Dringend Hilfe (Kopieren)
17.06.2003 10:24:03
Jörg

Hi nike,

soweit so gut das Kopieren klappt. Nun habe ich aber das Problem
wenn ich die Spalte änder zum Beispiel ich möchte die Werte der 4 Spalte haben kopiert er mir immer nur den gefunden Wert und nicht die Werte in der Quellspalte.

Die Spalte D ist mein suchkretierum in der der Letzte Sollwert gesucht werden soll und dann sollen in der Reihe die Spalte 7
30x nach oben kopiert werden .

Gruß Jörg

Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
17.06.2003 10:46:35
Nike

Hi,

welche Variante hat denn gefunkt?

Für die Spalte arbeitest du dann einfach auch mit der offset variante...

Bye

Nike

Re: Benötige Dringend Hilfe (Kopieren)
17.06.2003 10:58:34
Jörg

Hi Nike,

ich verstehe nun die Welt nicht mehr es hat einmal funktoniert und dann net mehr.

Wenn ich folgendes verwende:
wksSim.Range(wksSim.varFind, wksSim.varFind.Offset(-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 4), wksAus.Cells
Da findet er mir die Variable "wksSim.varFind" nicht.

Wenn ich das andere von Dir verwende bekomme ich immer den
Laufzeitfehler "1004".

Die Eigenschaft von Dir "TakeFOcusOnClick" finde ich nicht
im Form-Menü.
Wäre es denn nicht einfacher die ganze Zeile zu löschen und nur in der Spalte die nicht benötigen Zeilen zu löschen.
Natürlich kann ich Dir auch die Datei mal zukommen lassen.

Gruß Jörg (mit den nerven am Ende)

Anzeige
Re: Benötige Dringend Hilfe (Kopieren)
17.06.2003 14:24:06
JÖrg

Wenn ich nun von der gefunden Stelle einfach nur
3 spalten nach rechts gehen möchte dann kann ich doch
.Offset(rowOffset:=3, columnOffset:=3) einbauen.
Aber wenn ich denn Part ändere dann kommt immer range nicht gefunden.
Range(varFind, varFind.Offset(3,-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 10), wksAus.Cells(lngRowDest + 30, 10))

Damit sollte er doch von der Fundstelle 3 Spalten nach recht gehen oder?

Gruß Jörg

Re: offset...
17.06.2003 14:30:04
Nike

Hi,

Range(varFind.Offset(3,0), varFind.Offset(3,-30)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 10), wksAus.Cells(lngRowDest + 30, 10))
so verschiebst du den zu kopierenden Bereich um 3 Spalten nach rechts, also nicht D:D, sondern H:H

Bye

Nike

Anzeige
Re: offset...
17.06.2003 14:51:25
Jörg

Hi Nike,

Dein Gedult ist echt zu bewundern.
Mit der Änderung habe ich es Probiert aber ich bekomme wieder
den Laufzeitfehler.
Kann es sein das Ihm der Bezug auf die Simpati-Daten (wkssim) fehlt?

Set varFind = .Find(What:=varKrit, After:=Range("D1"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, _
MatchCase:=True)
If Not varFind Is Nothing Then
lngRowDest = wksAus.Range("J:J").Range("J65536").End(xlUp).Row
Range(varFind.Offset(3, 0), varFind.Offset(3, -30)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 10), wksAus.Cells(lngRowDest + 30, 10))

Ich hoffe das es die letzte _Nachricht von mir war.
Gruß Jörg
Else

Anzeige
Re: offset...
17.06.2003 15:06:05
Nike

Hi,
och das mit der Geduld ist kein Problem.
Ich sehe das eher als ein bischen Gehirnjogging ;-)
Das läuft hier so nebenher, daher kann ich auch manchmal
meinen Code nicht prüfen, da ich gerade in ner anderen
Anwendung rumhüpfe...

Dem fehlte tatsächlich noch das andere Blatt...

Bye

Nike

P.S. Hattest du in der Datei die ich dir geschickt habe
noch gesehen das ich das Makro 'Call CommandButton2_Click
durch Call UF_Endladen ersetzt habe?
Wäre recht interesant zu sehen ob das soweit funkt,
auch wenn alle Public gesetzten Prozeduren nun in
nem separaten Modul ausgelagert wurden...


Anzeige
Re: offset...
17.06.2003 15:35:29
Jörg

Ja was soll ich sagen das wars auch nicht:

wksSim.Range(varFind.Offset(3, 0), varFind.Offset(3, -30)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 10), wksAus.Cells(lngRowDest + 30, 10))

Das mit dem UF_entladen ging aber soweit komme ich ja nicht.
Erst alle Werte suchen und dann Kopieren.
Beim ersten Macro "Temperatur" macht er alles bloß beim 2 nicht mehr da kommt immer der Laufzeitfehler.


Jörg

Re: offset...
17.06.2003 17:26:59
jörg

Ich muß dazu sagen das das erste Macro ohne
den Offset ist.
Wenn ich denn Offset auch verschiebe dann sage er mir immer das das Format nicht übereinstimmt.
Mit dem Format kann ich folgende Aussage Treffen:

In Simpati-Daten ist die Spalte D = ".NumberFormat = "#0" " und die Spalte I(oder G)= ".NumberFormat = "#,##0.0000" ".

Auch ein Set wksSim=Worksheets("Simpati-Daten")
with wksSim.With Columns("G")
.NumberFormat = "#,##0.0000"
.Value = .Value
end with

brachte keinen Erfolg.Ist es den Möglich das ganze nur als TExt einzusetzen nach dem kopieren?




Re: offset...
18.06.2003 10:34:19
Nike

Hi,

diesr Code funkt in deiner Datei:

lngRowDest = wksAus.Range("D:D").Range("D65536").End(xlUp).Row
wksSim.Range(varFind, varFind.Offset(-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 4), wksAus.Cells(lngRowDest + 30, 4))

Wichtig ist das lngRowDest nicht kleiner als 1 ist!!!
Das passiert dir, wenn du keine Einträge hast und dann -2 nimmst!

Formate kannst du durch PasteSpecial Paste:=xlValues kappen...

Bye

Nike

P.S. ich bin zur Zeit in dieser Prozedur:


Re: offset...
18.06.2003 12:18:21
Jörg

Hi nike,

ja das geht bei mir auch aber wenn ich das Offset wie folgt in wksSim.Range hinzufüge geht nix mehr.
wksSim.Range(varFind.Offset(3,0), varFind.Offset(-30, 0)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 4), wksAus.Cells(lngRowDest + 30, 4))

Ein Kopiren von Hand (STRG+C)geht ohne Problem.

Gruß Jörg

Re: offset...
18.06.2003 13:11:55
Nike

Hi,
dein Kopierbereich muß mit dem Einfügbereich identisch sein,
ist es aber bei dir nicht...

wksSim.Range(varFind.Offset(3,0), varFind.Offset(-30, 0)).Copy
sind 33 Zeilen
und
wksAus.Range(wksAus.Cells(lngRowDest, 4), wksAus.Cells(lngRowDest + 30, 4))

sind nur 30 Zeilen...
Einfach mal die Überwachung dazuschalten und den Begriff
überwachen lassen...

Bye

Nike

Danke für die Hilfe
18.06.2003 16:49:50
Jörg

Nun geht es entlcih so wie ich es
wollte.

1000 Dank an Nike für Seine Hilfe.

Hier nun das ERgebnis:

Public Sub spannung_temp()
Dim wksAus As Worksheet
Dim wksSim As Worksheet
Dim lngRow As Long, lngRowDest As Long
Dim intCounter As Integer, intCopyCount As Integer
Dim varKrit As Variant, varFind As Variant
Application.ScreenUpdating = False
varKrit = Sollwerte.TextBox1.Value
If varKrit = "" Then Exit Sub
Set wksAus = Worksheets("Auswert")
Set wksSim = Worksheets("Simpati-Daten")
With wksSim.Range("D:D")
Set varFind = .Find(What:=varKrit, After:=Range("D1"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, _
MatchCase:=True)
If Not varFind Is Nothing Then
lngRowDest = wksAus.Range("J:J").Range("J65536").End(xlUp).Row
wksSim.Range(varFind.Offset(0, 5), varFind.Offset(-29, 5)).Copy _
wksAus.Range(wksAus.Cells(lngRowDest, 10), wksAus.Cells(lngRowDest + 29, 10))
Else
Msgbox "Sollwert 1 """ & varKrit & """ wurde nicht gefunden"
End If
End With
Application.ScreenUpdating = True
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige