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

Forumthread: abbrechen bei Inputbox

abbrechen bei Inputbox
05.09.2008 14:43:00
Lars
Hallo zusammen,
ich habe bei Inputboxen folgendes Problem:
Beim anklicken der checkbox "Eingabe" erscheint ein Input Fenster. Wenn in dem Fenster keine Eingabe erfolgt und auf ok geklickt wird, soll das Fenster erneut aufgehen. Das klappt gut mit folgendem Code:

Private Sub Eingabe_click()
Frage = "bla bla"
Titel = "bla bla"
Eingabebox(Frage, Titel, var)
Range("C38") = "Eingabe: " & var
End Sub



Private Sub Eingabebox(Frage, Titel, var)
100 var = InputBox(Frage, Titel)
If var = "" Then
GoTo 100
Else
End If
End Sub


Wie kann ich jetzt erreichen, dass beim Klick auf Abbrechen die checkbox wieder auf Value=False gesetzt wird und in diesem Beispiel der text im Feld "C38" wieder gelöscht wird?
Danke für die Hilfe
Lars

Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: abbrechen bei Inputbox
05.09.2008 14:59:15
Uduuh
Hallo,
um den Klick auf Abbrechen auszuwerten, musst du Application.Inputbox verwenden.

Sub tt()
Dim test
test = fncGetVar
If test = False Then
MsgBox "Abbruch"
Else
MsgBox test
End If
End Sub



Function fncGetVar()
Dim var
Do
var = Application.InputBox("test")
Loop Until var  ""
fncGetVar = var
End Function


Gruß aus’m Pott
Udo

Anzeige
AW: Abbrechen bei Inputbox
05.09.2008 17:56:00
Nepumuk
Hallo Udo,

um den Klick auf Abbrechen auszuwerten, musst du Application.Inputbox verwenden.


Ach ja?

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub Beispiel1()
    Dim vntInput As Variant
    Do
        vntInput = InputBox("Bitte etwas eingeben.", "Eingabe")
        If StrPtr(vntInput) = 0 Then
            MsgBox "Abbrechen geklickt"
            Exit Sub
        Else
            If Trim$(vntInput) = "" Then
                MsgBox "Nix eingegeben"
            Else
                MsgBox CStr(vntInput) & " eingegeben"
                Exit Do
            End If
        End If
    Loop
End Sub

Gruß
Nepumuk
Anzeige
OT Nepumuk
05.09.2008 19:46:00
K.Rola
Hallo Meister,
kennst du eine Möglichkeit, eine Audiodatei(WAV oder idealer Weise MP3) in eine
VB-Form zu integrieren/einzubetten?(VB 6)
Gruß K.Rola
AW: OT Nepumuk
06.09.2008 09:05:00
Nepumuk
Liebste K.Rola,
MP3-Dateien kannst du nicht direkt abspielen, sondern musst sie extrahieren und auf der Festplatte speichern um sie abzuspielen. WAV-Dateien besser geeignet, die lassen sich direkt aus der Ressource abspielen, ohne sie erst extrahieren zu müssen.
Gruß
Nepumuk
Anzeige
AW: OT Nepumuk
06.09.2008 13:13:00
K.Rola
Hallo Meister,
es geht nicht ums Abspielen, sondern darum, die WAV oder MP3 in die Exe einzubinden, ähnlich
wie Bilder in einer Imagelist, sodass ich bei der Weitergabe nur die Exe habe.
Gruß K.Rola
AW: OT Nepumuk
06.09.2008 15:03:00
Nepumuk
Liebste K.Rola,
1. Den Ressourcen-Editor starten. In der Menüleiste unter Add-Ins den Add-In-Manager aufrufen und mit einem Doppelklick den Ressourcen-Editor aktivieren (oder bei Ladeverhalten die beiden oberen Häkchen setzen).
2. In der Menüleiste unter Exras kannst du den Ressourcen-Editor starten.
3. Eine "benutzerdefinieret Ressource" hinzufügen. Einfach auf das Icon links vom Fragezeichen klicken. Den Rest mit Explorer und Doppelklick muss ich ja wohl nicht erklären.
4. Die Datei wird unter der Rubric "CUSTOM" mit der fortlaufenden Nummer 101 abgelegt.
5. Ressourcendatei über das Diskettensymbol speicheren.
Die Ressource wird in einer eigenen Ressourcendatei (.RES) gespeichert und beim kompilieren in die .EXE eingebunden. Das ist dann eine Binärdatei, welche du per Put in eine Textdatei schreibe kannst um sie aus der EXE zu extrahieren.
Beispiel:
Private Sub Command1_Click()
    Dim bytResData() As Byte
    Dim intFile As Integer
    bytResData = LoadResData(101, "Custom")
    intFile = FreeFile
    Open App.Path & "\the show must go on.mp3" For Binary Access Write As intFile
    Put intFile, , bytResData
    Close intFile
End Sub

Aber wie schon geschrieben, wenn du sie auch abspielen willst, geht das mit einer WAV-Datei viel einfacher.
Beispiel:
Option Explicit

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" ( _
    lpszSoundName As Any, _
    ByVal uFlags As Long) As Long

Private Const SND_ASYNC = &H1
Private Const SND_MEMORY = &H4
Private Const SND_NODEFAULT = &H2

Private bytResData() As Byte

Private Sub Command1_Click()
    bytResData = LoadResData(101, "CUSTOM")
    sndPlaySound bytResData(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
End Sub

Ganz liebe Grüße
Nepumuk
Anzeige
AW: OT Nepumuk
06.09.2008 16:09:10
K.Rola
Hallo Meister,
du beweist immer wieder, dass du den Titel Meister zu Recht trägst.
Klappt hervorragend, 1000 Dank und optimales Wochenende.
Gruß K.Rola
AW: OT Nepumuk
06.09.2008 09:55:00
Tino
Hallo,
habe auch mal mit mp3 in VB6 was gemacht.
Hier der Code (aus VB6),
in Excel muss aus "App.Path", ThisWorkbook.Path oder ActiveWorkbook.Path warden.
Option Explicit
Private Declare Function mciSendString Lib "winmm.dll" _
  Alias "mciSendStringA" (ByVal lpszCommand As String, _
  ByVal lpszReturnString As String, _
  ByVal cchReturnLength As Long, _
  ByVal hwndCallback As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32" _
  Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
  ByVal lpszShortPath As String, _
  ByVal cchBuffer As Long) As Long

Dim strPfadMusik As String

Public Function MP3_Play(ByVal sFile As String, ByVal sAlias As String) As Boolean
Dim bResult As Boolean
Dim sBuffer As String
Dim lResult As Long

sBuffer = Space$(255)
lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))

  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    lResult = mciSendString("open " & sFile & " type MPEGVideo alias " & sAlias, 0, 0, 0)
    If lResult = 0 Then
      If mciSendString("play " & sAlias & " from 0", 0, 0, 0) = 0 Then
        bResult = True
      End If
    End If
  End If

MP3_Play = bResult
End Function

Sub MP3_Stop(ByVal sAlias As String)
  mciSendString "stop " & sAlias, 0, 0, 0
  mciSendString "close " & sAlias, 0, 0, 0
End Sub

Sub Mach_Musik(strDatei As String)
 MP3_Play strDatei, "MyAlias"
End Sub

Private Sub Form_Load()
strPfadMusik = IIf(Right$(App.Path, 1) = "\", App.Path, App.Path & "\")
End Sub

Private Sub Command1_Click() 'start Musik 
Mach_Musik (strPfadMusik & "01 Ronan Keating - If Tomorrow Never Comes.mp3")
End Sub

Private Sub Command2_Click() 'stop Musik 
MP3_Stop "MyAlias"
End Sub


Mit dem Verpackungsassistent von VB6,
kannst du ja die MP3 mit in den Ordner Installieren lassen.
Gruß Tino

www.VBA-Excel.de


Anzeige
AW: OT Nepumuk
06.09.2008 13:16:42
K.Rola
Hallo,
siehe meine letzte Antwort an Nepumuk.
Gruß K.Rola
AW: OT Nepumuk
06.09.2008 13:59:09
Tino
Hallo K.Rola,
verstehe was Du meinst,
aber Du kannst doch über den Assistenten die Datei mitnehmen und ins Verzeichnis installieren lassen, zudem würde die eigentliche Exe um die MP3- Größe anschwellen.
Gruß Tino
Anzeige
AW: OT Nepumuk
06.09.2008 15:04:37
K.Rola
Hallo,
schon klar, das will ja gerade vermeiden, die Größe der Exe ist da zweitrangig, wichtig ist
nur, dass es eine Datei, die Exe ist, die weitergereicht wird.
Ich kann ja die Töne auch zur Laufzeit erzeugen, ist mir nur zu aufwändig.
Gruß K.Rola
AW: Abbrechen bei Inputbox, Ok, OK...
05.09.2008 19:58:00
Uduuh
Hallo Max,
...ich gebe mich geschlagen.
Was hast du denn da wieder ausgegraben? In der Hilfe kann ich nichts zu StrPtr finden.
Gruß aus’m Pott
Udo

Anzeige
AW: Abbrechen bei Inputbox, Ok, OK...
05.09.2008 21:13:00
Uduuh
Hallo Gerd,
danke für den Link.
Ich glaube, ich bleibe lieber doch bei Application.Inputbox, anstatt undokumentierte Funktionen zu benutzen.
Gruß aus’m Pott
Udo

Anzeige
AW: Abbrechen bei Inputbox, Ok, OK...
06.09.2008 09:10:13
Nepumuk
Hi,
wieso undokumentiert?
Userbild
Du musst nur die Funktion "Verborgene Elemente anzeigen" aktivieren.
Gruß
Nepumuk
AW: Abbrechen bei Inputbox, Ok, OK...
06.09.2008 10:04:56
Ramses
Hallo Max
Wohl insofern undokumentiert, dass diese Funktion einen String (gemäss Objectkatalog) erwartet.
Dass "Abbrechen" aber eine nichtinitialisierte Zeichenfolge erstellt, finde ich, zumindest in der Hilfe, nicht :-)
Gruss Rainer
Anzeige
AW: Abbrechen bei Inputbox, Ok, OK...
06.09.2008 10:37:00
Nepumuk
Hallo Rainer,
aus der Hilfe:

Klickt der Benutzer auf Abbrechen, gibt die Funktion eine Null-Zeichenfolge ("") zurück.


Und das ein nichtinitialisierter String keine Speicheradresse hat, ist doch klar.
Aus der MSDN-Library:


StrPtr returns a pointer to the real Unicode string value.


Gruß
Max

Anzeige
AW: Abbrechen bei Inputbox, Ok, OK...
06.09.2008 10:58:59
Ramses
Hallo Max
Aus welcher Hilfe hast du das ?
*********************
Aus EXP Deutsch
Hinweise
InputBox eignet sich zur Anzeige eines einfachen Dialogfeldes, sodass Informationen eingegeben werden können, die in einem Makro verwendet werden. Ein solches Dialogfeld besitzt je eine Schaltfläche für OK und Abbrechen. Wird auf OK geklickt, gibt InputBox den Wert in das Dialogfeld eingegebenen Wert zurück. Wird auf Abbrechen geklickt, gibt InputBox den Wert "False" zurück.
********************
********************
Aus E2003 Englisch
Remarks
Use InputBox to display a simple dialog box so that you can enter information to be used in a macro. The dialog box has an OK button and a Cancel button. If you choose the OK button, InputBox returns the value entered in the dialog box. If you click the Cancel button, InputBox returns False.
********************
"...Und das ein nichtinitialisierter String keine Speicheradresse hat, ist doch klar...."
Muss man aber auch erst mal wissen Grosser Meister :-)
Gruss Rainer
Anzeige
AW: Abbrechen bei Inputbox, Ok, OK...
06.09.2008 11:40:00
Nepumuk
Hallo Rainer,
da musst du schon bei der InputBox-Funktion nachschauen. Nicht bei der InputBox-Methode.
Gruß
Max
AW: Abbrechen bei Inputbox, Ok, OK...
06.09.2008 12:00:19
Ramses
Hallo Max
Das ist aber nun schon kurios,... oder ?
DIESE Funktion kann ich ja NICHT verwenden, wenn ich z.B. explicit einen bestimmten Rückgabewert (Type:=2 entspricht Texteingabe) erwarte.
Warum da der Hinweis auf den Rückgabewert in diesem Fall (False anstelle von Null-String) dann unterschiedlich ist, erschliesst sich wohl nur den MS-Entwicklern :-)
Gruss Rainer
Anzeige
AW: Abbrechen bei Inputbox, Ok, OK...
05.09.2008 23:02:00
Ramses
Hallo
Das ist nicht neu,... aber absolut undokumentiert :-)
Hier die Erklärung:
Zur eindeutigen Beantwortung der Frage "Leere Eingabe oder "auf Abbrechen geklickt?" kann die undokumentierte VBA-Funktion sowie ein spezielles Verhalten von "InputBox()" nutzen: Die Funktion
StrPtr()
liefert zunächst einen Pointer (Datentyp "Long Integer") auf eine Zeichenkette, der normalerweise für die Verwendung mit API-Funktionen genutzt wird. Ist die angegebene Zeichenkette nicht initialisiert, liefert "StrPtr()" das Ergebnis "0". "InputBox()" liefert bei einem Klick auf Abbrechen nicht wirklich eine leere Zeichenkette "", sondern eine nicht initialisierte Zeichenkette als Ergebnis. Daraus resultierend kann man also eine "InputBox()"-Rückmeldung wie folgt abfragen und eindeutig feststellen, ob eine leere, mit Ok bestätigte Eingabe vorliegt oder ob auf Abbrechen geklickt wurde.
Gruss Rainer
Anzeige
Man sollte alle Beiträge lesen :-)
05.09.2008 23:04:10
Ramses
Hallo Udo
Sorry,... Erklärung scheinbar doppelt gemoppelt.
Gruss Rainer
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

InputBox abfangen und abbrechen in VBA


Schritt-für-Schritt-Anleitung

Um die Funktionalität einer InputBox in Excel VBA zu erweitern und mit der Eingabe zu arbeiten, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Private Sub Eingabe_click()
    Dim var As Variant
    Dim Frage As String
    Dim Titel As String

    Frage = "Bitte etwas eingeben:"
    Titel = "Eingabe"
    Eingabebox Frage, Titel, var

    If Not IsEmpty(var) Then
        Range("C38").Value = "Eingabe: " & var
    End If
End Sub

Private Sub Eingabebox(Frage As String, Titel As String, ByRef var As Variant)
    Do
        var = Application.InputBox(Frage, Titel)

        ' Überprüfen, ob auf Abbrechen geklickt wurde
        If StrPtr(var) = 0 Then
            MsgBox "InputBox abgebrochen."
            Exit Sub
        End If
    Loop While Trim(var) = ""
End Sub
  1. Schließe den VBA-Editor und teste die Funktion in Excel.

Häufige Fehler und Lösungen

  • Problem: InputBox gibt ein leeres Feld zurück, wenn auf "Abbrechen" geklickt wird.

    • Lösung: Verwende StrPtr zur Überprüfung. Wenn StrPtr(var) = 0, wurde auf Abbrechen geklickt.
  • Problem: Die Cell "C38" bleibt unverändert.

    • Lösung: Stelle sicher, dass die Eingabe nicht leer ist, bevor sie in die Zelle geschrieben wird.

Alternative Methoden

Eine andere Möglichkeit, die Eingaben zu verarbeiten und auf "Abbrechen" zu reagieren, ist die Verwendung einer benutzerdefinierten UserForm. Hier kannst du Steuerelemente wie Textfelder und Schaltflächen hinzufügen, um die Kontrolle über die Eingabe zu maximieren.

  1. Erstelle eine UserForm.
  2. Füge ein Textfeld und zwei Schaltflächen (OK und Abbrechen) hinzu.
  3. Schreibe den Code zur Verarbeitung der Eingabe in die Schaltflächen.

Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Eingabe zu verarbeiten:

Sub BeispielInputBox()
    Dim userInput As Variant
    userInput = Application.InputBox("Geben Sie Ihren Namen ein:", "Name eingeben", Type:=2)

    If StrPtr(userInput) = 0 Then
        MsgBox "Eingabe abgebrochen."
    Else
        MsgBox "Hallo " & userInput
    End If
End Sub

Tipps für Profis

  • Nutze Application.InputBox anstelle von InputBox, wenn du den Datentyp der Eingabe kontrollieren möchtest (z.B. nur Zahlen).
  • Verwende Trim$() zur Bereinigung der Eingabe, um sicherzustellen, dass nur relevante Daten verarbeitet werden.
  • Implementiere eine Fehlerbehandlung, um unerwartete Eingaben zu steuern.

FAQ: Häufige Fragen

1. Wie erkenne ich, ob der Benutzer auf "Abbrechen" geklickt hat?
Du kannst StrPtr(var) verwenden. Wenn der Rückgabewert 0 ist, wurde auf "Abbrechen" geklickt.

2. Kann ich die Eingabe auf bestimmte Datentypen beschränken?
Ja, indem du Application.InputBox mit dem Parameter Type verwendest. Zum Beispiel, Type:=1 für numerische Eingaben.

3. Was passiert, wenn ich die InputBox ohne Eingabe schließe?
Wenn die Eingabe leer ist und du auf OK klickst, wird eine leere Zeichenkette zurückgegeben. Du kannst dies mit Trim überprüfen.

4. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in allen Versionen von Excel funktionieren, die VBA unterstützen.

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