Import einer Excel Datei im selben file anhand von VBA

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Import einer Excel Datei im selben file anhand von VBA

    Hallo zusammen,

    Ich bräuchte eure Hilfe
    1. Ich habe eine Datei in der auf der ersten Mappe eine Liste zufinden ist. Auf diesr Mappe soll eine Schaltfläche hiterleget werden, dass beim Anklicken des Buttons sich ein Dialogfenster öffnet aus der ich dann die gewünschte excel datei importieren kann
    2. die Importdatei soll auf eine zweite arbeitsmappe in der selben masterdatei importiert werden.
    3. dieser vorgang wiederholt sich jeden monat, sodass immer eine weitere arbeitsmappe in der masterdatei für die importierte datei erstellt werden soll.


    Das würde mir falls ihr dafür eine lösung habt vorerst genügen.
    Ich wäre euch sehr dankbar wenn ihr mir hierbei weiter helfen könntet.

    Anbei meine bisheriger Versuch es zu programmieren.
    Dabei habe ich ein Problem:
    Die importierte Datei wird in einerm neuen file geöffnet das soll aber NICHT so sein


    Visual Basic-Quellcode

    1. Sub Datenimport()
    2. 'Daten importieren in Zelle A1
    3. '
    4. 'Datei öffnen-Dialog
    5. Dim Datei As String
    6. Application.Dialogs(xlDialogOpen).Show
    7. Datei = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "XLS", "Auswahl", False)
    8. 'Abbrechen falls keine Datei ausgewählt
    9. If Datei = "Falsch" Then
    10. MsgBox "Keine Daten zum Import ausgewählt!", , "Abbruch"
    11. Exit Sub
    12. End If
    13. Sheets("Import").Activate
    14. With ActiveSheet.QueryTables.Add(Connection:=Datei, Destination:=Range("A1"))
    15. .Name = "Importdatei"
    16. .FieldNames = True
    17. .RowNumbers = False
    18. .FillAdjacentFormulas = False
    19. .PreserveFormatting = True
    20. .RefreshOnFileOpen = False
    21. .RefreshStyle = xlInsertDeleteCells
    22. .SavePassword = False
    23. .SaveData = True
    24. .AdjustColumnWidth = True
    25. .RefreshPeriod = 0
    26. .TextFilePromptOnRefresh = False
    27. .TextFilePlatform = 1252
    28. .TextFileStartRow = 1
    29. .TextFileParseType = xlDelimited
    30. .TextFileTextQualifier = xlTextQualifierDoubleQuote
    31. .TextFileConsecutiveDelimiter = False
    32. .TextFileTabDelimiter = True
    33. .TextFileSemicolonDelimiter = True
    34. .TextFileCommaDelimiter = False
    35. .TextFileSpaceDelimiter = False
    36. .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 2, 1)
    37. .TextFileTrailingMinusNumbers = True
    38. .Refresh BackgroundQuery:=False
    39. End With
    40. 'ZeilenUndSpaltenZahl
    41. MsgBox ActiveSheet.Cells.UsedRange & " Zeilen " & _
    42. ActiveSheet.Cells.UsedRange & " Spalten."
    43. End Sub


    Beitrag formatiert ~ EaranMaleasi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    @Ufuk
    Es gibt einen Code Tag. Nutze bitte diesen. Sonst ist der Code unverständlich.

    Edit:

    Korrigiere bitte auch den Code.
    Falsch => False zum Beispiel

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „a.b_om“ ()

    Dein Code. Den kannst du nicht einfach so als Text posten. Klar kannst du, aber es ist so schwieriger dir zu helfen. Nimm einen Codetag um den Code. Schau im Anhang welchen ich dir Vorschlage.

    2. Dein Code hat in einem If Falsch geschrieben. Ich weiss nicht, ob das mit VBA zu tun hat, aber üblich ist das nicht(meines Erachtens).

    Edit:

    ich kann das nicht für dich machen. Entweder machst es du, oder ein Super-Moderator, der das ändert.
    Bilder
    • Unbenannt.PNG

      22,71 kB, 1.583×90, 115 mal angesehen
    2. Dein Code hat in einem If Falsch geschrieben. Ich weiss nicht, ob das mit VBA zu tun hat, aber üblich ist das nicht(meines Erachtens).

    "Falsch" steht in Gänsefüßchen, ist also ein String.
    Einfach mal in VBA testen


    Mit CodeTags sieht's so aus: (Für VBA auf VB 6.0 klicken)

    Visual Basic-Quellcode

    1. Sub Datenimport()
    2. 'Daten importieren in Zelle A1
    3. '
    4. 'Datei öffnen-Dialog
    5. Dim Datei As String
    6. Application.Dialogs(xlDialogOpen).Show
    7. Datei = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "XLS", "Auswahl", False)
    8. 'Abbrechen falls keine Datei ausgewählt
    9. If Datei = "Falsch" Then
    10. MsgBox "Keine Daten zum Import ausgewählt!", , "Abbruch"
    11. Exit Sub
    12. End If
    13. Sheets("Import").Activate
    14. With ActiveSheet.QueryTables.Add(Connection:=Datei, Destination:=Range("A1"))
    15. .Name = "Importdatei"
    16. .FieldNames = True
    17. .RowNumbers = False
    18. .FillAdjacentFormulas = False
    19. .PreserveFormatting = True
    20. .RefreshOnFileOpen = False
    21. .RefreshStyle = xlInsertDeleteCells
    22. .SavePassword = False
    23. .SaveData = True
    24. .AdjustColumnWidth = True
    25. .RefreshPeriod = 0
    26. .TextFilePromptOnRefresh = False
    27. .TextFilePlatform = 1252
    28. .TextFileStartRow = 1
    29. .TextFileParseType = xlDelimited
    30. .TextFileTextQualifier = xlTextQualifierDoubleQuote
    31. .TextFileConsecutiveDelimiter = False
    32. .TextFileTabDelimiter = True
    33. .TextFileSemicolonDelimiter = True
    34. .TextFileCommaDelimiter = False
    35. .TextFileSpaceDelimiter = False
    36. .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 2, 1)
    37. .TextFileTrailingMinusNumbers = True
    38. .Refresh BackgroundQuery:=False
    39. End With
    40. 'ZeilenUndSpaltenZahl
    41. MsgBox ActiveSheet.Cells.UsedRange & " Zeilen " & _
    42. ActiveSheet.Cells.UsedRange & " Spalten."
    43. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eierlein“ ()

    Jetzt mach erstmal den CodeTag. Sonst hilft dir sonst fast niemand.

    Ich kenn mich in VBA nicht besonders gut aus. Dachte wäre ein Fehler. Weiss aber auch dass es ein String ist. Und ich habe dein Code falsch intepretiert. War nicht sonderlich leserlich.

    Edit:
    Erst jetzt gemerkt, dass ich ein bisschen zu spät war.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „a.b_om“ ()

    @a.b_om Unterlasse bitte in Zukunft reine "Formatiere deinen Post" Antworten. Wenn du sonst nichts zum Thema beizutragen hast, nutze dafür die "Melden" Funktion. Es ist hingegen kein Problem, das als einmalige Nebenbemerkung zu deiner Antwort mit entsprechenden Beispielen/Links hinzuzufügen.

    @Ufuk Willkommen im Forum. Um Quellcode jeglicher Art lesbarer zu gestalten, gibt es entsprechende Code-Tags, die man genau dafür verwenden kann. Ich bitte dich in Zukunft darum, diese auch anzuwenden. Hier findest du alle Infos darüber:
    [Forum] Wie füge ich Quellcode korrekt im Forum ein?
    @EaranMaleasi
    Sorryyy, passiert nicht wieder. Ich habe mal einen Moderator gefragt, wieso meine Frage mal gemeldet wurde. Jetzt weiss ich wieso. Ich dachte die Melden-Funktion sei nur wegen unangemessene Posts.

    @Ufuk
    Es könnte an der ​GetOpenFilename liegen. Es öffnet ja eine Datei meines Wissens. Öffne doch nur den StreamWriter.

    Ufuk schrieb:

    Sheets("Import").Activate
    With ActiveSheet.QueryTables.Add(Connection:=Datei, Destination:=Range("A1"))
    Dein jetziger Code erzeugt eine QueryTable im Sheet "Import"
    Die Daten sind gelinkt auf die im Dialog ausgewählte Datei.

    Was möchtest du stattdessen?
    Eine Kopie der Datei in einem neuen Sheet?
    Eine QueryTable in einem neuen Sheet?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --