Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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
Inhaltsverzeichnis

Anpassung Import-Code

Anpassung Import-Code
12.02.2016 10:23:38
Bernd
Hallo zusammen,
der nachfolgende Code kopiert den Bereich eines Tabellenblattes aus einer Datei in dein vorgebenenes Tabellenblatt einer anderen Datei. Nun würde ich gerne den Code in der Form erweitern, dass die Quelldatei und die Zieldatei zwar unverändert sind, mim aber mehrere Tabellenblätter mit jeweils eigenem vorgegebenem Bereich analog kopiert werden. Kann mir da jemand helfen?
Bernd
PS:
Hier ist der bisherige Code für eine Tabelle:
Sub DatenImportieren()
Dim wkbQuelle As Workbook, wksQuelle As Worksheet, varQuelle As Variant
Dim wkbZiel As Workbook, wksZiel As Worksheet
On Error GoTo Fehler
Set wkbZiel = ActiveWorkbook
With Application.FileDialog(msoFileDialogOpen)
.Title = "Bitte die Datei mit den Quelldaten auswählen"
Application.ScreenUpdating = False
If .Show = -1 Then
varQuelle = .SelectedItems(1)
Set wkbQuelle = Application.Workbooks.Open(varQuelle, ReadOnly:=True)
Set wksQuelle = wkbQuelle.Worksheets("Quelle1")
Set wksZiel = wkbZiel.Worksheets("Ziel1")
With wksZiel.Range("A1:H75")
.ClearContents
.ClearFormats
End With
wksQuelle.Range("A1:H75").Copy
With wksZiel.Range("A1")
'.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
wkbQuelle.Close savechanges:=False
Set wkbQuelle = Nothing
End If
End With
Fehler:
Application.ScreenUpdating = True
With Err
Select Case .Number
Case 0 'alles OK
Case 9
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Tabelle ist in Datei nicht vorhanden", vbOKOnly, "Fehlerprüfung"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbOKOnly, "Fehlerprüfung"
End Select
End With
If Not wkbQuelle Is Nothing Then wkbQuelle.Close savechanges:=False
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anpassung Import-Code
12.02.2016 12:12:14
Michael
Hallo Bernd,
prinzipiell mit einer Schleife, die entsprechende Werte durchläuft, die in einer "Speicherstruktur" vorhanden sind, hier mit einem händisch angelegten Array:
Sub DatenImportieren()
Dim wkbQuelle As Workbook, wksQuelle As Worksheet, varQuelle As Variant
Dim wkbZiel As Workbook, wksZiel As Worksheet
Dim wK(1 To 6, 1 To 4) As String   ' wK für was Kopieren
Dim w As Long                      ' w wie welches
wK(1, 1) = "Quelle1": wK(1, 2) = "A1:H75": wK(1, 3) = "Ziel1": wK(1, 4) = "A1"
wK(2, 1) = "Quelle2": wK(2, 2) = "A1:H75": wK(2, 3) = "Ziel2": wK(2, 4) = "A1"
' usw. bis nur zum Beispiel
wK(6, 1) = "Quelle6": wK(6, 2) = "A1:H75": wK(6, 3) = "Ziel6": wK(6, 4) = "A1"
On Error GoTo Fehler
Set wkbZiel = ActiveWorkbook
With Application.FileDialog(msoFileDialogOpen)
.Title = "Bitte die Datei mit den Quelldaten auswählen"
Application.ScreenUpdating = False
If .Show = -1 Then
varQuelle = .SelectedItems(1)
Set wkbQuelle = Application.Workbooks.Open(varQuelle, ReadOnly:=True)
For w = 1 To 6         ' Schleife **********
'      Set wksQuelle = wkbQuelle.Worksheets("Quelle1")
Set wksQuelle = wkbQuelle.Worksheets(wK(w, 1))
'      Set wksZiel = wkbZiel.Worksheets("Ziel1")
Set wksQuelle = wkbQuelle.Worksheets(wK(w, 3))
'      With wksZiel.Range("A1:H75")
With wksZiel.Range(wK(w, 2))
.ClearContents
.ClearFormats
End With
'      wksQuelle.Range("A1:H75").Copy
wksQuelle.Range(wK(w, 2)).Copy
'      With wksZiel.Range("A1")
With wksZiel.Range(wK(w, 4))
'.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
Next                    ' bis hier **************
Application.CutCopyMode = False
wkbQuelle.Close savechanges:=False
Set wkbQuelle = Nothing
End If
End With
Fehler:
Application.ScreenUpdating = True
With Err
Select Case .Number
Case 0 'alles OK
Case 9
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Tabelle ist in Datei nicht vorhanden", vbOKOnly, "Fehlerprüfung"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbOKOnly, "Fehlerprüfung"
End Select
End With
If Not wkbQuelle Is Nothing Then wkbQuelle.Close savechanges:=False
End Sub
Der "Standardtext" dazu ist: http://www.online-excel.de/excel/singsel_vba.php?f=152
Dort steht auch, wie man ein Array direkt aus einem Tabellenbereich einliest - das ist vielleicht schöner zu handhaben als die händische Eingabe in der Sub.
Der Knackpunkt ist, daß die VBA-Bereichs- bzw. Blattangaben schlichte Strings (wie z.B. "A1") erwarten, und die kann man händisch reinschreiben oder als Variable übergeben.
Schöne Grüße,
Michael

Anzeige
Vielen Dank!
12.02.2016 12:25:19
Bernd
Danke!

gerne, vielen Dank für die Rückmeldung owT
12.02.2016 19:42:50
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige