Excel VBA: in geöffnetem Tabellenblatt per Dateipfad eine andere Excel-Tabelle laden?

Hallo Leute!

ich habe da ein kleines problem. ich möchte an eine vorhandene, geöffnete arbeitsmappe, in der bereits ein excel-tabelle geöffnet ist, eine weitere tabelle anhängen. das soll über einen dateipfad geschehen.

also würde das folgendermaßen aussehen: geöffnete arbeitsmappe, in tabelle1 sind daten vorhanden, und nach tabelle2 soll eine neue tabelle geladen werden (über eine dateiauswahl)

die dateiauswahl funktioniert auch soweit schon (siehe code unten) und wird über einen button in der geöffneten arbeitsmappe gestartet.
allerdings öffnet excel dafür eine eigene arbeitsmappe. die zu öffnende datei soll allerdings in der arbeitsmappe, in der der button betätigt wurde, geöffnet werden.

hat jemand eionen vorschlag? sollte ich einen beitrag zu diesem thema übersehen haben, weist mich bitte darauf hin ;)

hier der code:

Private Sub CommandButton1_Click()
' datei laden

ChDir "\"
ChDrive "c:\"

'Das Dialogfenster
Dateiname = Application.GetOpenFilename _
("Micrsoft Excel-Dateien (*.xlsx),*.xlsx")
If Dateiname = False Then Exit Sub
'MsgBox "Ihre Auswahl:" & vbNewLine & Dateiname

' öffnet datei

Sheets("Tabelle1").Activate
Workbooks.Open Filename:=Dateiname, UpdateLinks:=0, ReadOnly:=True

End Sub
 
Ich hatte mal ein Script geschrieben, um alle ersten Sheets aller WB's eines Verzeichnisses in das aktuelle WB zu kopieren.
Du kannst diese beiden Scripte kombinieren.
VBA Excel Importieren der ersten Sheets aller Workbooks eines Verzeichnises

Kombiniert könnte die Funktion ungefähr so aussehen
Visual Basic:
'/**
' *  Importiert ein Worksheet
' * @param Worksheet-Pfad
' * @param optional WS-Index
' */
Public Function importWs(sourceFilePath As String, optional wsIndex as Variant = 0)
    Dim sourceWb As Workbook
    Dim targetWb As Workbook
On Error GoTo err_handler

    'Ziel-Workbook setzen
    Set targetWb = ActiveWorkbook
   
    Set sourceWb = Workbooks.Open(sourceFilePath)
    Call sourceWb.Worksheets(wsIndex).Copy(after:=targetWb.Sheets(targetWb.Sheets.Count))
   
exit_handler:
On Error resume next
    'Aufräumen
    Call sourceWb.Close
    Set sourceWb = Nothing
    Set targetWb = Nothing
    Exit Function
err_handler:
    Call msgbox(Err.Description)
    GoSub exit_handler
End Function
 
hi, erstmal vielen dank für deine mühe und entschuldigung dass ich mich erst jetzt melde, aber ich hatte leider einen längeren krankenhausaufenthalt ohne internet zu verbüßen...

das was du dort gemacht hast sieht vielversprechend aus- doch kann ich nicht alles nachvollziehen (leider, ich anfänger :P)

ich setzte mich mal hin und versuche ob ich das zum laufen kriege :)
 
gleich ein problem:

ich möchte, dass diese function dann ausgeführt wird, wenn auf eine schaltfläche geklickt wurde. muss ich dann einfach die function in den sub reinkopieren? (tut mir leid vermutlich einne total dämliche frage xD)

gleich ein paar fragen zum code^^:

zeile 14: "Set sourceWb = Workbooks.Open(sourceFilePath)" wird damit ein dialogfenster geöffnet, mit dem man die datei angeben kann, deren inhalt quasi kopiert werden soll? oder müsste der code zum öffnen des dialkogfensters extra implementiert werden?

zeile 15: "Call sourceWb.Worksheets(wsIndex).Copy(after:=targetWb.Sheets(targetWb.Sheets.Count))" wird hier der inhalt kopiert und eingefügt? wenn ja, wohin wird er eingefügt? über sourceWb wird ja das gesamte workbook angesprochen. wird dann der inhalt in eine neue tabelle eingefügt`?

sry dass ich diese gasnzen fragen stelle, aber ich konnte es jas leider nicht terstwen :/ daher kannst du mir ja einfach meine allererste frage beantwrten, wenn ich das zum laufen krieg kann ich ja selber versuchen den code nachzuvollziehen ;)

danke dir schonmal!
 
hab das jetzt hionbekommen- musste ein bisschen tüfteln, aber jetzt gehts. der "copy after" befehl war die lösung ;)
vielen dank nochmal!
 

Neue Beiträge

Zurück