Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Commandbutton für eine best. Zeit deaktivieren

Forumthread: Commandbutton für eine best. Zeit deaktivieren

Commandbutton für eine best. Zeit deaktivieren
31.10.2007 10:38:00
Frank
Hallo.
Ich hoffe man kann mir hier ggfs. weiterhelfen. :-)
Ich habe in Excel 2003 ein Userform erstellt, welches beim Start der Arbeitsmappe für eine bestimmte Zeitspanne geöffnet bleibt und sich dann automatisch schliesst.
In diese Userform soll nun noch ein Button eingefügt werden, der durch anklicken die Userform schliesst. Allerdings soll der Button erst nach ca. 3-5 Sekunden anklickbar sein. Vorher soll er gesperrt bleiben.
Ist das überhaupt realisierbar den Button für eine bestimmte Zeitspanne zu deaktivieren?
Vielen Dank schon mal im Voraus für eure Mühe!
Gruß aus dem hohen Norden
Frank

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Application.OnTime ________oT
31.10.2007 10:47:17
Matthias

AW: Commandbutton für eine best. Zeit deaktivieren
31.10.2007 10:48:50
Andi
Hi,
dies ins Klassenmodul des UserForm:

Private Sub UserForm_Initialize()
CommandButton1.Enabled = False
Application.OnTime Now + TimeValue("00:00:05"), "Aktivieren"
End Sub


und dies in ein Standardmodul:
Sub Aktivieren()
UserForm1.CommandButton1.Enabled = True
End Sub


Schönen Gruß,
Andi

Anzeige
AW: Commandbutton für eine best. Zeit deaktivieren
31.10.2007 11:06:00
Frank
Vielen Dank!
Allerdings bekomme ich nun einen Laufzeitfehler angezeigt.....
Laufzeitfehler 13 - Typen unverträglich
Was nun?
Beim Starten der Arbeitsmapper ist unter "DieserArbeitsmappe" eingefügt: UserForm1.show und dieses wird mir beim debuggen gelb markiert.
Gruß
Frank

Anzeige
Beispielmappe
31.10.2007 11:22:00
Matthias
Hallo Frank
Eigentlich müsste es andersherum sein.
Der Fragende sollte seine Mappe hochladen und nicht ein potentieller Antworter eine Mappe nachbauen müssen!
Trotzdem, hier ist eine: https://www.herber.de/bbs/user/47293.xls
Userbild

Anzeige
AW: Beispielmappe
31.10.2007 11:51:00
Frank
hm..... irgendwie klappt das bei mir nicht....
Hier mal was in "DieserArbeitsmappe" bei mir steht:

Private Sub Workbook_Open()
UserForm1.Show
Sheets("Ausfüllblatt").Visible = xlVeryHidden
Application: Sheets("Planungsdatei").Activate
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Control Toolbox").Visible = False
Application.CommandBars("Visual Basic").Visible = False
Worksheets("Januar").EnableSelection = xlUnlockedCells
Worksheets("Februar").EnableSelection = xlUnlockedCells
Worksheets("März").EnableSelection = xlUnlockedCells
Worksheets("April").EnableSelection = xlUnlockedCells
Worksheets("Mai").EnableSelection = xlUnlockedCells
Worksheets("Juni").EnableSelection = xlUnlockedCells
Worksheets("Juli").EnableSelection = xlUnlockedCells
Worksheets("August").EnableSelection = xlUnlockedCells
Worksheets("September").EnableSelection = xlUnlockedCells
Worksheets("Oktober").EnableSelection = xlUnlockedCells
Worksheets("November").EnableSelection = xlUnlockedCells
Worksheets("Dezember").EnableSelection = xlUnlockedCells
Worksheets("Zielvereinbarungen").EnableSelection = xlUnlockedCells
Worksheets("Planungsdatei").EnableSelection = xlUnlockedCells
Worksheets("Ausfüllblatt").EnableSelection = xlUnlockedCells
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Enabled = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Control Toolbox").Visible = True
Application.CommandBars("Visual Basic").Visible = True
End Sub


folgendes steht bei mir bisher in "Userform1":


Private Sub UserForm_Activate()
Verzoegerung = Time + TimeSerial(0, 0, 20)
Application.OnTime Verzoegerung, "Ende"
End Sub



Private Sub UserForm_Click()
Application.OnTime Verzoegerung, "Ende", , False
Verzoegerung = Time + TimeSerial(0, 0, 20)
Application.OnTime Verzoegerung, "Ende"
Beep
End Sub



Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode  1 Then Cancel = 1
End Sub



Private Sub UserForm_Initialize()
CommandButton1.Enabled = False
Application.OnTime Now + TimeValue("00,00,05"), "Aktivieren"
End Sub



Private Sub CommandButton1_Click()
Me.Hide
End Sub


Hab es mit den Änderungen versucht aber es klappt irgendwie nicht. Wo könnte mein Fehler noch liegen?
Braucht ihr ggfs. noch mehr infos?
Danke und Gruß
Frank

Anzeige
AW: Beispielmappe
31.10.2007 11:54:00
Andi
Hi,
wie Matthias schon schrieb, am besten lädst Du mal Deine Mappe hoch, sonst müssen wir das Ding extra nachbauen...
Schönen Gruß,
Andi

AW: Beispielmappe
31.10.2007 12:00:44
Frank
würde ich gerne aber wird schlecht. ist eine Datei für die Arbeit und aus Datenschutzgründen kann/darf ich diese leider nicht uploaden... :-(
Ich gehe mal davon aus, das die eingefügten Codes von mir nicht aussreichen um mir ggfs. weiterzuhelfen, oder?
gruß Frank

Anzeige
AW: Beispielmappe
31.10.2007 12:05:37
Andi
Hi,
nachdem der Debugger ja schon bei der allerersten Code-Zeile (UserForm1.Show im WorkBook-Open), kann ich mir eigentlich nur vorstellen, dass es kein UserForm1 bei Dir gibt, bzw Du Dein UserForm anders genannt hast. Wenn's das nicht ist, komme zumindest ich ohne eine Beispielmappe nicht weiter.
Kannst Du nicht ne abgespeckte Version von der Mappe machen? Also die sensiblen Daten rauslöschen, bzw durch Dummywerte ersetzen, wenn's ohne nicht läuft?
Schönen Gruß,
Andi

Anzeige
AW: Beispielmappe
31.10.2007 13:03:56
Frank
so... hier nun mal eine abgespeckte Version.....

Die Datei https://www.herber.de/bbs/user/47298.xls wurde aus Datenschutzgründen gelöscht


hoffe das hilft weiter.....musste vieles rausnehmen.......Datei ist für ein Jahr (Januar bis Dezember)
Code für den Blattschutz ist "0".
Gruß Frank

Anzeige
AW: Beispielmappe
31.10.2007 13:24:30
Andi
Hi,
also den erwähnten Laufzeitfehler kann ich nicht reproduzieren.
Desweiteren wird in Deinem Code weder der CommandButton deaktivtert, noch wird die Akrtivieren-Sub aufgerufen. Dies habe ich eingefügt.
Im Klassenmodul des UserForm verwendest Du die Variable Verzoegerung in zwei Routinen (Activate und Click), allerdings wird ihr im zweiten kein Wert zugewiesen. Wenn Du den Wert verwenden willst, der im Activate-Ereignis zugewiesen wird, dann musst Du die Variable außerhalb der Routinen dimensionieren, so wie in meiner 8auskommentierten) Zeile.
Gewöhne Dir am besten ganz allgemein an, Variablen immer zu dimensionieren, setz am besten das entsprechnde Häkchen unter Extras, Optione, Editor im VB-Editor. Dies zwingt Dich dazu, sauber zu programmieren und Dir selbst drüber klar zu werden, welche Variablen Du wo und mit welchen Datentyp benötigst.
Hier geht's zur Datei:
https://www.herber.de/bbs/user/47299.xls
Schönen Gruß,
Andi

Anzeige
AW: Beispielmappe
31.10.2007 13:41:00
Frank
Super. Vielen Dank!!!!!!!!!
Ich werds nachher mal ausprobieren.
Leider finde ich "Gewöhne Dir am besten ganz allgemein an, Variablen immer zu dimensionieren, setz am besten das entsprechnde Häkchen unter Extras, Optione, Editor im VB-Editor." das nicht......hab Excel 2003.
Die ganzen Codes habe ich mir zu 95% von dieser Seite hier geholt, da ich mich mit VBA so gut wie gar nicht auskenne. Ein paar habe ich mir über den Makrorekorder zusammengestrickt... :-)
Ich finds aber super, das hier einem so schnell geholfen wird!!!!!!!
Zumindest weiß ich jetzt wo ich mich mal melden kann, wenn ich wieder mal Probleme mit Excel und VBA haben sollte... :-)
VIELEN DANK nochmal!!!!
Gruß Frank

Anzeige
gern geschehen
31.10.2007 13:51:00
Andi
Hi,
gern geschehen.
Leider finde ich "Gewöhne Dir am besten ganz allgemein an, Variablen immer zu dimensionieren, setz am besten das entsprechnde Häkchen unter Extras, Optione, Editor im VB-Editor." das nicht......hab Excel 2003.
Im VBA-Editor, unter Extras, Optionen im Reiter Editor das zweite Kästchen: Variablendeklaration erforderlich
Schönen Gruß,
Andi

Anzeige
AW: Commandbutton für eine best. Zeit deaktivieren
31.10.2007 11:51:00
Andi
Hi,
aber das muss ja vorher auch schon so gewesen sein, oder? Mit meinem Code kann das eigentlich nix zu tun haben...
Schönen Gruß,
Andi
;
Anzeige
Anzeige

Infobox / Tutorial

Commandbutton für eine best. Zeit deaktivieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel, indem Du ALT + F11 drückst.

  2. Füge ein UserForm hinzu:

    • Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer.
    • Wähle Einfügen > UserForm.
  3. Füge einen CommandButton hinzu:

    • Ziehe einen CommandButton aus der Toolbox auf das UserForm.
  4. Code für das Deaktivieren des Buttons:

    • Füge im Klassenmodul des UserForms den folgenden Code ein:
    Private Sub UserForm_Initialize()
       CommandButton1.Enabled = False
       Application.OnTime Now + TimeValue("00:00:05"), "Aktivieren"
    End Sub
  5. Code für die Aktivierung des Buttons:

    • Füge in ein Standardmodul den folgenden Code ein:
    Sub Aktivieren()
       UserForm1.CommandButton1.Enabled = True
    End Sub
  6. Rufe das UserForm beim Öffnen der Arbeitsmappe auf:

    • Füge in den Code "DieserArbeitsmappe" den folgenden Code ein:
    Private Sub Workbook_Open()
       UserForm1.Show
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler 13 - Typen unverträglich:

    • Dieser Fehler tritt häufig auf, wenn das UserForm nicht korrekt benannt ist. Überprüfe, ob Dein UserForm tatsächlich UserForm1 heißt.
  • Button bleibt deaktiviert:

    • Stelle sicher, dass der Code für Application.OnTime korrekt ist und die Zeitangabe im richtigen Format vorliegt.

Alternative Methoden

Wenn Du den CommandButton für eine bestimmte Zeitspanne deaktivieren möchtest, gibt es auch andere Ansätze:

  • Verwende eine Schleife: Anstatt Application.OnTime, kannst Du auch eine DoEvents-Schleife verwenden, um die Zeit zu überwachen und den Button nach einer gewissen Zeit zu aktivieren. Dies kann jedoch die Benutzeroberfläche blockieren.

Praktische Beispiele

Hier ist ein einfaches Beispiel, das Du in Deinem UserForm verwenden kannst:

Private Sub UserForm_Initialize()
   CommandButton1.Enabled = False
   Application.OnTime Now + TimeValue("00:00:05"), "Aktivieren"
End Sub

Sub Aktivieren()
   UserForm1.CommandButton1.Enabled = True
End Sub

In diesem Beispiel bleibt der CommandButton für 5 Sekunden deaktiviert, bevor er aktiviert wird.


Tipps für Profis

  • Verwende enableselection: Wenn Du die Auswahl in einem Arbeitsblatt steuern möchtest, kannst Du Worksheets("SheetName").EnableSelection = xlUnlockedCells nutzen, um nur bestimmte Zellen auswählbar zu machen.
  • Variablen deklarieren: Gewöhne Dir an, Variablen immer zu deklarieren. Das erhöht die Lesbarkeit und reduziert Fehler in Deinem VBA-Code.

FAQ: Häufige Fragen

1. Warum funktioniert mein Code nicht? Überprüfe, ob Du alle Module korrekt erstellt hast und ob die Namen der UserForms und Subroutinen übereinstimmen.

2. Wo finde ich die Option zur Variablendeklaration in Excel 2003? Gehe im VBA-Editor zu Extras, dann Optionen und aktiviere das Kästchen für Variablendeklaration erforderlich.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige