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

Forumthread: Button deaktivieren

Button deaktivieren
15.10.2013 20:37:38
Mike
Hallo an alle,
habe eine kleine Exccelvorlage kreiert. Diese wird mit einem Makro unterstützt.
Per Betätigen eines Buttons, wird eine Anfrage an eine DB gestellt. Dies ist etwas Zeitversetzt.
Vorgeschichte:
Daten werden aus einer DB per Script (PHP) gelesen und an EXCEL übergeben. Diese Daten bereite/ lege ich in ein Tabellenblatt. Funktioniert auch. Der Bereich ist definiert. Anfrage wird per Button angesetzt. WEnn aber der Benutzer zweimal auf den Button drückt, dann wird auch die Abfrage zweimal gestartet. Dabei verschieben sich Bezüge in den Zellen dauerhaft. Trotz das ich sie fix gesetzt habe. ($x$x) nun möchte ich einfach, dass nach einmaligem Druck auf den Button dieser grau oder inaktiv wird, bis die Abfrage generiert wurde. So schliesse ich ein verschieben meiner Bereich und Bezüge aus.
FRage am Rande wäre trotzdem noch, warum sich fixe Bezüge verändern?
Danke für Eure Bemühungen.
Gruß Mike

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Button deaktivieren
15.10.2013 21:00:57
Bastian
Hallo,
Mit CommandButton1.Enabled=False
kannst Du einen Button deaktivieren.
Schau mal in die Eigenschaften des Button.
Da kannst Du auch die Schriftfarbe ändern, und so den Button "ausgrauen".
Gruß, Bastian

AW: Button deaktivieren
15.10.2013 22:26:41
Matze
Hallo Mike,
entweder wie Bastian schreibt den Button für eine zweites drücken sperren.
Du kannst aber wenn deine Abfrage in einer eigenen Sub steht so über den Button steuern das es nur einmal aufgerufen wird.
Sub Abfrage()
'deine Code
End Sub
In der Tabelle wo der Commandbutton ist
Option Explicit
Public xyz  As Boolean
Private Sub CommandButton1_Click()
If xyz = False Then
Call Abfrage
xyz = True
End If
End Sub
Um dann wieder die Abfrage zu nutzen muss der Bolean Wert xyz wieder auf false gesetzt werden.
Gruß Matze

Anzeige
AW: Button deaktivieren
16.10.2013 00:15:01
Mike
Hallo Bastian und Matze,
erst einmal danke.
Wie kann ich nachträglich herausfinden, wie der Button genau heisst? Es handelt sich vielmehr um einen Button für ein Formular. Ist also quasi auf einem Tabellenblatt gebettet.
zweite Frage an Matze:
für das xyz Public, muss da ein bestimmter Wert aus meinem jetzigen Code rein oder ist es eine neue "Variable", die man für die Routine benötigt?
Wie sollte der Befehl für die False-Anweisung für das Bolean aussehen und wo sollte diese stehen? Ich denke natürlich am Ende meiner Routine, oder?^^ Als Abschluss meines Makros wird eine bestimmte Zelle als Auswahl "angefahren". Demzufolge würde ich davor die Anweisung setzen.
Danke im Voraus
Mike

Anzeige
AW: Button deaktivieren
16.10.2013 08:32:08
Bastian
Hallo Mike,
wenn Du im Entwurfsmodus auf den Button (ActiveX) klickst, steht der Name im Namensfenster von Excel.
Gruß, Bastian

AW: Button deaktivieren
16.10.2013 16:26:48
Matze
Hallo,
im VBA Editor siehst du im Eigenschaftenfenster alles was den Button betrifft.
Public xyz As BOOLEAN : (klick im VBA Editor auf Boolean und dann auf F1)
Variablen vom Datentyp Boolean werden als 16-Bit-Zahlen (2 Bytes) gespeichert, die nur die Werte True oder False annehmen können. Variablen vom Datentyp Boolean werden als Wahr oder Falsch ausgegeben, wenn Print verwendet wird, bzw. als #TRUE# oder #FALSE#, wenn Write # verwendet wird. Mit den Schlüsselwörtern True und False weisen Sie einer Variablen vom Typ Boolean einen von zwei Zuständen zu.
Beim Umwandeln anderer numerischer Datentypen in Werte des Typs Boolean wird 0 zu False, und alle anderen Werte werden zu True. Beim Umwandeln von Werten des Datentyps Boolean in andere Datentypen wird False zu 0 und True zu -1.
Du kannst auch mit einem Wert aus einer Zelle die Überprüfung machen:
Private Sub CommandButton2_Click()
If ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1).Value = 0 Then '
Call Abfrage2
ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1).Value = 1 'irgendwas anderes wie 0
End If
End Sub
Änderst du nun die Zelle A1 wieder auf 0 so wird die Abfrage wieder gestartet.
Matze

Anzeige
AW: Button deaktivieren
16.10.2013 20:14:17
Mike
Hallo Matze,
vielen Dank für Deine Geduld und Deine Mühe.^^
Aber bei mir stehen zu viele Bäume, so dass ich den Wald nicht sehen kann.
Die Schaltfläche, um welche es sich handelt ist die Schaltfläche 18. (lt. Excel) Diese müsste ich demnach im VBA mit CommandButton18_Click() ansprechen?
Habe mal das Ganze eingfügt, allerdings ohne dem Zusatz PRIVATE. (Bitte um Erläuterung.Danke.)

Sub CommandButton18_Click()
If ThisWorkbook.Worksheets("Start").Cells(2, 1).Value = 0 Then '
Call Daten_holen
ThisWorkbook.Worksheets("Start").Cells(2, 1).Value = 1 'irgendwas anderes wie 0
End If
End Sub
Sub Daten_holen()
Sheets("Ablage").Visible = xlSheetVisible
Sheets("Ablage").Select
Cells.Select
Selection.ClearContents
Range("B1").Select
Sheets("Config").Select
ActiveSheet.Unprotect Password:="123"
'link = Range("H30").Value
ActiveSheet.Protect Password:="123"
Sheets("Ablage").Select
Range("B31").Value = link
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;" & link, Destination:=Range("B" & 1 + i * 40))
Der Button bekam demnach von mir die neue Makrozuweisung CommanButton18_Click().
Der Durchlauf funktioniert m.M. nach. Habe aber keine Möglichkeit der DB-Anbindung, da ich hier am heimischen PC sitze und die DB-Anfrage auskommentiert habe. Kann also nicht sehen, ob in der Zeit der Anfrage der Button inaktiv bleibt.^^
Zweite Frage, wie setze ich am Ende der Routine die Anweisung, die Zelle wieder auf 0 zu setzen?
Und dritte Frage nochmal am Rande: Warum verschiebte sich der Bereich in meinen Formeln trotz der fixen Adressierung bei jeder erneuten Anfrage, ohne das die erte zum Ende kam? Müsste doch theoretisch die zweite auf die erste überlagert werden, oder?
Vielen Dank im Voraus.
Mike
VBA-Anfänger!

Anzeige
Bitte VBA Profi drüberschauen, danke
17.10.2013 16:33:42
Matze
Hallo Mike.
ich kenne mich mit dieser Art Abfrageerstellung nicht aus.
Deine Codezeilen sind für mich sehr verwirrend.
Was den Buttoncode betrifft, der befindet sich später in dem Tabellenblatt wo auch der Button ist.
wenn der Button 18 heisst , dann ist deine Vermutung korrekt!
um die angegeben Zelle wieder auf den Wert 0 zu bekommen, kannst du mit Ereignissen lösen wenn zb das Blatt "active" wird .
Code in die Tabelle Start
Private Sub Worksheet_Activate()
Worksheets("Start").Cells(2, 1).Value = 0
End Sub
oder beim öffnen der Arbeitsmappe einfach die Zelle direkt beschreiben
Code in diese Arbeitsmappe:
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Start").").Cells(2, 1).Value = 0
End Sub
Matze
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Button in Excel deaktivieren


Schritt-für-Schritt-Anleitung

Um einen Button in Excel zu deaktivieren, kannst Du folgende Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Finde Deinen Button:

    • Gehe zu dem Arbeitsblatt, auf dem sich der Button befindet. Klicke mit der rechten Maustaste auf den Button und wähle „Makro zuweisen“ aus. Notiere Dir den Namen des Buttons.
  3. Button deaktivieren:

    • Füge in das Click-Ereignis des Buttons den folgenden Code ein, um ihn nach dem ersten Klick zu deaktivieren:
    Private Sub CommandButton1_Click()
       CommandButton1.Enabled = False
       ' Führe hier Deine Abfrage aus
       Call Abfrage
       CommandButton1.Enabled = True ' Button wieder aktivieren, wenn die Abfrage abgeschlossen ist
    End Sub

    Dieser Code sorgt dafür, dass der Button nach dem ersten Klick grau und inaktiv wird, bis die Abfrage abgeschlossen ist.


Häufige Fehler und Lösungen

  • Problem: Der Button wird nicht deaktiviert:

    • Stelle sicher, dass der Name des Buttons korrekt im Code angegeben ist. Überprüfe auch, ob Du den richtigen Button-Typ verwendest (ActiveX oder Formularsteuerung).
  • Problem: Bezüge verschieben sich trotz fixer Adressierung:

    • Dies kann passieren, wenn der Button wiederholt gedrückt wird, bevor die Abfrage abgeschlossen ist. Die Verwendung des Enabled-Eigenschaft hilft, dies zu vermeiden.

Alternative Methoden

Eine andere Möglichkeit, den Button zu deaktivieren, besteht darin, eine Boolean-Variable zu verwenden, um den Status des Buttons zu verfolgen. Hier ein Beispiel:

Option Explicit
Public xyz As Boolean

Private Sub CommandButton1_Click()
    If xyz = False Then
        xyz = True
        Call Abfrage
        xyz = False
    End If
End Sub

Hierbei wird der Button nur einmal aktiviert, solange xyz auf False steht.


Praktische Beispiele

Wenn Du eine Abfrage hast, die Daten aus einer Datenbank abruft, kannst Du den folgenden Beispielcode verwenden:

Sub Daten_holen()
    CommandButton1.Enabled = False
    ' Hier wird die Datenbankabfrage durchgeführt
    ' ...
    CommandButton1.Enabled = True ' Button wieder aktivieren
End Sub

Mit diesem Code wird der Button während der Abfrage deaktiviert, um Mehrfachklicks zu verhindern.


Tipps für Profis

  • Verwende Ereignisse: Du kannst den Wert der Zelle, die den Status des Buttons steuert, beim Aktivieren des Arbeitsblatts oder beim Öffnen der Arbeitsmappe zurücksetzen. Dies bietet eine zusätzliche Kontrolle über den Buttonstatus.

  • Debugging: Nutze die Debugging-Tools im VBA-Editor, um sicherzustellen, dass der Code wie gewünscht funktioniert. Dies hilft, Probleme frühzeitig zu erkennen.


FAQ: Häufige Fragen

1. Wie finde ich den Namen eines ActiveX-Buttons?
Du kannst den Namen im Namensfeld von Excel im Entwurfsmodus finden. Klicke einfach auf den Button, und der Name wird angezeigt.

2. Wo setze ich die Anweisung, den Button wieder zu aktivieren?
Platziere die Anweisung zur Aktivierung des Buttons am Ende Deiner Routine, nachdem die Abfrage abgeschlossen ist.

3. Warum verschieben sich die Bezüge in meinen Formeln?
Das kann passieren, wenn der Button mehrfach gedrückt wird, bevor die Abfrage abgeschlossen ist. Achte darauf, dass der Button während der Abfrage deaktiviert ist, um dies zu verhindern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige