Importfunktion von Excel-Datei zu Excel-Datei

Hallo VBA-Spezialisten,

habe versucht aus einer Datei verschiedene Zellbereiche zu holen und diese in eine neue Datei zu schreiben. Jedoch funktioniert es nicht, d.h. er hat zwar gerechnet für ca. 15 min jedoch waren keine Werte in der Datei eingetragen. Deshalb zu meiner Frage, was stimmt hier nicht??:

Code:
Private Sub Namen_u_Urlaub_Import_Click()
Dim filename As Variant
Dim i As Integer
Dim j As Integer
Dim h As Integer
Dim line As String
Dim workbk1 As Workbook
Dim workbk2 As Workbook
Dim name As String
Dim beschaeft As Double
Dim urlaub As Integer

Set workbk1 = ActiveWorkbook
workercount = Range(„F1“).Value
filename = Application.GetOpenFilename

If filename = False Then
Exit Sub
End If

Application.ScreenUpdating = False
Set workbk2 = Workbooks.Open(filename)

For i = 8 To 550 Step 3
workbk2.Activate
workbk2.Sheets(„Mitarbeiter“).Select
name = Range(„A“ & i).Copy

workbk1.Activate
line = 1
workbk1.Sheets(„Urlaubsberechnung“).Select
Range(„A“ & line).Value = name
Next i

For j = 9 To 550 Step 3
workbk2.Activate
workbk2.Sheets(„Mitarbeiter“).Select
beschaeft = Range(„B“ & i).Copy

workbk1.Activate
line = 1
workbk1.Sheets(„Urlaubsberechnung“).Select
Range(„A“ & line).Value = beschaeft
Next j

For h = 9 To 550 Step 3
workbk2.Activate
workbk2.Sheets(„Mitarbeiter“).Select
urlaub = Range(„O“ & i).Copy

workbk1.Activate
line = 1
workbk1.Sheets(„Urlaubsberechnung“).Select
Range(„C“ & line).Value = urlaub
Next h

workbk1.Activate
workbk2.Close

Application.ScreenUpdating = True
End Sub

Ich bin mir zu 100% sicher, dass dies auch einfacher geht, aber ich habe mir gedacht, dass muss der richtige Lösungsweg sein, dass ich mein Ergebnis erreiche.

Hoffe jemand von euch, kann mir weiterhelfen.

Gruß und schönen Tag,
Sebastian

Hallo VBA-Spezialisten,

Ebenfalls Hallo!

habe versucht aus einer Datei verschiedene Zellbereiche zu
holen und diese in eine neue Datei zu schreiben. Jedoch
funktioniert es nicht, d.h. er hat zwar gerechnet für ca. 15
min jedoch waren keine Werte in der Datei eingetragen. Deshalb
zu meiner Frage, was stimmt hier nicht??:

Code …
Private Sub Namen_u_Urlaub_Import_Click()

Das Problem ist, dass mit z.B. „name = Range(„A“ & i).Copy“ die Variable nicht mit dem Wert der Zelle belegt wird. „Copy“ kopiert die Zelle in die Zwischablage. Dort bleibt auch alles, sofern man nicht mit „Paste“ den Wert wieder irgendwo einfügt. Der Variablen „name“ wird der Wert „Wahr“ zugeordnet, sofern der Kopiervorgang erfolgreich war und nicht der Zellwert wie erforderlich.
Günstiger ist es den Befehl „Value“ zu benutzen.

Das ständige Gewechsel zwischen den Tabellen („activate“) kann man sich durch ordentliche Adressierung der Tabellenblätter sparen.

Die Schleifenendwerte (550) sollten noch mal überprüft werden.
Weder mit einem Startwert von 8 noch mit 9 gelangt man bei einer Schrittweite von 3 bei 550 (sondern bei 551 o. 549) an. Das könnte das Risiko bergen, dass einzelne Datenzeilen beim Kopiervorgang ignoriert werden.

Hier nun der vereinfachte und hoffentlich funktionstüchtige Code:

Private Sub Namen\_u\_Urlaub\_Import\_Click()
 Dim filename As Variant
 Dim i As Integer
 Dim line As String
 Dim workbk1 As Workbook
 Dim workbk2 As Workbook
 Dim wks1 As Worksheet
 Dim wks2 As Worksheet

 Set workbk1 = ActiveWorkbook
 filename = Application.GetOpenFilename

 If filename = False Then
 Exit Sub
 End If

 Application.ScreenUpdating = False
 Set workbk2 = Workbooks.Open(filename)
 Set wks1 = workbk1.Worksheets("Urlaubsberechnung")
 Set wks2 = workbk2.Worksheets("Mitarbeiter")
 line = 1
 For i = 8 To 550 Step 3
 wks1.Range("A" & line).Value = wks2.Range("A" & i).Value
 wks1.Range("B" & line).Value = wks2.Range("B" & i + 1).Value
 wks1.Range("C" & line).Value = wks2.Range("O" & i + 1).Value
 line = line + 1 'Zeilenzähler erhöhen
 Next i
 workbk1.Activate
 workbk2.Close False
 Application.ScreenUpdating = True
End Sub

Viele Grüße, tester