Hallo verehrte VBAler,
ich bin Dimitrij und kenne mich mit VBA (noch) nicht aus. Dennoch fange ich langsam an und wahrscheinlich wie bei jedem stoße ich auf Probleme, die ich nicht selber lösen kann. Deshalb hoffe ich auf eure Hilfe!
Mit viel Googlen und Hilfe von ein paar Freunden habe ich folgenden Makro programmiert:
1) Ich habe 2 Excel Tabellen = Tabelle A und Tabelle B
2) Tabelle A = ist die Quelle, besteht aus 10 Arbeitsblättern (gleicher Name, fortlaufende nummerierung), die alle gleich aufgebaut sind. Viele Spalten, mich interessieren die erste und die dritte
3) Tabelle B = in diese sollen die Daten aus Tabelle A rein kopiert werden. Diese hat einen Arbeitsblatt mit 11 Spalten. Das Kopieren läuft unter folgenden Randbedingungen ab:
4) In Tabelle B, Zelle A4 wird ein Datum eingetragen; Makro sucht in Tabelle A, erster Arbeitsblatt in Spalte A nach diesem Datum, sobald die Werte übereinstimmen, sollen ab dieser Zeile wo das Datum gefunden wurde die nächsten 10 Werte aus der dritten Spalte kopiert und in die Tabelle B eingefügt werden. Sobald das abgeschlossen ist, soll der Vorgang für die nächsten Arbeitsblätter der Tabelle A durchgeführt werden, bis Ende.
NUN DAS PROBLEM:
Die fett-markierte Zeile im VBA-Code (siehe unten). Sobald er zu der Stelle kommt, wo er die Range mit den Zellen der Variablen "x" , dritte Spalte und die 10 Zellen drunter markieren soll, bekomme ich eine Fehlermeldung: "Laufzeitfelher: "1004": Anwendungs- oder Objektdefinierter Fehler".
Ich habe bereits versucht die Varieble "x" durch absolute Zahlenangaben zu erstzen, das Resultat ist gleich. Das Einzige was funktioniert hat sind folgende 2 Möglichkeiten:
1) Ich habe die Range wie folgt angegeben - Range("C123:C456") - dann ist die Code sauber abgelaufen
2) Ich habe den Vorgang Select als ein Public Sub in einen Modul ausgelagert und rufe ihn dann einfach auf - dann läuft das Makro auch sauber ab
Warum kommt diese Fehlermeldung, wenn der Select-Vorgang sich innerhalb des Makro-Kodes befindet?
Ich danke euch im Voraus für eure Hilfe!!!
Viele Grüße
Dimitrij
Sub Suchen()
' Arbeitsmappe zum beschreiben der Daten aktivieren
Windows("Tabelle B.xlsm").Activate
'Zu beschreibende Spalten definieren duch: Variable "spalten", läuft von 3 bis 10
For spalten = 3 To 10
'ins Speicher den Wert aus aktivierter Arbeitsmappe, Arbeitsblatt "A1", Zelle(A4) schreiben
speicher = Sheets("PbO").Cells(4, 1).Value
' Variable "reaktor" definieren, setzt sich aus Wort "Reaktor" und Variabla "spalten" minus 2 zusammen
reaktor = "Reaktor " & spalten - 2
' Variable "x" definieren, läuft von 9 bis 7541
For x = 9 To 7541
' Arbeitsmappe zum Auslesen der Daten aktivieren
Workbooks("Tabelle A.xlsm").Sheets(reaktor).Activate
' In Arbeitsblatt "reaktor X" nach Variable "speicher" suchen
If Sheets(reaktor).Cells(x, 1) = speicher _
Then
ActiveSheet.Range(Cells(x, 3), Cells(x + 10, 3)).Select
Selection.Copy
Workbooks("Tabelle B.xlsm").Sheets("A1").Activate
ActiveSheet.Cells(4, spalten).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
x = 7541
End If
Next x
Next spalten
MsgBox "Ende"
End Sub
|