VBA-Excel-Skript findet Tabelle nicht

Hallo!

Ich benutze Excel 97.
Ich habe ein Skript geschrieben und in PERSONL.xls, also im Programm abgespeichert, damit es für alle möglichen geöffneten Dateien angewandt werden kann.
Hier der Teil, der Probleme macht:

Sub herstellerdoku_vorbereiten()
MsgBox ThisWorkbook.Worksheets.Item(1).Cells(1, 1).Value
MsgBox ThisWorkbook.Worksheets.Item(1).Name
End Sub

Ich erhalte eine leere MsgBox und danach eine MsgBox mit „Tabelle 1“ als Inhalt, obwohl die A1-Zelle gefüllt ist und das Tabellenblatt in der geöffneten Datei anders heißt. Auch „Application.“ vor „ThisWorkbook“ brachte nichts.
Offensichtlich greift die Funktion auf eine imaginäre Excel-Datei zu.

  1. Auf welche?
  2. Was kann ich tun, damit sie auf die einzig geöffnete Datei zugreift?

Danke für die Antworten,
Martin.

Hm, also erstmal hätte ich das im Excel-Forum gepostet, nicht hier. Oder arbeitest Du aus einer VB-Applikation heraus?

Ich benutze Excel 97.

Offenbar nicht.

Ich habe ein Skript geschrieben und in PERSONL.xls, also im
Programm abgespeichert, damit es für alle möglichen geöffneten
Dateien angewandt werden kann.

Also das verstehe ich schon einmal nicht. Sprich: Wo hast Du das Teil abgespeichert? Ich nehme mal an, dass Du es innerhalb von „DieseArbeitsmappe“ im VBA-Projekt der Datei abgelegt hast. Und warum gerade „PERSONL.XLS“? Ist das nicht so ´ne mitgelieferte Beispiel-Datei?

Hier der Teil, der Probleme macht

Sub herstellerdoku\_vorbereiten()
 MsgBox ThisWorkbook.Worksheets.Item(1).Cells(1, 1).Value
 MsgBox ThisWorkbook.Worksheets.Item(1).Name
End Sub

Hm, soweit in Ordnung. Aber guck es Dir mal genau an! Da steht " This Workbook"! Und das bedeutet, dass das Skript immer auf das Workbook zugreift, in dem es steht. Und das ist vermutlich das „PERSONL.xls“. Nix imaginär. Erstze es mal durch " Active Workbook" und prüfe, ob das Problem noch auftaucht. Oder Du nimmst eben ein ganz bestimmtes Workbook: Application.Workbooks(„Dieses“).

Kristian

Ich erhalte eine leere MsgBox und danach eine MsgBox mit
„Tabelle 1“ als Inhalt, obwohl die A1-Zelle gefüllt ist und
das Tabellenblatt in der geöffneten Datei anders heißt. Auch
„Application.“ vor „ThisWorkbook“ brachte nichts.
Offensichtlich greift die Funktion auf eine imaginäre
Excel-Datei zu.

  1. Auf welche?
  2. Was kann ich tun, damit sie auf die einzig geöffnete Datei
    zugreift?

Danke für die Antworten,
Martin.

Hm, also erstmal hätte ich das im Excel-Forum gepostet, nicht
hier. Oder arbeitest Du aus einer VB-Applikation heraus?

Ich habe bereits dem Moderator empfohlen, eine Brettbeschreibung anzulegen. VB, VB-Skript, VBA sind eben eine große Familie, da möchte ich schon wissen, welche Verwandten man dabeihaben möchte und welche nicht. Andere Postings beziehen sich auch auf Excel.

Ich benutze Excel 97.

Offenbar nicht.

Doch! Immerhin wird mir das im Programm unter Info angezeigt.

Ich habe ein Skript geschrieben und in PERSONL.xls, also im
Programm abgespeichert, damit es für alle möglichen geöffneten
Dateien angewandt werden kann.

Also das verstehe ich schon einmal nicht. Sprich: Wo
hast Du das Teil abgespeichert? Ich nehme mal an, dass Du es
innerhalb von „DieseArbeitsmappe“ im VBA-Projekt der Datei
abgelegt hast. Und warum gerade „PERSONL.XLS“? Ist das nicht
so ´ne mitgelieferte Beispiel-Datei?

Ich verstehe es aber, zumindest nach dem Lesen der Hilfe:
„Soll ein Makro immer dann verfügbar sein, wenn Sie mit Microsoft Excel arbeiten, speichern Sie es in der persönlichen Makro-Arbeitsmappe im Ordner XLStart.“

Es ist nicht so toll, die Anliegen von Forumsbenutzern nicht zu verstehen und somit als unsinnig abzuwerten. Jeder programmiert, wie er will. Meine Begründung „damit es für alle möglichen Dateien geöffnet werden kann“ ist doch wohl deutlich genug. Kennst Du noch andere Möglichkeiten, das zu erreichen?

Hier der Teil, der Probleme macht

Sub herstellerdoku_vorbereiten()
MsgBox ThisWorkbook.Worksheets.Item(1).Cells(1, 1).Value
MsgBox ThisWorkbook.Worksheets.Item(1).Name
End Sub

Hm, soweit in Ordnung. Aber guck es Dir mal genau
an! Da steht " This Workbook"! Und das bedeutet, dass das
Skript immer auf das Workbook zugreift, in dem es steht. Und
das ist vermutlich das „PERSONL.xls“. Nix imaginär. Erstze es
mal durch " Active Workbook" und prüfe, ob das Problem
noch auftaucht. Oder Du nimmst eben ein ganz bestimmtes
Workbook: Application.Workbooks(„Dieses“).

Kristian

Der Vorschlag hat wirklich geholfen. Freue mich auch immer über Forumsbenutzer, die sich an die Nettiquette halten…

Gruß, Martin.

Ich habe bereits dem Moderator empfohlen, eine
Brettbeschreibung anzulegen. VB, VB-Skript, VBA sind eben eine
große Familie, da möchte ich schon wissen, welche Verwandten
man dabeihaben möchte und welche nicht. Andere Postings
beziehen sich auch auf Excel.

Das war nicht als Kritik, sondern als Hinweis zu verstehen. Ich habe nämlich den Eindruck, dass man im Excel-Brett manchmal mehr Erfolg hat mit solchen Sachen.

Ich benutze Excel 97.

Offenbar nicht.

Doch! Immerhin wird mir das im Programm unter Info angezeigt.

Achso, sorry :wink: Das bezog sich auf den letzten Satz von MIR, nicht auf Deinen. Ich hatte da gefragt, ob Du aus VB heraus arbeitest.

Ich verstehe es aber, zumindest nach dem Lesen der Hilfe:
„Soll ein Makro immer dann verfügbar sein, wenn Sie mit
Microsoft Excel arbeiten, speichern Sie es in der persönlichen
Makro-Arbeitsmappe im Ordner XLStart.“

Hm, na das klingt ja schon ganz anders. In diesem Licht wird´s klar, und was derartiges hatte ich auch vermutet. Aber manchmal stiftet es mehr Verwirrung nachzufragen, als einfach nur zu antworten.

Es ist nicht so toll, die Anliegen von Forumsbenutzern nicht
zu verstehen und somit als unsinnig abzuwerten. Jeder
programmiert, wie er will. Meine Begründung „damit es für alle
möglichen Dateien geöffnet werden kann“ ist doch wohl deutlich
genug. Kennst Du noch andere Möglichkeiten, das zu erreichen?

So ganz eindeutig war´s nicht. Und übrigens: Etwas nicht zu verstehen und etwas abzuwerten ist was anderes. Ich habe in den vergangenen … moment … knapp 2700 Tagen noch keinen Artikel abgewertet. Wenn´s hier vielleicht so rüber kam - hm, tut mir leid, shit happens.

Der Vorschlag hat wirklich geholfen.

Na das ist ja gut. Übrigens nochmal zum XLStart: Dort hinein legt man für gewöhnlich sogenannte Add-Ins (Endung *.xla). Das sind eigentlich ganz normale Excel-Dateien, die man eben als *.xla abspeichert (wie *.dot-Dateien bei Word). Beim Start lädt Excel nun alle Add-Ins, die es in XLStart und noch irgendwo finden kann. Die sind dann im Hintergrund verfügbar und stellen ihre Funktionen der gesamten Applikation (Excel) zur Verfügung.
Du hast nun offenbar irgendeine vorhandene Datei verwendet (PERSONL.XLS oderso). Das würde ich aber nicht unbedingt machen. Für eigene VBA-Funktionen und -Formulare kannst Du Dir z.B. eine Datei „EigeneMakros.xla“ abspeichern. Darin fügst Du dann ein VBA-Modul ein, und da legst Du Deinen Code rein.

Freue mich auch immer über Forumsbenutzer,
die sich an die Nettiquette halten…

Zu denen ich (sonst) mit Sicherheit gehöre