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

Forumthread: VBA Zugriff anderes Workbook

VBA Zugriff anderes Workbook
27.09.2016 08:51:50
Matthias
Hi,
bin neu hier im Forum und hab erst vor ein paar Tagen angefangen mich mit VBA zu beschäftigen - nun stehe ich vor folgendem Problem (hoffe das es kein allzu dummes ist^^):
Ich will den Namen der Tabellenreiter ändern, dabei existieren 2 Mgl.
1) der Name dafür steht bereits in Zelle A1
2) es steht eine Nr. in Zelle B1 diese muss jetzt mit der selben Nr. aus einem anderen Excel-Sheet (Spale A) abgeglichen werden und die Bezeichnung (Spalte B) für diese entnommen werden
Mein Problem ist das ich den Verweis oder die Verwendung des 2. Excel-Sheets nicht hinbekomme (das Sheet liegt auch in einem anderen Pfad sofern das relevant sein sollte)
Mein Bisheriger Ansatz ist Folgender:

Sub test()
Dim wks As Worksheet
Dim Such As Range
Dim Ziel As Range
Dim x As Variant
Set Such = Worksheets("Tabelle2").Range("A:A")
Set Ziel = Worksheets("Tabelle2").Range("B:B")
For Each wks In Worksheets
If wks.Range("A1")  "" Then
x = wks.Range("A1")
Else
With Application.WorksheetFunction
x = .Index(Ziel, .Match(wks.Range("B1"), Such, 0), 1)
End With
End If
wks.Name = x
Next
End Sub

Also sofern es alles in einer Excel wäre klappt das derzeit so (evtl. nicht die eleganteste Lösung aber es geht^^)
Die Probleme liegen ja jetzt meines Erachtens im Suchbereich "Such" und Zielbereich "Ziel" da diese ja eigentlich in einem anderen Dokument liegen
Hoffe ich habe das Problem ausreichend geschildert und das ihr mir weiterhelfen könnt :)
Und ich würde mich freuen wenn ich jetzt nicht einfach wie man das in manch einem Forum sieht den fertigen Code bekomme sondern auch ein wenig das wie es funktioniert geschildert bekomme - will es ja lernen
Gruß Matthias
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zugriff anderes Workbook
27.09.2016 10:16:27
ChrisL
Hi Matthias
Ich denke die zweite Mappe müsste geöffnet werden. Ungetestet:
Sub test()
Dim wks As Worksheet, WB As Workbook
Dim Such As Range
Dim Ziel As Range
Dim x As Variant
For Each wks In ThisWorkbook.Worksheets
If wks.Range("A1")  "" Then
x = wks.Range("A1")
Else
Set WB = Workbooks.Open("C:\Pfad\Mappe.xlsx")
Set Such = WB.Worksheets("Tabelle2").Range("A:A")
Set Ziel = WB.Worksheets("Tabelle2").Range("B:B")
With Application.WorksheetFunction
x = .Index(Ziel, .Match(wks.Range("B1"), Such, 0), 1)
End With
WB.Close
End If
wks.Name = x
Next wks
End Sub

Anstelle Index/Match wäre übrigens SVERWEIS (Worksheetfunction.VLookUp) ebenfalls eine Variante gewesen.
cu
Chris
Anzeige
AW: VBA Zugriff anderes Workbook
27.09.2016 11:17:35
Matthias
Super klappt einwandfrei - dank dir!
Hätte jetzt noch eine ergänzende Frage...
Es gibt Tabellenblätter die veraltet sind und bei denen keine Übereinstimmung gefunden wird - diese sollen gelöscht werden
Mein Gedankengang war jetzt das über:
...For Each wks in Worksheets
If IsError(Matchfunktion) = True Then
wks.Delete
ElseIf wks.Range("A1")...
zu machen. Leider funktioniert das nicht - Ich weiß jetzt nur leider nicht warum -_- Ist der Ansatz schon falsch oder muss ich die "Matchfunktion" anpassen.
Oder was wäre eurer Meinung nach ein guter Ansatzpunkt
Grüße Matthias
Anzeige
AW: VBA Zugriff anderes Workbook
27.09.2016 11:26:13
ChrisL
Hi Matthias
Wenn Application.Match kein Treffer liefert, dann gibt es einen Programmabbruch. Du müsstest also vorher prüfen, ob die Nr. überhaupt vorhanden ist, was sich z.B. mit ZÄHLENWENN() (Worksheetfunction.CountIf) bewerkstelligen liesse. Wenn du jetzt aber sowieso umschreibst, dann würde ich dir SVERWEIS VLOOKUP empfehlen, dann sollte auch dein Ansatz mit IsError(Sverweis) funktionieren.
cu
Chris
Anzeige
AW: VBA Zugriff anderes Workbook
27.09.2016 15:19:12
Matthias
Mhh das ist blöd...
Naja aber wenn ich das Richtig sehe dann arbeitet die Funktion WorksheetFunction.VLookup ja wie der SVerweis und ich hab das Problem das der zu aufgebende wert Spaltentechnisch VOR dem zu Matchenden Wert liegt... [hab ich oben nicht so geschrieben sry...] Und der Verweise arbeitet ja nur von links nach rechts...
Anzeige
AW: VBA Zugriff anderes Workbook
27.09.2016 15:35:40
ChrisL
Hi Matthias
Ja dann mit ZählenWenn prüfen
If Worksheetfunction.CountIf(Such, wks.Range("B1")) > 0 Then
' Mache Match
Else
MsgBox "nix da"
Exit Sub
End If
cu
Chris
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Zugriff auf ein anderes Workbook


Schritt-für-Schritt-Anleitung

Um mit VBA auf ein anderes Workbook zuzugreifen, musst Du das Workbook zuerst öffnen. Hier ist eine Schritt-für-Schritt-Anleitung zum Ändern von Tabellennamen basierend auf Inhalten aus einem anderen Excel-Dokument:

  1. Workbook öffnen: Verwende Workbooks.Open und gib den Pfad zum anderen Workbook an.
  2. Ranges definieren: Setze die Such- und Zielbereiche in dem geöffneten Workbook.
  3. Durchlaufe die Worksheets: Nutze eine Schleife, um durch die Worksheets im aktuellen Workbook zu iterieren.
  4. Namen ändern: Überprüfe die Zellen und ändere die Tabellennamen entsprechend.

Hier ist ein Beispielcode:

Sub test()
    Dim wks As Worksheet, WB As Workbook
    Dim Such As Range
    Dim Ziel As Range
    Dim x As Variant
    Set WB = Workbooks.Open("C:\Pfad\Mappe.xlsx")
    Set Such = WB.Worksheets("Tabelle2").Range("A:A")
    Set Ziel = WB.Worksheets("Tabelle2").Range("B:B")

    For Each wks In ThisWorkbook.Worksheets
        If wks.Range("A1") <> "" Then
            x = wks.Range("A1")
        Else
            With Application.WorksheetFunction
                x = .Index(Ziel, .Match(wks.Range("B1"), Such, 0), 1)
            End With
        End If
        wks.Name = x
    Next wks

    WB.Close
End Sub

Häufige Fehler und Lösungen

  1. Fehler beim Zugriff auf das Workbook: Stelle sicher, dass der Pfad zum Workbook korrekt ist und das Workbook nicht bereits geöffnet ist.
  2. Name kann nicht geändert werden: Wenn der Name, den Du zuweisen möchtest, bereits existiert, kannst Du den Fehler „Name kann nicht geändert werden“ erhalten. Überprüfe daher, ob der Name bereits vergeben ist.
  3. Match-Funktion liefert Fehler: Wenn Match keinen Treffer liefert, wird ein Fehler erzeugt. Überprüfe den Wert mit CountIf, um sicherzustellen, dass er existiert.

Alternative Methoden

Anstelle von Index und Match kannst Du auch die VLookup-Funktion verwenden, um Werte in einem anderen Workbook zu suchen. Hier ist ein Beispiel:

x = Application.WorksheetFunction.VLookup(wks.Range("B1"), Such, 2, False)

Diese Methode kann einfacher sein, wenn Du nach einem Wert suchst, der in einer Spalte links steht. Beachte jedoch, dass VLookup nur von links nach rechts funktioniert.


Praktische Beispiele

In diesem Abschnitt findest Du praktische Beispiele, wie Du mit verschiedenen Szenarien umgehen kannst:

  • Ändern von Tabellennamen basierend auf einer Zelle: Wenn in Zelle A1 der Name steht, wird dieser als Tabellenname verwendet.
  • Löschen von nicht übereinstimmenden Tabellenblättern: Wenn kein passender Wert gefunden wird, kannst Du das Blatt löschen:
If WorksheetFunction.CountIf(Such, wks.Range("B1")) = 0 Then
    Application.DisplayAlerts = False
    wks.Delete
    Application.DisplayAlerts = True
End If

Tipps für Profis

  • Verwende With-Anweisungen: Dies verbessert die Lesbarkeit und Effizienz Deines Codes, insbesondere wenn Du mehrere Eigenschaften eines Objekts ändern musst.
  • Error-Handling: Implementiere Fehlerbehandlungsroutinen mit On Error Resume Next, um unerwartete Fehler zu vermeiden.
  • Namen dynamisch generieren: Du kannst auch die Namen von Worksheets basierend auf Datum oder anderen Variablen dynamisch erstellen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Workbook geöffnet ist?
Du kannst mit einer If-Anweisung überprüfen, ob das Workbook bereits geöffnet ist, bevor Du versuchst, es zu öffnen.

2. Was passiert, wenn der Name, den ich verwenden möchte, bereits existiert?
Wenn der Name bereits verwendet wird, wird VBA einen Fehler ausgeben. Du solltest daher sicherstellen, dass der Name einzigartig ist, bevor Du ihn zuweist.

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