Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1516to1520
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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

15 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige