Autor
|
Thema: Schaltfläche Formulatsteuerelem. o. ActiveX - Text, -farbe u. Makro aus anderer Mappe (491 / mal gelesen)
|
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 17. Nov. 2023 14:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Gemeinde, die Vorgeschichte inklusive teilweiser Klärung der dortigen Fragen findet sich hier. In diesem Thread soll es nun "nur noch" - sozusagen als Rest aus dem oben verlinkten Thread - darum gehen, dass ich Schaltflächen in einer Excel-Mappe "Arbeitstabelle.xlsm" beim Öffnen dieser Mappe mit Beschriftung und Beschriftungsfarbe (und eventuell Namen des auszulösenden Makros) versehen will, die alle in einer anderen, immer vorher geöffneten Mappe "Datentabelle.xlsx" auf dem Tab "Listen" abgelegt sind. Aktuell verwende ich Schaltflächen (Formularsteuerelemente) direkt auf dem Tabellenblatt "Arbeitsliste" - also nicht in einem Userform. Alternativ könnte ich zwar auch Befehlsschaltflächen (ActiveX-Steuerelement) verwenden, aber dagegen sprechen aus meiner (momentanen) Sicht zwei Gründe (leicht abgewandeltes Zitat von hier): - die bisher verwendeten Schaltflächen sind nur geringfügig höher als die durchgehend 17 Pixel hohen Zellen mit 10 Pixel hohen Beschriftungstexten. Versuche ich nun eine gleich hohe ActiveX-Befehlsschaltfläche zu erstellen, sehe ich von deren Beschriftungstext gerade mal die oberste Pixelreihe. Und selbst wenn ich die Schriftgröße im Eigenschaftsfenster deutlich reduziere, bessert sich das nicht.
- Eines der Makros in der Arbeitstabelle.xlsm dient der Löschung der gesamten, bis dahin erzeugten Liste und der Rücksetzung aller Eingabewerte und Menüs auf den Startzustand der Datei. Da diese Liste auch Abbildungen enthält, lösche ich diese mittels: Code: Dim Ziel& 'Variablen als Long-Ganzzahlen -2.147.483.648 bis 2.147.483.647 definieren Ziel = ActiveSheet.Cells(4, 10) 'gespeicherte oder eingetragene aktuelle Einfüge-Zeile ActiveSheet.Range(ActiveSheet.Cells(19, 1), ActiveSheet.Cells(Ziel + 10, 8)).Delete Shift:=xlUp 'alle Zeilen der Tabelle löschen Sheets("Arbeitsliste").Pictures.Delete 'all die oben zusammengerutschten Bildchen löschen
Interessanter Weise wurden mir dabei zwei zum rum-Testen eingefügte ActiveX-Befehlsschaltflächen in Spalte M ebenfalls gelöscht ... als ob sie für Excel auch unter die Kategorie "Pictures" fallen würden. All die insgesamt 29 Formularsteuerelement-Schaltfächen auf diesem Tabellenblatt (24 in den Dreierblöcken plus 5 für Hilfsfunktionen) blieben dagegen unbeeinflusst. Zitat Ende. Für die bisher verwendeten Formularsteuerelemente habe ich bereits mit verschiedensten Netz-Funden im Makro "Sub Workbook_Open()" im VBA-Code-Fenster "DieseArbeitsmappe" von "Arbeitstabelle.xlsm" herumexperimentiert, leider ohne Erfolg:
Code: ' Netz-Ideen für die Beschriftung der einfügen-CommandButtons, die mit unterschiedlichen Fehlermeldungen nicht funktionieren' Suchstring: Excel VBA Schaltfläche (Formularsteuerelement) Beschriftung aus anderer Mappe ' CommandButton1235.Caption = Range("J8") ' CommandButton1235.Caption = Range("J8").Value
' Worksheets("Arbeitsliste").CommandButton1235.Caption = Workbooks("Datentabelle.xlsx").Worksheets("Listen").Range("A2").Value ' Worksheets("Arbeitsliste").OLEObjects("CommandButton1235").Object.Caption = Workbooks("Datentabelle.xlsx").Worksheets("Listen").Range("A2").Value ' Sheets("Arbeitsliste").Shapes("CommandButton1235").Text = Workbooks("Datentabelle.xlsx").Worksheets("Listen").Range("A2").Value ' das selbe für die Textfarbe ' Worksheets("Arbeitsliste").OLEObjects("CommandButton1235").Object.ForeColor = Workbooks("Datentabelle.xlsx").Worksheets("Listen").Range("B3") ' Worksheets("Arbeitsliste").OLEObjects("CommandButton1235").Object.ForeColor = Farbe01 ' der "Name" Farbe01 ist im Namensmanager als Zugriff auf diese ^^^ Zelle definiert ' Worksheets("Arbeitsliste").OLEObjects("CommandButton1235").Object.ForeColor = "Farbe01"
Um also die Formular-Schaltflächen in der korrekten Textfarbe beschriften zu können, benötige ich als Erstes eine einfache Möglichkeit, deren Bezeichnung zu ermitteln (es geht um insgesamt 24 Stück, für diese erste "CommandButton1235" habe ich ein Makro mit dem Makro-Rekorder aufgezeichnet) sowie die korrekte Makro-fähige Syntax für die Änderung von Text und Textfarbe mit Bezug auf Daten aus der anderen Mappe "Datentabelle.xlsx". Und es wäre natürlich gut, wenn man den Namen/die Bezeichnung der Schaltflächen sinnvoll ändern könnte ... "CommandButton1235" z.B. ist ja nun nicht wirklich aussagekräftig. Um die programmiertechnisch wohl einfacher handhabbaren ActiveX-Schaltflächen verwenden zu können, müsste ich wissen, wie deren Erscheinungsbild (leerer Rand um den Text usw.) sich an das der Formular-Schaltflächen anpassen lässt. Den Namen erführe man aus dem Eigenschaftsfenster und könnte ihn dort auch ändern. Bliebe auch hier noch die korrekte Makro-fähige Syntax zur Änderung von Beschriftungstext und Textfarbe. Und es sollte natürlich nicht passieren, dass diese Schaltflächen beim Zurücksetzen der Datei gelöscht werden Grüße für ein schönes Wochenende Gernot [Diese Nachricht wurde von ArCADe-Spieler am 17. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 21. Nov. 2023 14:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Gemeinde, durch das an diesen Post angehängte Bild fand in der anschließenden StartPage-Suche diese Microsoft-Seite und dort recht weit unten den Absatz "Tastenkombinationen" ... und tada: mit Alt+F10 kann man in Excel eine Auswahlliste aller Objekte auf dem aktuellen Tabellenblatt öffnen, sie mittels Klick auf den Namen identifizieren und den Namen auch ändern. ToDo-Liste: Schaltflächen-Beschriftung aus anderer Mappe Beschriftungsfarbe aus anderer Mappe (ausgelöstes Makro aus anderer Mappe) Grüße Gernot Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 24. Nov. 2023 12:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Gemeinde, zurerst habe ich im Auswahlfenster (Alt+F10) alle 24 "Kombinationsfeld (Formularsteuerelement)" von "Drop Down xyz" auf "Auswahl01" bis "Auswahl24" und alle 24 "Schaltfläche (Formularsteuerelement)" von "Button xyz+1" auf "Einfügen01" bis "Einfügen24" umbenannt. Dabei bin ich eher zufällig (aus gelangweilter Unaufmerksamkeit) darüber gestolpert, dass man - aus meiner Sicht ziemlich unnütz und eher verwirrend - den gleichen Namen (z.B. "Einfügen01") an mehrere, sogar unterschiedliche Elemente vergeben könnte. Also z.B. an Schaltflächen, Kombinationsfelder und Kommentare gleichermaßen. Dann habe ich für die Änderung der Beschriftung einer solcherart umbenannten Schaltfläche mit dem Makro-Rekorder ein Makro aufgezeichnet und aus diesem leider mehr per Versuch-und-Irrtum als durch gesichertes Wissen eine Lösung als Teil des Makros "Sub Workbook_Open()" im VBA-Code-Fenster "Diese Arbeitsmappe" der "Arbeitstabelle.xlsm" zusammengestoppelt: Code: Me.Worksheets("Arbeitsliste").Select ActiveSheet.Shapes.Range(Array("Einfügen01")).Select With Selection .Characters.Text = Workbooks("Datentabelle.xlsx").Worksheets("Listen").Range("A2") .Font.Color = Workbooks("Datentabelle.xlsx").Worksheets("Listen").Range("B3") End With ActiveSheet.Shapes... für die anderen 23 CommandButtons ...End With Range("J1").Select Me.Worksheets("Anleitung").Select ActiveSheet.Range("B1").Select
Okay, das macht jetzt so halbwegs das, was ich möchte. Aber so ganz zufrieden bin ich noch nicht. Zum Einen, weil ich die "Arbeitstabelle.xlsm" für die anderen Nutzer in der Startansicht immer auf dem Tabellenblatt "Anleitung" in der Zelle B1 (der Überschrift) abspeichere ... und ich mit der obigen Methode (zwar nur relativ kurz) in das Tabellenblatt "Arbeitsliste" wechseln muss. Es wäre mir lieber, wenn die Anpassung sowohl des Textes als auch der Textfarbe der Schaltflächen im Hintergrund realisiert würde. Und zum Anderen, weil ich irgendwo aufgeschnappt habe, die Programmierform mit Select aus dem Makro-Rekorder wäre stümperhaft und könne / solle möglichst vermieden werden. Aber z.B. das Weglassen von Code: Select ActiveSheet.
nach "Me.Worksheets("Arbeitsliste")." führt nur dazu, dass der Text in B1 auf "Anleitung" in "Arbeitstabelle.xlsm" mit dem entsprechend eingefärbten Text aus "Datentabelle.xlsx" überschrieben wird ... doof! ... und für mich (bis jetzt) nicht wirklich verständlich. Und natürlich wäre es mir lieber, für jede Schaltfläche nur eine Programmzeile zu brauchen Falls jemand Tipps dazu hat: nur her damit. Leider bin ich bei der Lektüre von "Michael Kofler & Ralf Nebelo Excel 2016 programmieren" erst auf Seite 117 im Kapitel 4.3 ... und das für obiges Problem notwendige Wissen wird vielleicht in Kapitel 5 oder 7 beschrieben Nichts desto trotz ein zumindest halbwegs befriedigender Start ins Wochenende. Grüße Gernot Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2718 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 24. Nov. 2023 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für ArCADe-Spieler
Hallo Gernot, Ich verwende hier ME eigentlich nie. Allgemeiner Code (auf Deine Anwendung):
Code:
Dim WB_Dat as Workbook Dim WS_Arb As Worksheet Dim WS_Anl As Worksheet Dim WS_List As Worksheet Set WB_Dat = Workbooks("Datentabelle.xlsx") Set WS_Arb = ActiveWorkbook.Sheets("Arbeitsliste") Set WS_Anl = ActiveWorkbook.Sheets("Anleitung") Set WS_List = WB_Dat.Sheets("Listen")
dann könntest Du weiterarbeiten mit z.B. Code:
With WS_Arb.Shapes.Range(Array("Einfügen01")) .Characters.Text = WS_List.Range("A2") .Font.Color = WS_List.Range("B3") End With
Und sparst Dir das ganze Select .. Grüße Klaus [Diese Nachricht wurde von KlaK am 24. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 28. Nov. 2023 10:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, ich hatte das Me. tatsächlich nur davorgesetzt, um sicherzustellen, dass die im Makro ausgelösten Veränderungen wirklich nur in der Datei passieren, in der das Makro steht. Hintergrund: ab und an habe ich ältere Versionen der beiden Dateien offen, die sich nur durch das jeweilige Datum als Versionskenner im Dateinamen unterscheiden, ansonsten jedoch z.B. auch schon die gleichen Tabellenblatt-Namen enthalten. Seit letztem Freitag habe ich mit der von Dir vorgeschlagenen Form rumprobiert - leider ohne Erfolg. Ich hatte (inzwischen schon längst wieder gelöscht/über-/umgeschrieben) am Ende des Workbook_Open()-Makros Deine DIM- und Set-Zeilen unmittelbar gefolgt vom With...End With-Block eingefügt, aber es funktionierte nicht. Es kam immer wieder die Fehlermeldung "Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht" - leider ohne gelbe Debuggen-Markierung und noch "leiderer" ohne anzuzeigen, um welches Objekt genau es geht. So wie ich Dein Konstrukt verstehe, würde es genau das machen, was mir vorschwebt: die Umbeschriftung und Umfärbung der Schaltflächen im Hintergrund. Also mache ich da wohl irgendetwas falsch? Kann man eigentlich in den VBA-Code-Fenstern mehrere Zeilen auf einmal auskommentieren, ohne hundert mal Pfeiltasten- oder Pos1-drücken? Und dann wieder "einkommentieren"? ... oder auf "inaktiv/aktiv" setzen, sodass sie bei der Ausführung des/r Makros ignoriert würden? Grüße Gernot [Diese Nachricht wurde von ArCADe-Spieler am 28. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2718 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 28. Nov. 2023 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für ArCADe-Spieler
Zitat: Original erstellt von ArCADe-Spieler: Kann man eigentlich in den VBA-Code-Fenstern mehrere Zeilen auf einmal auskommentieren, ohne hundert mal Pfeiltasten- oder Pos1-drücken? Und dann wieder "einkommentieren"? ... oder auf "inaktiv/aktiv" setzen, sodass sie bei der Ausführung des/r Makros ignoriert würden?
Kann man. Man lässt sich die Bearbeiten Werkzeugleiste anzeigen (rechte Maus oben und Häkchen bei bearbeiten setzen) Dann die Zeilen markieren und Icon "Block auskommentieren" tippen. Zum Rückgängig machen gibt es das Icon "Auskommentierung des Blocks aufheben" Wegen dem Laufzeitfehler: Manchmal ist es ganz sinnvoll sich entweder einen Haltepunkt zu setzen (oder ein Stop) und dann mit F8 die Zeilen einzeln abarbeiten zu lassen, damit weiß man dann in welcher Zeile der Fehler passiert. Was ich mir vorstellen könnte: Evtl. ist das Workbook noch nicht aktiv, somit käme es bei der Zeile mit = ActiveWorkbook.Sheets() zu einem Fehler, denn die Tabellen werden im alten Workbook ja nicht gefunden. Abhilfe entweder über ThisWorkbook. (habe ich noch nie benutzt) oder erzeugen einer WB_Aktiv mit dem Namen der aktuellen Mappe und dann Zuordnung WB_Aktiv.Sheets() Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 28. Nov. 2023 17:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, nach "ein Wenig" Herumprobieren und dem Umbenennen der jeweils ersten neun Objekte gemäß "Einfügen01" zu "Einfügen1" (Auffüll-Null für die Verwendung der Laufvariablen "Dreierblock" wieder entfernt), nun Folgendes: Code: Dim Dreierblock&Me.Worksheets("Arbeitsliste").Select For Dreierblock = 1 To 24 ActiveSheet.Cells(WorksheetFunction.RoundUp(Dreierblock / 4, 0) * 4 - 2, 11 + ((Dreierblock / 4) - Int(Dreierblock / 4) - 1 * ((Dreierblock / 4) - Int(Dreierblock / 4) = 0)) * 4 * 2).Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2) ActiveSheet.Shapes.Range(Array("Einfügen" & Dreierblock)).Select With Selection .Characters.Text = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(2, Dreierblock * 2 - 1) .Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2) ' .OnAction = "gewähltes_Element_einfügen" & Dreierblock & "()" End With Next Dreierblock Range("J1").Select Me.Worksheets("Anleitung").Select ActiveSheet.Range("B1").Select
funktioniert, wenn auch mit kurzem Wechsel auf den Tab "Arbeitsliste" (und doch wieder langer Schreibweise ohne die Set-Variablen). Beim nun auskommentierten ".OnAction =" wurde jedoch gemeckert. Versuche ich Deine Version mit versuchter Berücksichtigung der nicht wirklich verstandenen Erläuterung aus Deinem letzten Post und ohne zuerst auf den Tab "Arbeitsliste" zu springen, allerdings mit mehreren Halte-Punkten im VBA-Code:
Code: Dim Dreierblock&For Dreierblock = 1 To 24 ThisWorkbook.Worksheets("Arbeitsliste").Cells(WorksheetFunction.RoundUp(Dreierblock / 4, 0) * 4 - 2, 11 + ((Dreierblock / 4) - Int(Dreierblock / 4) - 1 * ((Dreierblock / 4) - Int(Dreierblock / 4) = 0)) * 4 * 2).Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2) With ThisWorkbook.Worksheets("Arbeitsliste").Shapes.Range(Array("Einfügen" & Dreierblock)) .Characters.Text = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(2, Dreierblock * 2 - 1) .Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2) ' .OnAction = "gewähltes_Element_einfügen" & Dreierblock & "()" End With Next Dreierblock Range("J1").Select Me.Worksheets("Anleitung").Select ActiveSheet.Range("B1").Select
kommt die Fehlermeldung "Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht" bereits beim ersten Durchlaufen der Dreierblock-For-Next-Schleife bei ".Characters.Text = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(2, Dreierblock * 2 - 1)". Kommentiere ich auch diese Zeile aus, kommt die Fehlermeldung in der nächsten Code-Zeile ".Font.ColorIndex ...". Die außerhalb des With-Blockes stehende Umfärbung des Textes der (Kopf)Zelle wurde noch korrekt umgesetzt. Irgendwelche Änderungsvorschläge? Ach so: 5 Units für den Hinweis auf den Bearbeiten-Werkzeugkasten sind unterwegs. Und das "Scheitern" beim .OnAction-Teil ist nicht wirklich schlimm, weil ich die Schaltflächen nun mit durchnummerierten Makros "gewähltes_Element_einfügen1()" bis "...24()" versehen habe und den Produkt-Typ (Profil, Rahmen, Komplett-Element oder Einzelteil) direkt auf den jeweiligen Tabs ablegen und wiederum in dem noch zusammenzustrickenden Makro "gewähltes_Element_einfügen(xWert As Integer)" auswerten werde, wobei xWert nach wie vor die Position des jeweiligen Datenblocks auf "Listen" ist. Grüße Gernot [Diese Nachricht wurde von ArCADe-Spieler am 28. Nov. 2023 editiert.] [Edit] die zu erwähnen vergessene Umbenennung der Schaltflächen und Kombinationsfelder für die Verwendung der For-Next-Schleife eingefügt [Diese Nachricht wurde von ArCADe-Spieler am 30. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 30. Nov. 2023 14:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Gemeinde, durch einen klugen Hinweis von Michael Ott, ändert sich die Anweisung zur Umfärbung des Textes der (Kopf)Zelle in der komplett funktionierenden Variante (mit Sprung auf "Arbeitsliste") hiervon: Code: ActiveSheet.Cells(WorksheetFunction.RoundUp(Dreierblock / 4, 0) * 4 - 2, 11 + ((Dreierblock / 4) - Int(Dreierblock / 4) - 1 * ((Dreierblock / 4) - Int(Dreierblock / 4) = 0)) * 4 * 2).Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2)
hierzu: Code: ActiveSheet.Cells(WorksheetFunction.RoundUp(Dreierblock / 4, 0) * 4 - 2, 11 + (((Dreierblock + 3) Mod 4) + 1) * 2).Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2)
Grüße Gernot Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2718 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 01. Dez. 2023 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für ArCADe-Spieler
Zitat: Original erstellt von ArCADe-Spieler: Versuche ich Deine Version mit versuchter Berücksichtigung der nicht wirklich verstandenen Erläuterung aus Deinem letzten Post und ohne zuerst auf den Tab "Arbeitsliste" zu springen, allerdings mit mehreren Halte-Punkten im VBA-Code:Code: Dim Dreierblock&For Dreierblock = 1 To 24 ThisWorkbook.Worksheets("Arbeitsliste").Cells(WorksheetFunction.RoundUp(Dreierblock / 4, 0) * 4 - 2, 11 + ((Dreierblock / 4) - Int(Dreierblock / 4) - 1 * ((Dreierblock / 4) - Int(Dreierblock / 4) = 0)) * 4 * 2).Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2) With ThisWorkbook.Worksheets("Arbeitsliste").Shapes.Range(Array("Einfügen" & Dreierblock)) .Characters.Text = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(2, Dreierblock * 2 - 1) .Font.ColorIndex = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(3, Dreierblock * 2) ' .OnAction = "gewähltes_Element_einfügen" & Dreierblock & "()" End With Next Dreierblock Range("J1").Select Me.Worksheets("Anleitung").Select ActiveSheet.Range("B1").Select
kommt die Fehlermeldung "Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht" bereits beim ersten Durchlaufen der Dreierblock-For-Next-Schleife bei ".Characters.Text = Workbooks("Datentabelle.xlsm").Worksheets("Listen").Cells(2, Dreierblock * 2 - 1)". Kommentiere ich auch diese Zeile aus, kommt die Fehlermeldung in der nächsten Code-Zeile ".Font.ColorIndex ...".
Verstehe ich nicht so ganz. Wenn es in der ersten Anweisung mit ThisWorkbook funktioniert sollte es im zweiten auf klappen. Hast Du einmal den Ausdruck "ThisWorkbook.Worksheets("Arbeitsliste").Shapes.Range(Array("Einfügen" & Dreierblock))" im Überwachungsfenster angesehen? Steht dort ein sinnvolles Objekt? Oder gibt es Probleme beim Zusammensetzen von "Einfügen" & Dreierblock? Leerzeichen vor der Zahl? Grüße Klaus
[Diese Nachricht wurde von KlaK am 01. Dez. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ArCADe-Spieler Mitglied Metallbautechniker
Beiträge: 309 Registriert: 05.12.2012 Win 10 64bit Office 365 aber Excel 2013
|
erstellt am: 04. Dez. 2023 13:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, zugegebener Maßen ich wusste ich bisher nicht darum und habe dieses Überwachungsfenster daher auch noch nie benutzt, und nachdem ich mir jetzt ergoogelt/erStartpaged habe, wie ich dort Variablen oder so etwas wie "ThisWorkbook.Worksheets("Arbeitsliste").Shapes.Range(Array("Einfügen" & Dreierblock))" für eine Überwachung einfüge, weiß ich mit der Unmenge an ausklappbaren Infos im Moment nicht wirklich zu entscheiden, wo ich erkennen könnte, ob dieser Makro-Teil etwas Sinnvolles ergibt oder eben nicht In der nicht ausgeklappten Zeile dieses Eintrags steht anfangs unter Wert gar nichts, und unter Typ "Variant/Object/ShapeRange" Komme ich mittels Haltepunkt auf der Zeile ".Characters.Text = ..." mit der Fehlermeldung "Laufzeitfehler '438 ..." zum Halt, steht unter Wert "<Außerhalb des Kontexts>", und unter Typ "Variant/Empty" Da jedoch in der mit Sprung auf den Tab "Arbeitliste" funktionierenden Variante der entsprechende Makro-Teil "ActiveSheet.Shapes.Range(Array("Einfügen" & Dreierblock)).Select" ohne Fehlermeldung für Dreierblock von 1 bis 24 funktioniert, denke ich eher, dass es am Unterschied zwischen dem Zugriff auf ein selektiertes/aktiviertes Objekt auf dem aktuell aktivierten Tabellenblatt und auf eines auf einem nicht aktivierten Tabellenblatt liegt. Wahrscheinlich gilt es da irgendwelche syntaktischen Feinheiten zu beachten. Grüße Gernot Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|