Autor
|
Thema: Makro in Konstruktionstabelle - Methode fehlgeschlagen (3979 mal gelesen)
|
Scoopa Mitglied MB Techniker
Beiträge: 224 Registriert: 26.04.2006
|
erstellt am: 03. Jun. 2010 11:42 <-- editieren / zitieren --> Unities abgeben:
Hallo versuche gerade eine Konstruktionstabelle über eine Eingabeform zu steuern. Habe alles zuerst nur in Excel programmiert. Dort funktioniert es ohne weiteres. Nach dem Einfügen als Konstruktionstabelle in ein Bauteil in SW kommt im Modul an folgender Stelle: Dim sheet As Worksheet Dim lookupTable As Dictionary Set sheet = Sheets("Tabelle1") 'hier bleibt der Debugger immer hängen und bringt immer folgenden fehler: Die Methode 'Sheets' für das Objekt '_Global' ist fehlgeschlagen Mir ist aufgefallen, dass beim Bearbeiten der Tabelle anscheinend immer eine neue Tabelle angelegt wird in der vermutlich der Code nicht mehr vorhanden ist? Leider komme ich nicht weiter und weiss nicht wie ich den Fehler beheben oder umgehen kann. Würde mich freuen, wenn vielleicht jemand einen Tip oder besser eine Lösung hätte. Schon mal vorab vielen Dank für jede Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 03. Jun. 2010 21:25 <-- editieren / zitieren --> Unities abgeben: Nur für Scoopa
Hi, diese Meldung sagt m.W. aus, dass das Objekt - also das Tabellenblatt - nicht gefunden wird. Ist in der Mappe immer nur 1 Tabellenblatt vorhanden, dann kannst du es mit Worksheets(1) ansprechen. Wird immer ein weiteres Tabellenblatt angelegt und ans Ende der Mappe positioniert, kannst du es mit Worksheets(Worksheets.Count) ansprechen.
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 04. Jun. 2010 09:34 <-- editieren / zitieren --> Unities abgeben: Nur für Scoopa
Hallo Scoopa, wie Beverly schon schreibt, nur noch zur Verdeutlichung: Gibt es in Deiner Mappe ein Register namens "Tabelle1"? Ich meine nicht die Sheets-Bezeichnung in VBA, sondern die tatsächliche Bezeichnung des Registers in Excel? Es besteht immer ein Risiko, wenn Du die Register über ihren Namen ansprichst - z. B. wenn das Register umbenannt werden soll, ist die ganze Programmiererei für die Katz'! Besser: Die echte Nummer verwenden (also z. B. Set sheet = Sheets(1)). ------------------ DIN1055.de | Lastannahmen für Anwender NEU: Foren zu DIN 1055 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 04. Jun. 2010 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für Scoopa
Hi Paulchen, so ultimativ kann man das nicht sagen, dass man das Tabellenblatt generell besser über seine Position ansprechen soll, denn in diesem Fall besteht wiederum das große Risiko, dass nach einem Tausch der Blattposition das falsche Blatt abgesprochen wird. Man muss also schon konkret unterscheiden, für welchen Zweck und in welcher Situation man die Blätter wie anspricht. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 04. Jun. 2010 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für Scoopa
Hallo an Alle, @Paulchen und Karin Ihr habt ja beide recht und es gibt einen Königsweg, die Verwendung des Codenemens. Näheres hier http://msdn.microsoft.com/de-de/library/aa214189(en-us,office.11).aspx Zum Problem von Scoopa Wie Karin schon ausgeführt, das Blatt wurde nicht gefunden, das heißt aber nicht unbedingt, das es nicht da ist. Vielmehr besagt diese Meldung es gibt keine Sheets in diesem Kontext (_Global). Es ist guter Stil sich nicht auf den Kontext zu verlassen, sonder Objecte möglicht vollständig zu referenzieren, und wenns denn seien soll, gibt es auch 'ActiveWorkbook', 'ActiveSheet' usw. Sinnvol wäre wohl Code: Set mySheet = ThisworkBook.Sheets("Tabelle1")
oder eben gleich Code: Set mySheet = Tabelle1
Noch ein Hinweis, ich würde eine Variable nicht 'Sheet' nennen, es gibt Excelobjecte mit diesem Namen.Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 04. Jun. 2010 13:46 <-- editieren / zitieren --> Unities abgeben: Nur für Scoopa
Hi Peter, Zitat: Original erstellt von Comos User: und es gibt einen Königsweg, die Verwendung des Codenemens.
Das ist vom Prinzip her so, als ob man "Tabelle1" als Name verwendet - hilft also nur, wenn man sich immer auf das selbe Tabellenblatt bezieht. Der Unterschied ist, dass es kein Problem gibt, wenn das Tabellenblatt umbenannt wird. Aus der Fragestellung ging allerdings nicht eindeutig hervor, ob es nun immer das selbe Tabellenblatt ist oder ob neue Tabellenblätter hinzukommen - da ist die Beschreibung nicht eindeutig und man kann vieles hinein- oder herausinterpretieren.
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|