Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Drehfeld in VBA ansprechen

Drehfeld in VBA ansprechen
23.10.2007 15:31:00
Wolli
Hallo liebes Forum, ich versuche gerade per Makro die LinkedCell diverser Drehfelder zuzuweisen. Versucht habe ich:

Dim Drehfeld As Shape
Drehfeld.LinkedCell = Drehfeld.TopLeftCell.Offset(0, -1).AddressLocal


, doch das ergab Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht.
Erfolgreich war ich dann mit


Dim Drehfeld As Shape
Drehfeld.Select
Selection.LinkedCell = Drehfeld.TopLeftCell.Offset(0, -1).AddressLocal


, aber das ist so hääääässlich! Wie geht's besser?
Vielen Dank sagt Wolli

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Drehfeld in VBA ansprechen
23.10.2007 16:10:18
K.Rola
Hallo,

Sub Dreh()
Dim Sp As Shape
Set Sp = ActiveSheet.Shapes("Spinner 1")
Sp.ControlFormat.LinkedCell = Sp.TopLeftCell.Address
End Sub


Gruß K.Rola

Merci
23.10.2007 16:49:00
Wolli
Hallo K.Rola, vielen Dank! Komisch, dass es dann mit select, aber ohne ControlFormat funktioniert. Wieder was gelernt. Herzlichen Gruß, Wolli

Anzeige
Objektbezogene Zuweisung der Eigenschaft
23.10.2007 18:45:07
NoNet
Hallo Wolli,
die "Krücke" über das SHAPE-Object halte ich immer für einen Notnagel. Es existiert doch auch das tatsächliche Objekt :
Sub Drehfeld()
    'Zuweisung der LinkedCell-Eigenschaft an ein Drehfeld aus der Steuerelement-Toolbox
    Dim objSp As MSForms.SpinButton
    Set objSp = ActiveSheet.OLEObjects("Spinner 1").Object
    objSp.LinkedCell = objSp.TopLeftCell.Address
End Sub

Gruß, NoNet

Anzeige
AW: Objektbezogene Zuweisung der Eigenschaft
23.10.2007 21:01:02
Hubert
Hi,
der Terminus Drehfeld deutet extrem darauf hin, dass es um ein Drehfeld aus
den Formular-Controls geht.
mfg Hubert

AW: Objektbezogene Zuweisung der Eigenschaft
23.10.2007 21:30:05
K.Rola
Hallo,
wenn es ein Control aus der Toolbox wäre, Code in das Parent-Sheet:

Sub til()
SpinButton1.LinkedCell = "A1"
End Sub


Gruß K.Rola

Anzeige
Drehfeld-LinkedCell : Lösung ohne Variable
23.10.2007 22:21:12
NoNet
Hallo Wolli,
Hubert und K.Rola haben mich überzeugt, dass es sich um ein Drehfeld aus der Formularsymbolleiste handelt.
Dieses kann man auch ohne Verwendung einer (Objekt-)Variablen anpassen :
Sub DrehfeldFormular()
    'Ändert die Zellverknüpfung des ersten Drehfeldes aus Fomular-Symbolleiste
    With ActiveSheet.Spinners(1)
        .LinkedCell = .TopLeftCell.Offset(, -1).Address
    End With
End Sub

Gruß, NoNet

Anzeige
AW: Drehfeld-LinkedCell : Lösung ohne Variable
23.10.2007 23:01:36
Hubert
Hi,
du scheinst das Nichtverwenden einer Objektvariablen als Vorteil zu werten.
Nun, dann hast du deren Vorteile offenbar noch nicht durchschaut.
mfg Hubert

Hallo Hubert : "Böse Unterstellung" ! _oT
24.10.2007 10:27:42
NoNet
_oT

AW: Drehfeld in VBA ansprechen
24.10.2007 09:42:14
Wolli
Ach Leute, nicht sticheln bitte! Danke Euch für die weiteren Anregungen. Meine Aufgabenstellung war, einen großen Haufen Drehfelder (die ich mitsamt ihren Zeilen runterkopiert habe) auf die passende LinkedCell einzustellen, dafür kam für mich nur for each ... next in Frage. For each was denn nun? Shape ist tatsächlich etwas zu allgemein, richtig wäre for each Drehfeld (natürlich aus der Formularsymbolleiste). Meine endgültige Lösung ist jetzt

Sub test()
Dim sp As Object
For Each sp In ActiveSheet.Spinners
sp.LinkedCell = sp.TopLeftCell.Offset(0, -1).AddressLocal
Next sp
End Sub


Dabei musste ich raten, bis ich sp AS OBJECT definiert hatte (es ist mir immer ein inneres Bedürfnis, den Variablentyp genau anzugeben).
Viele Grüße, Wolli

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Drehfeld in VBA optimal ansprechen


Schritt-für-Schritt-Anleitung

Um ein Drehfeld in Excel über VBA anzusprechen und die LinkedCell zuzuweisen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeineArbeitsmappe)“ und wähle „Einfügen“ > „Modul“.

  3. Kopiere den folgenden Code in das Modul:

    Sub Drehfeld()
       Dim sp As Shape
       For Each sp In ActiveSheet.Spinners
           sp.LinkedCell = sp.TopLeftCell.Offset(0, -1).AddressLocal
       Next sp
    End Sub
  4. Führe das Makro aus: Drücke F5, um das Makro zu starten und die LinkedCells der Drehfelder zu setzen.


Häufige Fehler und Lösungen

  • Laufzeitfehler '438': Dieser Fehler tritt auf, wenn du versuchst, eine Eigenschaft oder Methode zu verwenden, die nicht unterstützt wird. Stelle sicher, dass du die ControlFormat-Methode verwendest oder direkt auf das LinkedCell-Attribut zugreifst, wie im obigen Code.

  • Drehfeld nicht gefunden: Wenn das Drehfeld nicht erkannt wird, überprüfe, ob der Name des Drehfeldes korrekt ist und ob es sich tatsächlich um ein Formular-Objekt handelt.


Alternative Methoden

Eine Alternative zur Verwendung von Shape ist die direkte Ansprache des OLE-Objekts. Hier ein Beispiel:

Sub DrehfeldOLE()
    Dim objSp As MSForms.SpinButton
    Set objSp = ActiveSheet.OLEObjects("Spinner 1").Object
    objSp.LinkedCell = objSp.TopLeftCell.Address
End Sub

Diese Methode ist besonders nützlich, wenn du spezifische Eigenschaften von Formularsteuerelementen anpassen möchtest.


Praktische Beispiele

Um die LinkedCell für mehrere Drehfelder in einem Arbeitsblatt zu ändern, kannst du den folgenden Code verwenden:

Sub UpdateDrehfelder()
    Dim sp As Object
    For Each sp In ActiveSheet.Spinners
        sp.LinkedCell = sp.TopLeftCell.Offset(0, -1).Address
    Next sp
End Sub

Dieser Code durchläuft alle Spinners (Drehfelder) im aktiven Blatt und setzt die LinkedCells auf die Zellen, die sich links von jedem Drehfeld befinden.


Tipps für Profis

  • Verwendung von With: Um den Code lesbarer zu machen, kannst du die With-Anweisung verwenden:

    Sub UsingWith()
       With ActiveSheet.Spinners(1)
           .LinkedCell = .TopLeftCell.Offset(0, -1).Address
       End With
    End Sub
  • Variable Typen angeben: Es ist ratsam, den Typ der Variablen anzugeben, um potenzielle Fehler zu vermeiden und den Code effizienter zu gestalten.


FAQ: Häufige Fragen

1. Was ist ein Drehfeld in Excel?
Ein Drehfeld, auch als Spinner bezeichnet, ist ein Steuerelement in Excel, das es dem Benutzer ermöglicht, Werte durch Drehen eines Dials zu ändern.

2. Wie kann ich mehrere Drehfelder gleichzeitig aktualisieren?
Du kannst eine Schleife verwenden, um alle Drehfelder in einem Arbeitsblatt zu durchlaufen und ihre LinkedCells entsprechend zu setzen.

3. Warum funktioniert mein VBA-Code nicht?
Überprüfe deine Referenzen und stelle sicher, dass du die richtigen Objekt-Typen verwendest, um Laufzeitfehler zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige