Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA / Variable Datei aktivieren

Forumthread: VBA / Variable Datei aktivieren

VBA / Variable Datei aktivieren
17.11.2017 11:24:56
Bellandi
Hallo zusammen, (:-)
Habe versucht selbst mich schlau zu machen leider vergeblich.... "noch" totaler Anfänger.
Ich nutze folgenden Makro um eine Dateiauswahl vorzunehmen wo der User eine xbeliebige Datei öffnen kann. Im Anschluss wechsel das Makro in eine andere Datei um einige Daten zu kopieren und dann möchte ich diese Daten in der neu geöffneten Datei einfügen.
Wie aktiviere ich jedoch die neu geöffnete Datei ? Denn diese kann immer einen anderen Namen besitzen ? Ich denke sobald Ihr das Makro liest ist alles Glockenklar..... und wahrscheinlich in keine 30 Sek erledigt (:-)
If MsgBox("Um fortzufahren bitte mit OK bestätigen und CSV Datei zum Importieren der Datensätze auswählen", vbOKCancel, "Meldung1") = vbOK Then
Dim varDatei As Variant
varDatei = Application.GetOpenFilename()
Workbooks.Open Filename:=varDatei
Windows("Überhang automatisch 1.6.xlsm").Activate
Sheets("Daten").Select
Range("A2:J2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
-Workbooks(varDatei).Activate- Dieser Befehl geht gerade nicht. ich möchte nun die ausgewählte Datei aktivieren. Lösung ? (:-)

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Set
17.11.2017 11:31:52
Phi
Eine mögliche Variante ist

dim WB as Workbook
varDatei = Application.GetOpenFilename()
set WB = workbooksopen(varDAtei)
Dann kann diese Datei mit WB.sheets(1).Range("A1") angesprochen werden.
Wieso aktivieren?...
17.11.2017 11:45:31
EtoPHG
Hallo Belandi,
Nach einem Workbooks.Open ist die aktive Arbeitsmappe immer die gerade Geöffnete.
.Activate und .Select sind so ziemlich die überflüssigsten Befehle in VBA.
Lies mal Der Malermeister und sein Geselle , bvor du weiterprogrammierst!
Gruess Hansueli
Anzeige
AW: VBA / Variable Datei aktivieren
17.11.2017 13:37:46
fcs
Hallo Bellandi,
ergänzend zu den Hinweisen von Phil und Hansueli.
Wenn man mit mehreren Dateien in einem Makro arbeitet, dann ist es ratsam mit Objektvariablen zu arbeiten, denen die Dateien zum geeigneten Zeitpunkt (zu Beginn oder nach dem Öffnen) zugewiesen werden.
Gleiches sollte man auch mit den Tabellenblättern machen.
Dann kann man über die Variablen auf die Dateien/Tabellenblätter zugreifen und erspart sich Select/Activate-Aktionen.
Nachfolgend mal dein Makro in dieser Richtung beispielhaft erweitert.
Gruß
Franz
Sub daten_uebernehmen()
Dim wkbAktiv As Workbook
Dim wksDaten As Worksheet
Dim wkbCSV As Workbook
Dim wksCSV As Worksheet
Dim varDatei As Variant
Dim LetzteZeile As Long
If MsgBox("Um fortzufahren bitte mit OK bestätigen und CSV Datei zum Importieren " _
& "der Datensätze auswählen", vbOKCancel, "Meldung1") = vbOK Then
varDatei = Application.GetOpenFilename("csv-Datei (*.csv),*.csv", _
Title:="CSV-Datei auswählen")
If varDatei = False Then Exit Sub
Set wkbAktiv = ActiveWorkbook
Set wksDaten = wkbAktiv.Worksheets("Daten")
Set wkbCSV = Workbooks.Open(Filename:=varDatei, ReadOnly:=True, local:=True)
Set wksCSV = wkbCSV.Worksheets(1)
'Altdaten löschen
With wksDaten
LetzteZeile = .UsedRange.Row + .UsedRange.Rows.Count - 1
If LetzteZeile > 1 Then
.Range(.Cells(2, 1), .Cells(LetzteZeile, 10)).ClearContents
End If
End With
'CSV-Daten kopieren
With wksCSV
.Range(.Cells(2, 1), .Cells(LetzteZeile, 10)).Copy wksDaten.Cells(2, 1)
Application.CutCopyMode = False
End With
wkbCSV.Close savechanges:=False
End If
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA: Variable Datei aktivieren in Excel


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Neues Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Code einfügen: Füge den folgenden VBA-Code ein, um eine CSV-Datei auszuwählen und die Daten zu kopieren:

    Sub daten_uebernehmen()
        Dim wkbAktiv As Workbook
        Dim wksDaten As Worksheet
        Dim wkbCSV As Workbook
        Dim wksCSV As Worksheet
        Dim varDatei As Variant
        Dim LetzteZeile As Long
    
        If MsgBox("Um fortzufahren bitte mit OK bestätigen und CSV Datei zum Importieren der Datensätze auswählen", vbOKCancel, "Meldung1") = vbOK Then
            varDatei = Application.GetOpenFilename("csv-Datei (*.csv),*.csv", Title:="CSV-Datei auswählen")
            If varDatei = False Then Exit Sub
    
            Set wkbAktiv = ActiveWorkbook
            Set wksDaten = wkbAktiv.Worksheets("Daten")
            Set wkbCSV = Workbooks.Open(Filename:=varDatei, ReadOnly:=True, Local:=True)
            Set wksCSV = wkbCSV.Worksheets(1)
    
            'Altdaten löschen
            With wksDaten
                LetzteZeile = .UsedRange.Row + .UsedRange.Rows.Count - 1
                If LetzteZeile > 1 Then
                    .Range(.Cells(2, 1), .Cells(LetzteZeile, 10)).ClearContents
                End If
            End With
    
            'CSV-Daten kopieren
            With wksCSV
                .Range(.Cells(2, 1), .Cells(LetzteZeile, 10)).Copy wksDaten.Cells(2, 1)
                Application.CutCopyMode = False
            End With
    
            wkbCSV.Close SaveChanges:=False
        End If
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle das Makro daten_uebernehmen und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler: „Datei nicht gefunden“: Stelle sicher, dass der Dateipfad korrekt ist. Überprüfe auch, ob die Datei existiert.
  • Fehler: „Aktives Arbeitsblatt nicht gefunden“: Überprüfe, ob das Arbeitsblatt "Daten" tatsächlich existiert. Der Name muss exakt übereinstimmen.
  • Fehler: „Typen unverträglich“: Dies kann vorkommen, wenn du versuchst, Daten in einem falschen Format zu kopieren. Stelle sicher, dass die Zellen kompatible Formate haben.

Alternative Methoden

Eine Alternative zur Verwendung von .Activate und .Select ist die Verwendung von Objektvariablen, wie im Beispiel von Benutzer fcs beschrieben. Dadurch wird der Code effizienter und weniger fehleranfällig. Hier ist ein Beispiel:

Dim WB As Workbook
Set WB = Workbooks.Open(varDatei)

Mit diesem Ansatz kannst du direkt auf die Arbeitsblätter zugreifen, ohne sie vorher aktivieren zu müssen.


Praktische Beispiele

Wenn du mehrere CSV-Dateien verarbeiten möchtest, kannst du eine Schleife verwenden, um den Auswahlprozess zu automatisieren:

Sub mehrere_daten_uebernehmen()
    Dim varDatei As Variant
    Do
        varDatei = Application.GetOpenFilename("csv-Datei (*.csv),*.csv", Title:="CSV-Datei auswählen", MultiSelect:=True)
        If varDatei = False Then Exit Sub
        ' Füge hier den Code zum Verarbeiten der CSV-Datei ein
    Loop While varDatei <> False
End Sub

Tipps für Profis

  • Vermeide .Select und .Activate: Diese Befehle verlangsamen deinen Code. Arbeite stattdessen direkt mit Objektvariablen.
  • Nutze Fehlerbehandlung: Füge On Error Resume Next ein, um Fehler abzufangen, und überprüfe anschließend mit If Err.Number <> 0, ob ein Fehler aufgetreten ist.
  • Dokumentiere deinen Code: Schreibe Kommentare, um den Code für dich und andere verständlicher zu machen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die richtige Datei geöffnet wird?
Verwende Application.GetOpenFilename, um eine Dateiauswahl zu ermöglichen. Achte darauf, die Datei mit der richtigen Dateiendung auszuwählen.

2. Was tun, wenn ich mehrere Arbeitsblätter gleichzeitig bearbeiten möchte?
Verwende Schleifen und Arrays, um durch die Arbeitsblätter zu iterieren und die gewünschten Aktionen auszuführen.

3. Warum sollte ich Objektvariablen verwenden?
Objektvariablen machen deinen Code effizienter und lesbarer. Du kannst so auf die Arbeitsmappe oder das Arbeitsblatt zugreifen, ohne sie aktivieren zu müssen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige