Autor
|
Thema: Objektzuweisung Worksheet Image zickt und Schaltfläche (1599 mal gelesen)
|
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: 01. Mrz. 2007 09:03 <-- editieren / zitieren --> Unities abgeben:
Hallo VBA-ler, kann mir bitte jemand mal das hier erklären? Code: Private Sub optSatteldach_Click() Set wsStam = ThisWorkbook.Sheets("Stammdat") wsStam.Range("A3:B4").Select imgDachform.Picture = ThisWorkbook.Sheets("Stammdat").Image2.Picture End Sub
Die sub steht in einer UserForm. wsStam ist ein Worksheet mit Stammdaten, wird in einem Modul als Public und Worksheet deklariert. Zu diesem Zeitpunkt ist es noch nicht belegt, deshalb die 'Set'-Anweisung. Die 'Range(...)'-Zeile ist nur zu Testzwecken da, ob wsStam nun erkannt wird, sprich belegt ist. 'imgDachform...' zeigt ein Image, das in der Mappe liegt, in einer UserForm an.Sobald ich sowas mache: Code: imgDachform.Picture = wsStam.Image2.Picture
erscheint der nette Hinweis "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden", die erste Zeile der Sub wird markiert (gelb-debug) und '.Image2' blau hinterlegt.Banaler Anfängerfehler? Schlauch? Was mache ich falsch? [OTon] Und bevor ich anfange zu Editieren: Nun hakt's zur Abwechslung zwischendrin gleich mal bei 'Set...' (gleicher Aufruf). Jetzt habe ich 'Set...' und 'wsStam...' auskommentiert, ansonsten wie der erste Code, es klappt. Verwirrung - Hilfe! Es geht munter weiter: In VBA - "Datei wurde nicht gespeichert!" und "Systemfehler" (Aua!); jetzt muß Excel beendet werden. Na, Mahlzeit. OK, nach xls-Neustart ist wieder alles da. [OToff] Ach, und wo wir gerade schon dabei sind: Was zum Teufel passiert mit der Makrozuweisung einer Benutzer-Schaltfläche, wenn ich ihm ein einziges Mal gesagt habe: Datei-Speichern unter..., diese (neue) Datei dann lösche, die alte (über den Explorer) wieder aufrufe, und Microsuck will dann auf die Macros der -nicht vorhandenen!- 'Unter...'-gespeicherten Datei zugreifen??? Habe ihm schon zweimal wieder das Makro aus 'Dieser' Mappe zugewiesen. Drücke ich auf's Knöpfchen, kommt wieder die Meldung, daß die andere Datei Macros enthält! Weiß hierzu vielleicht auch jemand Rat? ------------------ Gruß, Frederik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas1964 Mitglied Programmierer
Beiträge: 35 Registriert: 14.11.2005
|
erstellt am: 01. Mrz. 2007 12:22 <-- editieren / zitieren --> Unities abgeben: Nur für Paulchen
Zu Deinem "Set"-Problem kann ich nicht sehr viel sagen, das müsste ich mir direkt ankucken, sprich das Excelfile haben. Zu Deinem "Speichern unter"-Problem: Excel merkt sich die Makro's und in welcher aktuellen Datei sie sind. Das gleiche "Phenomen" kann man beobachten wenn man ein 2tes Excelfile öffnet in dem ein Makro beim Start auf eine Tastenkombination gelegt wird, dieses aber beim Beenden die Belegung nicht wieder rückgängig macht. D.h. wird das 2te Excelfile beendet und man drückt auf die Tastenkombination, dann öffnet Excel das 2te Excelfile und führt anschließend das entsprechende Makro aus. Abhilfe dafür (und für Dein Problem) ist das komplette Schließen und wieder öffnen von Excel. Mit freundlichem Gruß, Andreas Killer, Arbeitsvorbereitung und NC-Programmierung KLÖCKNER HÄNSEL PROCESSING GmbH Lister Damm 19 D-30163 Hannover
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: 01. Mrz. 2007 12:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas1964, Mappe uppen möchte ich vermeiden - z.T. sensibel. Zitat: Abhilfe dafür (und für Dein Problem) ist das komplette Schließen und wieder öffnen von Excel.
OK, vermutlich habe ich das sogar schonmal gemacht, konnte aber keinen Regelmäßigkeit feststellen. Werde das gelegentlich mal ausprobieren und gesondert darauf achten. Momentan läuft's, d.h. ich will gerade mal nix ändern... Danke schön! ------------------ Gruß, Frederik 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: 03. Mrz. 2007 10:23 <-- editieren / zitieren --> Unities abgeben:
Zitat: und Zitat vom Zitat: Schließen und wieder öffnen von Excel.
Jetzt habe ich da nochmal bewußt drauf geachtet - und nix is! Schließen, Beenden, erneutes Öffnen... Xls 2k macht munter, was es will, bis ich ihm wenigstens 1x händisch die Makros in der gewünschten [meist: DIESER] Mappe zugewiesen habe. Echt nervig! ------------------ Gruß, Frederik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 03. Mrz. 2007 16:18 <-- editieren / zitieren --> Unities abgeben: Nur für Paulchen
Hallo Frederik, zu Set: deine Objektvariable ist ein Standardsheet, welches keine speziellen Objekte enthält. Auch durch die Set - Anweisung kann das nicht als Imageobjekt sondern als Shape (welches dann das Imageobjekt darstellt) hinzugefügt werden. Also müsstest du so auch das Picture - Objekt zugreifen: Code: imgDachform.Picture = wsStam.Shapes("Image1").OLEFormat.Object.Object.Picture
Würde ich aber nicht so machen, denn wenn du die Tabelle mal umbenennst, dann kannst du deine ganzen Prozeduren nach falschen Set – Anweisungen durchsuchen. Arbeite mit den Objekten selbst, dann ist der Name auf der Exceloberfläche völlig egal. Die Objektnamen der Tabelle sind die, welche im Projektexplorer vor der Klammer stehen und im Eigenschaftsfenster ganz oben. Das ist die sogenannte CodeName – Eigenschaft der Tabelle. Damit würde dann deine Zuweisung z.B. so aussehen: Code: imgDachform.Picture = Tabelle1.Image1.Picture
Eine andere Möglichkeit wäre, deine Objektvariable direkt als die Tabelle zu deklarieren, welche sie darstellen soll. Da musst du auch wieder mit dem Objektnamen der Tabelle arbeiten. Code: Public wsStam As Tabelle1
Damit würde dann deine ursprüngliche Idee wieder funktionieren. Code: Set wsStam = Tabelle1 imgDachform.Picture = wsStam.Image1.Picture
Alledings ist der Verweis an eine Objektvariable, welche dann nur einmal verwendet wird, keine sonderlich sinnvolle Programmierung. ------------------ Gruß Nepumuk 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: 05. Mrz. 2007 13:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Nepumuk, läuft leider nicht wie erhofft. Deine erste Zeile liefert mir einen Laufzeitfehler (Namen stimmen); die anderen Zeilen habe ich mir auch angesehen. Nun ja, ich muß gestehen, daß ich mein ursprüngliches Konzept inzwischen verworfen habe und nun die Variante von startrek verwende; auch mein Tabellenblatt mit den Stammdaten gibt es nicht mehr, habe das jetzt direkt über den Code gelöst. Zitat: Alledings ist der Verweis an eine Objektvariable, welche dann nur einmal verwendet wird, keine sonderlich sinnvolle Programmierung.
Na, das nenne ich mal höflich für "Sauklaue"! ;-) War ja nicht nur dafür gedacht - es lagen noch Bildchen und ein paar Zeilen Text in den "Stammdaten" drin, wurde also durchaus mehrfach angesprochen. Wie erwähnt: Ist eh alles anders. Ich bin Dir sehr dankbar für Deine geduldige Unterstützung und den Tip mit den CodeNames! ------------------ Gruß, Frederik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|