Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Tabellenblätter (Reihenfolge schützen bzw. variable Anwahl von Blättern)





Frage

Hi leute! Habe mal wieder ein Problemchen: meine Datei hat insgesamt 49 Tabellenblätter. Im Laufe der Zeit könnten sich die Bezeichnungen der Tabellenblätter ändern. Da ich mich in meiner VBA-Programmierung auf die Tabellenblätter beziehe, müsste ich jedesmal den Quellcode anpassen bei Änderungen. Die Möglichkeit Worksheets(1)... ist mir zu unsicher, da bei unabsichtlichem Verschieben der Tabellenblätter Probleme bei der Datenübernahme entstehen würden. Ich suche nun nach einer Möglichkeit, entweder die Reihenfolge der Tabellenblätter innerhalb der Datei zu schützen, oder die einzelnen Tabellenblätter variabel anwählen zu können (mein Versuch war: Worksheets("01 " & "*"); das funktioniert aber leider nicht - ich würde gerne die Tabellenblätter nummerieren zusätzlich zu ihrer Bezeichnung und mich dann bei der Anwahl des Blattes nur auf diese laufende Nummer beziehen; dann könnte ich die weitere Bezeichnung ändern, ohne den Quellcode ändern zu müssen). Ich hoffe, das war einigermaßen verständlich :-)! Schon jetzt vielen Dank für eure Mühen und Hilfe!!! Gruß, Richie

Antwort 1 von JoeKe

Moin Richie,

es gibt drei Möglichkeiten Tabellenblätter anzusprechen.
Über den Index, den Namen und den Excelnamen.
Den Excelnamen siehst du im VBAProjekt-Explorer, er steht vor dem Blattnamen in Klammern.
Im Code wird er in [ ] Klammern angegeben.

[Tabelle1].Range("A1")="Beispiel"

Egal welchen Namen [Tabelle1] hat oder an welche Position es verschoben wird, es wird immer in A1 "Beispiel" geschrieben.

Gruß

JöKe

Antwort 2 von Richie200978

Hi JöKe!

Wie immer superschnelle Antwort!!! Dafür schonmal ein großes Dankeschön!!!
Ich hab´s "im Kleinen" auch gleich ausprobiert und es scheint die Lösung meines Problems zu sein!

...was mich jetzt erwartet, ist die Anpassung meiner doch sehr umfangreichen Quellcodes; aber da muss ich jetzt wohl durch ;-)!

Viele Grüße aus Kaiserslautern!
Richie

Antwort 3 von JoeKe

Hallo Richie,

erstmal vielen Dank für deine Rückmeldung.

Nachträgliches anpassen ist leider selten schnell erledigt. ;-\
Aber in diesem Fall kannst du doch eventuell mit "suchen und ersetzen" arbeiten.

Gruß

JöKe

Antwort 4 von Richie200978

Hi JöKe!

...die Anpassungen halten sich zum Glück in Grenzen ;-)!
Hauptsache es funktioniert!!!

Vielen Dank für deine Hilfe!

Gruß,
Richie

Antwort 5 von Richie200978

Hi JöKe!

Leider ist jetzt doch noch ein neues Problem aufgetaucht.
Ich habe bei mehreren Buttons folgenden Quellcode hinterlegt:

"Dim Zieldatei As String
Dim Quelldatei As String
Quelldatei = ActiveSheet.Quelldateiname.Value
Zieldatei = ActiveSheet.Zieldateiname.Value
Application.Workbooks.Open (Quelldateipfad.Value), UpdateLinks:=3

Workbooks(Zieldatei).[Tabelle5].Unprotect
[Tabelle5].Range("F10:F1065").Copy
Workbooks(Zieldatei).[Tabelle5].Range ("F10:F1065").PasteSpecial (xlPasteValues)
Application.CutCopyMode = False
Workbooks(Zieldatei).[Tabelle5].Range("F10:F1065").Font.Color = vbBlue
Workbooks(Zieldatei).[Tabelle5].Protect ..."

Davor hatte ich bei [Tabelle5] Worksheets("xyz") stehen. Das hatte zwar funktioniert; genau das wollte ich allerdings flexibel gestalten. Jetzt bekomme ich schon in der Unprotect-Zeile die Fehlermeldung 438 (Objekt unterstützt Eigenschaft oder Methode nicht).

Kannst du mir sagen, woran das liegt, bzw. wie ich das umgehen kann?...du merkst ich bin immer noch Anfänger, was VBA angeht, soll das Programm aber diese Woche noch zum Laufen bringen.
Wäre super, wenn du mir nochmal helfen könntest!

Schonmal vielen Dank und Grüße,
Richie

Antwort 6 von Richie200978

Hi JöKe!

Hab´s über folgende Änderung geschafft, dass es wieder läuft; vielleicht gibt´s aber noch ne elegantere Möglichkeit?! :-)

...
Workbooks(Zieldatei).Activate
[Tabelle5].Unprotect ´hebt Blattschutz auf
Workbooks(Quelldatei).Activate
[Tabelle5].Range("F10:F1065").Copy
...

Viele Grüße,
Richie

Antwort 7 von JoeKe

Hallo Richie,

man kann in den meisten Fällen auf "Select" und "Activate" verzichten, aber dies ist einer der Fälle bei denen ein aktivieren nötig ist. Somit hast du meiner Meinung nach schon die beste Lösung selbst gefunden.

Gruß

JöKe

Antwort 8 von Richie200978

...nochmals vielen Dank für die schnelle Rückmeldung!!!

...jetzt kann ich mich "beruhigt" an die Anpassungen machen ;-)!
...dein Tipp mit "suchen und ersetzen" zu arbeiten, hat mir übrigens auch noch viel Zeit und Arbeit erspart!!!

Viele Grüße,
Richie

Antwort 9 von Richie200978

Hi JöKe,
...jetzt dachte ich, ich hätte alles; bin aber doch noch auf ein Problem gestoßen. Ich habe nun folgenden Quellcode, der eigentlich auch ohne Fehlermeldung durchläuft und allem Anschein nach funktioniert. Dabei soll ein best. Bereich aus einer Quelldatei kopiert werden und in der Zieldatei eingefügt werden.
Aber anscheinend gehen die Werte irgendwo verloren. Es stehen nämlich nach der Übernahme immer noch die alten Werte in der Zieldatei. Keine Ahnung warum; es kommt wie gesagt auch keine Fehlermeldung, deshalb habe ich es jetzt erst gemerkt.

Quellcode:

Dim Zieldatei As String
Dim Quelldatei As String
Quelldatei = ActiveSheet.Quelldateiname.Value
Zieldatei = ActiveSheet.Zieldateiname.Value
Application.Workbooks.Open (Quelldateipfad.Value), UpdateLinks:=3

Workbooks(Zieldatei).Activate
[Tabelle5].Unprotect ´hebt Blattschutz auf
Workbooks(Quelldatei).Activate
[Tabelle5].Range("F10:F1065").Copy
Workbooks(Zieldatei).Activate
[Tabelle5].Range("F10:F1065").PasteSpecial (xlPasteValues)
Application.CutCopyMode = False
[Tabelle5].Range("F10:F1065").Font.Color = vbBlue
[Tabelle5].Protect ´setzt Blattschutz wieder ein

[Tabelle13].Unprotect ´hebt Blattschutz auf
Workbooks(Quelldatei).Activate
[Tabelle13].Range("F10:F1065").Copy
Workbooks(Zieldatei).Activate
[Tabelle13].Range("F10:F1065").PasteSpecial (xlPasteValues)
Application.CutCopyMode = False
[Tabelle13].Range("F10:F1065").Font.Color = vbBlue
[Tabelle13].Protect ´setzt Blattschutz wieder ein

wäre super, wenn du nochmal drüber schauen könntest; ich komme nämlich nicht mehr weiter!
Vielen Dank und Grüße,
Richie

Antwort 10 von JoeKe

Hallo Richie,

ich habe leider erst jetzt bemerkt das du mit zwei Dateien arbeitest.
Das ansprechen der Tabellenblätter, wie von mir vorgeschlagen, funktioniert leider nur in der Datei in der sich das Makro befindet.

Gruß
JöKe

Antwort 11 von Richie200978

...dann muss ich mir was anderes einfallen lassen!

Trotzdem vielen Dank für deine Hilfe!!!

Viele Grüße,
Richie

Antwort 12 von Richie200978

Hi Leute,
kurze Info, wie ich das Problem gelöst habe; ist wahrscheinlich nicht elegant, aber funktioniert (falls jemand mal ein ähnliches Problem haben sollte!):
Ich spreche die Tabellenblätter nun über ihre Position innerhalb der Datei an; Bsp. Worksheets(1) (entspricht Tabellenblatt ganz links in der Datei),...
Um zu vermeiden, das die Tabellenblätter durcheinader kommen, habe ich die Bezeichnungen der Blätter durchnummeriert. Über folgendes Makro bringe ich die Tabellenblätter vor der Datenübernahme
wieder in die richtige Reihenfolge, um zu verhindern, dass Daten aus falschen Tabellenblättern übernommen werden. Wichtig ist allerdings, dass bei einer Änderung der Tabellenblattbezeichnung immer die Nummerierung erhalten bleibt; sonst könnten die Blätter evtl. durcheinander geraten.

...
Dim iMax As Integer
Dim Ibl As Integer
Dim ibl2 As Integer

Application.ScreenUpdating = False
iMax = ActiveWorkbook.Worksheets.Count
For Ibl = 1 To iMax
For ibl2 = Ibl To iMax
If UCase(Worksheets(ibl2).Name) < UCase(Worksheets(Ibl).Name) Then
Worksheets(ibl2).Move before:=Worksheets(Ibl)
End If
Next ibl2
Next Ibl
Application.ScreenUpdating = True
...

Viele Grüße,
Richie

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: