Dies ist das erste Mal, dass ich selbst ein Makro schreibe und zwei kleine Probleme habe.VBA-Laufzeitfehler 1004 "Anwendungsdefinierter oder objektdefinierter Fehler" mit Bereich
Aufgabe des Makros: Kopieren Sie Informationen eines Dokuments in ein anderes Dokument in einer bestimmten Spalte, wenn die Spalte leer ist, sollte in diesem Fall die nächste Spalte verwendet werden.
Dies ist der Code so weit:
Sub CopyData()
Dim i As Long
Dim wbA As Workbook
Dim wbN As Workbook
Dim Filepath As String
i = 7
Set wbA = ThisWorkbook
Filepath = "C:\Users\sebastian\Desktop\assessment answers"
Do
If IsEmpty(wbA.Sheets("Answers").Cells(1, i)) Then
Set wbN = Workbooks.Open(Filepath)
If Cells(37, 3).Value = 31 Then
wbN.Sheets("Answers").Range(Cells(37, 4), Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(36, i), Cells(45, i))
ElseIf Cells(37, 3).Value = 41 Then
wbN.Sheets("Answers").Range(Cells(37, 4), Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(46, i), Cells(55, i))
ElseIf Cells(37, 3).Value = 51 Then
wbN.Sheets("Answers").Range(Cells(37, 4), Cells(46, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(56, i), Cells(65, i))
Else
MsgBox "There could be a problem with the data, please check if the candidate has selected a topic."
Exit Sub
End If
wbN.Sheets("Answers").Range(Cells(2, 4), Cells(3, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(1, i), Cells(2, i))
wbN.Sheets("Answers").Range(Cells(7, 4), Cells(36, 4)).Copy _
Destination:=wbA.Sheets("Answers").Range(Cells(6, i), Cells(35, i))
wbN.Close
Exit Sub
Else
i = i + 1
End If
Loop
End Sub
1. Das Problem (VBA Runtime Error 1004) tritt hier nach: Wenn Zellen (37, 3) .Value = 31 Dann Wenn ich .Range("D37:D46")
und Bereiche für die anderen Zellen verwende, funktioniert es, aber ich möchte die Spalte mit der Schleife vergrößern, wenn bereits Daten ausgefüllt sind. Hast du eine Idee, das zu lösen?
2. Gibt es eine Möglichkeit, den Dateipfad zu ändern, sodass derjenige, der ihn jemals verwendet, auf den Desktop geleitet wird, auf dem sich die Datei befinden soll?
Filepath = "C:\Users\sebastian\Desktop\assessment answers"
Vielen Dank für Ihre Ideen,
Sebastian
Re 1 ist dieses Problem in vielen Fragen hier abgedeckt. Sie müssen die 'Cells'-Aufrufe auch mit einem Arbeitsblatt qualifizieren:' wbN.Sheets ("Answers"). Range (wbN.Sheets ("Answers"). Zellen (37, 4), wbN.Sheets ("Answers") .Cells (46, 4)) '. Wenn Sie eine Variable für das Blatt oder eine With-Anweisung verwenden, wird sie aufgeräumt. – Rory
Sie müssen angeben, Zellen (37,3) .Wert ist aus welcher Arbeitsmappe und welches Blatt. Ich denke, das kann die Fehlermeldung lösen. Wenn ich Ihren Code teste, wird kein Fehler angezeigt. –
Als Antwort auf Problem 1: https://support.microsoft.com/en-us/help/210684/copying-worksheet-programmatical-causes-run-time-error-1004-in-excel Betreffend Problem 2: Sie können Referenz Desktop wie folgt: Environ $ ("USERPROFILE") & "Desktop" aber ich bin mir nicht sicher, wie zuverlässig es ist, Sie sind besser, diesen workbook.path zu verwenden, wenn die Datei auf dem Desktop sowieso – User632716