Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Workbook dynamisch ansprechen

Workbook dynamisch ansprechen
05.11.2020 15:02:21
Dennis
Mahlzeit zusammen,
Ich habe eine Datei, in der ich aus anderen Arbeitsmappen(Workbooks) Sachen einlesen möchte...
Ich gebe in einer Inputbox, die KW ein, welche ich haben möchte.
VBA durchsucht den Pfad und öffnet mir die diese gesucht Datei ("KW 43.xlsm") und schreibt den Namen in die Zelle Workbooks("Kontaktliste.xlsm").Sheets("Liste").Range("a1") ("KW 43.xlsm")
in meinem Makro würde ich jetzt gerne mit der Variable arbeiten:
Sub Datenkopieren()
Dim kl As Workbook 'Datei zum Einlesen "Kontaktliste"
Dim pp As Workbook 'variabler Dateiname zum Auslesen z.B. "KW 43.xlsm")
Set kl = ThisWorkbook
Set pp = Workbooks("Kontaktliste.xlsm").Sheets("Liste").Range("a1")
'Hier zum Testen ob es richtig angesprochen wird
kl.Sheets("Liste").Range("B2") = "Fuck"
pp.Sheets("Schicht 1").Range("B7:B16").Select 'MO A1
Kann mir da einer weiter helfen... Steh aufm Schlauch =/
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Workbook dynamisch ansprechen
05.11.2020 18:11:24
ChrisL
Hi Dennis
Hierarchie:
1. Application (Anwendung)
2. Workbook (Arbeitsmappe)
3. Worksheet/Sheet (Tabellenblatt/Blatt)
4. Range (Bereich)
Einer Workbook-Variable kannst du keine Range übergeben.
Dim kl As Workbook
Dim pp As Workbook
Dim strName As String
strName = "KW 43.xlsm" ' kann auch strName=inputbox("blabla") sein
Set kl = ThisWorkbook
Set pp = Workbooks.Open("C:\Pfad\" & strName)
kl.Sheets("Liste").Range("a1") = pp.Name
pp.Sheets("Schicht 1").Range("B7:B16").Select 
cu
Chris
Anzeige
AW: Workbook dynamisch ansprechen
06.11.2020 08:37:55
Dennis
Okay...
Mein Problem jetzt aber ist noch, dass ich den Pfad nicht kenne... bzw. C:\BLABLA\Januar\ , \Februar\ usw...
Ausgeben lassen, kann ich mir den z.B. in einer Zelle von vorherigem Makro in dem er die Datei sucht...
" Workbooks("Kontaktliste.xlsm").Sheets("Liste").Range("a2") = DirToSearch & "\" "
Die Datei ist ja bereits schon offen und in der Taskleiste auch Sichtbar.
Ich habe auch schon versucht mit "Windows.activate" etc, was mich aber auch nicht vorran brachte =/
Anzeige
AW: Workbook dynamisch ansprechen
06.11.2020 11:35:49
ChrisL
Hi Dennis
Wenn die Datei bereits offen ist, dann musst du die Datei natürlich nicht mehr öffnen.
Set pp = Workbooks(strName)
cu
Chris
AW: Workbook dynamisch ansprechen
06.11.2020 11:42:57
Dennis
Hi,
Ich habe es in der zwischenzeit weiter probiert und nun so hinbekommen...
Sub Datenkopieren()
Dim pfad As String
Set kl = ThisWorkbook
pfad = kl.Sheets("Liste").Range("a2")
Set pp = Workbooks.Open(pfad)
Set liste = kl.Worksheets("Liste")
Set S1 = pp.Sheets("Schicht 1")
Set S2 = pp.Sheets("Schicht 2")
Set S3 = pp.Sheets("Schicht 3")
liste.Range("B7:B16").Value = S1.Range("B7:B16").Value

Ich danke dir für die Hilfe und unterstützung..
Ich werde das noch ausprobieren am Montag, da ich bei der Variante jetzt eben die erneute Öffnung der Datei abfragen müsste. Da wäre dein Ansatz jetzt etwas einfacher :) Aber es funktioniert schon mal *thumbs up
PS: Ähm ich müsste das also so ändern?

pfad = kl.Sheets("Liste").Range("a2")
set pp = Workbooks(pfad)
Charmantes Wochenende
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Workbook dynamisch ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Workbook in Excel VBA dynamisch anzusprechen, kannst du die folgenden Schritte befolgen:

  1. Workbook-Variablen deklarieren: Nutze Dim um deine Workbook-Variablen zu definieren.

    Dim kl As Workbook ' Aktuelles Workbook
    Dim pp As Workbook ' Variabel für das zu öffnende Workbook
  2. Workbook setzen: Verwende Set, um die Variablen mit dem entsprechenden Workbook zu verknüpfen.

    Set kl = ThisWorkbook
    Set pp = Workbooks.Open("C:\Pfad\KW 43.xlsm") ' Beispiel für das Öffnen eines Workbooks
  3. Daten transferieren: Du kannst dann auf die Sheets und Zellen innerhalb dieser Workbooks zugreifen.

    kl.Sheets("Liste").Range("A1") = pp.Name
    pp.Sheets("Schicht 1").Range("B7:B16").Copy Destination:=kl.Sheets("Liste").Range("B7")
  4. Fehlerbehandlung: Stelle sicher, dass die Datei existiert, bevor du versuchst, sie zu öffnen.


Häufige Fehler und Lösungen

  • Fehler: "Die Arbeitsmappe kann nicht gefunden werden."

    • Lösung: Überprüfe den Pfad und den Dateinamen. Stelle sicher, dass das Workbook geöffnet ist oder dass der Pfad korrekt ist, wenn du es öffnest.
  • Fehler: "Variable nicht definiert."

    • Lösung: Stelle sicher, dass du die Variablen mit Dim deklariert hast, z.B. Dim pp As Workbook.
  • Fehler: "Method 'Range' of object 'Worksheet' failed"

    • Lösung: Überprüfe, ob das angegebene Worksheet existiert und ob die Range korrekt angegeben ist.

Alternative Methoden

  • Workbook ohne Öffnen ansprechen: Wenn das Workbook bereits geöffnet ist, kannst du es direkt ansprechen:

    Set pp = Workbooks("KW 43.xlsm")
  • Dynamisches Ansprechen von Zellen: Du kannst auch Zellen dynamisch ansprechen, indem du den Zellinhalt nutzt, um die Range zu bestimmen:

    Dim zelle As String
    zelle = kl.Sheets("Liste").Range("A2").Value
    kl.Sheets("Liste").Range(zelle).Value = "Neuer Wert"

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du ein Workbook dynamisch ansprechen kannst:

Sub Datenkopieren()
    Dim kl As Workbook
    Dim pp As Workbook
    Dim pfad As String

    Set kl = ThisWorkbook
    pfad = kl.Sheets("Liste").Range("A2").Value ' Pfad aus Zelle A2
    Set pp = Workbooks.Open(pfad) ' Workbook öffnen

    kl.Sheets("Liste").Range("B7:B16").Value = pp.Sheets("Schicht 1").Range("B7:B16").Value
End Sub

In diesem Beispiel wird der Pfad für das Workbook aus einer Zelle gelesen, bevor das Workbook geöffnet und die Daten kopiert werden.


Tipps für Profis

  • Fehlerbehandlung hinzufügen: Verwende On Error Resume Next, um Fehler zu ignorieren und On Error GoTo 0, um Fehlerbehandlung wieder zu aktivieren.

  • Verwende Option Explicit: Dies zwingt dich dazu, alle Variablen zu deklarieren, was Fehler reduziert.

  • Nutze InputBox für Benutzerinteraktionen: Du kannst das Workbook dynamisch ansprechen, indem du den Benutzern erlaubst, den Dateinamen über eine InputBox einzugeben.

    Dim strName As String
    strName = InputBox("Bitte geben Sie den Dateinamen ein:")

FAQ: Häufige Fragen

1. Wie kann ich auf ein bestimmtes Tabellenblatt innerhalb eines Workbooks zugreifen? Du kannst auf ein Tabellenblatt zugreifen, indem du die Syntax pp.Sheets("Tabellenblattname") verwendest.

2. Was mache ich, wenn ich den Dateipfad nicht kenne? Du kannst eine InputBox verwenden, um den Benutzer nach dem Pfad zu fragen oder den Pfad aus einer Zelle zu lesen.

3. Wie kann ich ein Workbook schließen, nachdem ich die Daten kopiert habe? Verwende pp.Close SaveChanges:=False, um das Workbook zu schließen, ohne die Änderungen zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige