Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Warten auf Eingabe



Excel-Version: 8.0 (Office 97)

Betrifft: Warten auf Eingabe
von: Andreas
Geschrieben am: 28.08.2002 - 11:28:55


Hallo !

Ich habe folgendes Problem:

Ich möchte, dass nach dem Öffnen einer Mappe, in der ersten Tabelle ein Wert in Zelle A2 eingetragen wird, und dadurch automatisch ein Makro startet.

Die Überprüfung dieser Zelle, soll am besten im Workbook_Open Bereich stattfinden. Dummerweise ist das Workbook_Open Makro, dass diese Zelle überprüft, ja aber schon vor der Eingabe abgelaufen.
Wichtig: Ein Worksheet_Change Makro kommt aber aus mehreren Gründen, die ich jetzt hier nicht erklären möchte, nicht in Frage!

Und eine Schleife a la:
Do While Sheets("Tabelle1").Cells(2, 1) = ""
Loop
...

funktioniert ja auch nicht, da man während dieser "Endlosschleife" ja keine Eingaben machen kann.

Jetzt also 2 mögliche Ideen zur Lösung von mir:

1.) Kann man dem Makro sagen, dass es auf die Eingabe in A2 warten soll, und erst dann weiterläuft? So eine Art Wartefunktion auf Eingabe?
Hinweis: Eine Zeitverzögerung ist hier leider ein schlechter Weg, und ich möchte sie deshalb auch nicht einbauen.

2.) Falls 1. wirklich nicht machbar ist, ist es dann möglich eine Formel in eine andere Zelle einzutragen, die falls A2 gefüllt wird, dann das Workbook_Open Makro startet?
Wie würde die Formel dann aussehen?

Ich bitte um Hilfe und bedanke mich im Vorraus!


  

Re: Warten auf Eingabe
von: Charlie
Geschrieben am: 28.08.2002 - 11:38:42

Hallo Andreas,

Du kannst Excel im Kreis schicken, bis eine Eingabe gemacht wurde, wenn Du innerhalb der Schleife die Steuerung mit DoEvent an das Betriebssystem übergibst. Dann kann der User die Eingabe machen, während die Schleife läuft:

Private Sub Workbook_Open()
    While IsEmpty(Range("A1"))
        DoEvents
    Wend
    MsgBox "Jetzt wurde eingegeben.", vbInformation
End Sub

Viel Erfolg,
Charlie

  

Noch etwas anderes
von: Andreas
Geschrieben am: 28.08.2002 - 11:40:22


Übrigens:

Ich kann immer verhindern, dass die Workbook_Open-Befehle gestartet werden. Auch wenn es mit diesem Makro hier nicht möglich sein soll: "070999 Aufhebung der Workbook_Open-Befehle verhindern" -> https://www.herber.de/cgi-bin/callsmpl.pl?Datei=070999h.htm

Das funktioniert bei mir nicht. Wenn ich beim Start die Abfrage zur Aktivierung der Makros bekomme, brauche ich nur die Shift-Taste schon einfach vorher gedrückt zu halten, und erst dann auf "Makros aktivieren" kllicken. Dann startet nichts mehr automatisch.
Also wie soll das funktionieren?

  

Re: Noch etwas anderes
von: Charlie
Geschrieben am: 28.08.2002 - 11:56:16

Hallo Andreas,

dafür gibt es einen Trick, indem Du ein Blatt mit einem Hinweis darauf anlegst, dass die Mappe nur bei aktivierten Makros verwendbar ist.

Beim Schließen der Datei blendest Du dieses Blatt ein und alle anderen Blätter mit xlSheetVeryHidden aus. So sind sie auch im Menü "Format" - "Blatt" - "Einblenden" nicht sichtbar.

Beim Öffnen der Mappe blendest Du im Workbook_Open-Ereignisse alle ausgeblendeten Blätter ein und das Hinweisblatt mit xlSheetVeryHidden aus:

Private Sub Workbook_Open()
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Error" Then
            ws.Visible = True
        End If
    Next ws
    Worksheets("Error").Visible = xlSheetVeryHidden
    Application.ScreenUpdating = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    Worksheets("Error").Visible = True
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Error" Then
            ws.Visible = xlSheetVeryHidden
        End If
    Next ws
    Application.ScreenUpdating = True
End Sub

Viel Erfolg,
Charlie

  

Nich schlecht, aber ...
von: Andreas
Geschrieben am: 28.08.2002 - 12:12:02


Danke!

Das funktioniert zwar, aber die Eingabe ist seeehhhrr verzögert.
Da muss man schon auf der Tastatur rumhauen. Und bei der Eingabe überspringt er ein paar Buchstaben. Also so ist das ziemlich schlecht.

Kann man den Abfragetakt des Makros nicht verlangsamen oder so?


  

Danke für den Tipp
von: Andreas
Geschrieben am: 28.08.2002 - 12:18:30


Danke dir!

Das werde ich mal testen!


  

Re: Danke für den Tipp
von: Charlie
Geschrieben am: 28.08.2002 - 12:26:52

Hallo Andreas,

da die Datei IMMER gespeichert werden muss, damit beim nächsten Öffnen der Datei auch wirklich nur das "Error"-Blatt sichtbar ist, solltest Du das gleich im Workbook_BeforeClose-Ereignis machen. Sonst wird dem Anwender das "Error"-Blatt angezeigt und er bekommt - wenn ncoh nicht gespeichert wurde - die Abfrage nach dem Speichern. Verneint er diese Abfrage, hat aber zwischendurch schon einmal gespeichert, wären beim nächsten Öffnen der Datei die "falschen" Blätter sichtbar:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    Worksheets("Error").Visible = True
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Error" Then
            ws.Visible = xlSheetVeryHidden
        End If
    Next ws
    ThisWorkbook.Save
    Application.ScreenUpdating = True
End Sub

Viel Erfolg,
Charlie

  

Vielleicht doch die Formel ?
von: Andreas
Geschrieben am: 28.08.2002 - 12:45:12


Wie gesagt, raubt diese Aktion fast 100% der CPU-Leistung und die Eingaben sind ziemlich langsam und unvollständig übernommen.

Gibt es vielleicht doch die Möglichkeit per Formel ein Makro zu starten, wenn in A2 eine Eingabe gemacht wird???

Vielen Dank!


  

Vielleicht doch die Formel ?
von: Andreas
Geschrieben am: 28.08.2002 - 12:45:53


Wie gesagt, raubt diese Aktion fast 100% der CPU-Leistung und die Eingaben sind ziemlich langsam und unvollständig übernommen.

Gibt es vielleicht doch die Möglichkeit per Formel ein Makro zu starten, wenn in A2 eine Eingabe gemacht wird???

Vielen Dank!


  

Re: Vielleicht doch die Formel ?
von: Charlie
Geschrieben am: 28.08.2002 - 13:13:50

Hallo Andreas,

das kann ich nicht wirklich verstehen. Bei meinem Rechner (PIII, 600Mhz, 256MB-Ram) merke ich überhaupt nichts von der Schleife. Hier aber eine Alternativlösung mit OnEntry:

'Klassenmodul "DieseArbeitsmappe"
Private Sub Workbook_Open()
    Worksheets("Error").OnEntry = "Action"
End Sub

'Standardmodul:
Sub Action()
    If Not IsEmpty(Worksheets("Error").Range("A1")) Then
        MsgBox "Jetzt kann's losgehen!", vbInformation
        Worksheets("Error").OnEntry = ""
    End If
End Sub

Viel Erfolg,
Charlie

  

Re: Vielleicht doch die Formel ?
von: Charlie
Geschrieben am: 28.08.2002 - 23:59:50

Hallo Andreas,

ich hatte Dir auch dazu eine Alternativlösung gepostet, die ist aber - keine Ahnung warum - in einem völlig falschen Thread gelandet:
https://www.herber.de/forum/messages/153710.html

Viel Erfolg,
Charlie

 

Beiträge aus den Excel-Beispielen zum Thema "Warten auf Eingabe"