Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Schaltfläche Formulatsteuerelem. o. ActiveX - Text, -farbe u. Makro aus anderer Mappe

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
MDG Engineering Nutzt Xometry, Um Medizinische Geräte Zu Bauen Und Das Globale Wachstum Voranzutreiben, ein Anwenderbericht
Autor Thema:  Schaltfläche Formulatsteuerelem. o. ActiveX - Text, -farbe u. Makro aus anderer Mappe (591 / mal gelesen)
ArCADe-Spieler
Mitglied
Metallbautechniker


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 17. Nov. 2023 14:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 21. Nov. 2023 14:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 24. Nov. 2023 12:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2782
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 24. Nov. 2023 13:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ArCADe-Spieler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 28. Nov. 2023 10:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2782
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 28. Nov. 2023 14:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ArCADe-Spieler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 28. Nov. 2023 17:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.]

[Diese Nachricht wurde von ArCADe-Spieler am 07. Mai. 2024 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ArCADe-Spieler
Mitglied
Metallbautechniker


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 30. Nov. 2023 14:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2782
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 01. Dez. 2023 16:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ArCADe-Spieler 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ArCADe-Spieler an!   Senden Sie eine Private Message an ArCADe-Spieler  Schreiben Sie einen Gästebucheintrag für ArCADe-Spieler

Beiträge: 367
Registriert: 05.12.2012

Win 10 64bit
Office 365 aber Excel 2019

erstellt am: 04. Dez. 2023 13:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz