mit VBA nach MsgBox wieder ins Textfeld
#11
Naja habe gestern irgendwas geändert und ist ja auch nur Spielerei. Aber wie kann das sein? Also meinst du der Code an sich funktioniert, wenn uvb die UserForm1 einfach neu anlege?
Top
#12
Also es geht nun soweit ich es sehe. Nur das mit dem Fokus klappt nicht.

Was ich nun nicht verstehe ist das mit der Formel. Ich gebe im Textfeld "Prüfintervall" eine Zahl ein "x". Die Formel lautet dann 100/"x". Nun soll daraus ein Strang mit Text gebaut werden, sodass dann steht "Ergebnis" %, jedes "x". Teil.

Wenn außerdem die Userform initialisiert wird, möchte ich hier nicht den ganzen Text der Zeile sondern nur die Zahl "x" anzeigen lassen. Ich weiß gar nicht, wie ich das erklären soll und ob sowas überhaupt möglich ist.


Angehängte Dateien
.xlsm   Testdokument.xlsm (Größe: 84,3 KB / Downloads: 1)
Top
#13
Hallo Leute,

ich habe nun doch einiges irgendwie hinbekommen. Ich mache das Ganze Zuhause und privat und werde auch nicht dafür bezahlt. Ich hoffe ich bekomme ein Danke, aber selbst das ist fraglich.
Warum ich das immer für alle Arbeitgeber mache, weiß ich nicht. In diesem Fall habe ich aber auch keine andere Wahl, etwas zu machen, was brauchbar ist. Denn mein Ex-Vorgesetzter hatte ein Dokument, was neu erstellt werden musste, da er das Kennwort nicht herausgegeben hat. Und ich soll zu den ganzen Aufgaben entsprechend etwas machen, damit wir wieder arbeiten können.

Vielleicht wird das ja irgendwann mal erkannt, dass ich nicht aufgebe und es wert bin. Aber wahrscheinlich ist das nur Wunschdenken.

Dadurch, dass ich zuletzt keine Antworten hier erhalten habe, konnte ich die letzten Teile eigentlich doch irgendwie lösen, vor allem das mit der Formel.
Aber ich bin jetzt zu doof für Google oder verstehe nichts mehr.

Ich habe folgendes Szenario: In einer Userform sollen nun alle Textboxen geprüft werden, ob sie gefüllt sind. Wenn mindestens eine Textbox leer ist, soll eine Messagebox vbOkCancel mit einem definierten Text erscheinen.
Wenn nun aber alle Textboxen ausgefüllt sind dann soll eine andere Messagebox mit vbOkCancel geöffnet werden (bzw. mit einem anderen Text).

Aber beim Klick auf OK oder Abbrechen soll bei beiden Boxen der gleiche Code wieder ablaufen. Das heißt, nur die Texte der Boxen sind unterschiedlich.
Irgendwie habe ich was mit einer FOR-Schleife gefunden, aber da waren dann immer nur eine Messagebox angegeben. Und den Code kriege ich nun gar nicht ans Laufen.

Ich wäre wirklich sehr dankbar, wenn mir hier geholfen werden könnte: Wie prüfe ich Textboxen und wie erreiche ich, dass bei unterschiedlichen Zuständen (alle gefüllt/mindestens eine leer), dann die Messagebox1 oder Messagebox2 angezeigt wird? Um dann abschließend den gleichen Code fortzusetzen?

Geht das überhaupt? Ich wäre wirklich sehr dankbar.
Top
#14
Hallo,
Private Sub CommandButton1_Click()
  Dim bolText As Boolean
  Dim oControl As Control
  For Each oControl In Me.Controls
    If TypeName(oControl) = "TextBox" Then
      bolText = Len(oControl)
      If Not bolText Then Exit For
    End If
  Next oControl
  If bolText Then
    MsgBox "Messagebox1"
  Else
    MsgBox "Messagebox2"
  End If
End Sub
Gruß Uwe
Top
#15
Wow do schnell, danke. Ich probiere das aus. Bisher hahe ich die Message oxen ja noch definiert. Dim msg1= und dim msg2 = vbokcsncel, Vbexclamation z. B. Geht das damit auch? 

Und wo kommt dann der Code hin den ich dann mit klick auf vbok der beiden Boxen ausführen will? Mit diesen For Schleifen hatte ich noch nie Kontakt das wird für mich wohl dauern, bis ich die richtig verstanden habe...
Top
#16
Hallo,
Private Sub CommandButton1_Click()
Dim bolText As Boolean
Dim oControl As Control
For Each oControl In Me.Controls
If TypeName(oControl) = "TextBox" Then
bolText = Len(oControl)
If Not bolText Then Exit For
End If
Next oControl
If bolText Then
If MsgBox("Messagebox1", vbYesNo + vbQuestion) = vbYes Then
CodeBeiKeineLeer
End If
Else
If MsgBox("Messagebox2", vbYesNo + vbQuestion) = vbYes Then
CodeBeiLeer
End If
End If
End Sub

Sub CodeBeiLeer()
MsgBox "Mindestens eine TextBox ist leer"
End Sub

Sub CodeBeiKeineLeer()
MsgBox "Keine TextBox ist leer"
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • ToXiC
Top
#17
Pfff. Für mich ist das schon alles schwer. Es unterscheiden sich bei mir nur die Texte der MessageBoxen, der Code solll aber bei beiden dann der gleiche sein. Und muss ich dann call Code bei keine leer machen?

OK, bin müde, ich komme morgen vielleicht dazu mir das anzusehen. Ich glaube über meine Codierung lacht ihr sowieso. So schlecht wie ich das mache, auch wenn das dann irgendwie funktioniert... 

Ihr gsbt echt Geduld, das ist nicht meine Stärke.
Top
#18
Guten Morgen,

ich habe das ausprobiert aber blicke nicht ganz durch. Zumindest funktioniert nun, dass mir je nach Zustand die richtigen Messages angezeigt werden.
Aber der weitere Code, dass dann die Übernahme in die entsprechenden Zellen stattfindet.

Ich verstehe nun auch nicht, warum ich weitere Subs mit gleichem Textinhalt erstellen musste. Ich bin heute sowieso eben der Spur. Aber wäre nett, wenn man sich folgenden Code ansehen könnte damit ich den Denkfehler verstehe...

Code:
Private Sub inspectionlot()
    Application.ScreenUpdating = False
    Dim Interval As String
    Dim result As Integer
    result = Range("BA10").Value * (CDbl(TextBox_Interval.Value) / 100)
    If TextBox_Interval.Value = "" Then Exit Sub
    If TextBox_Interval.Value < 100 Then
    Interval = "Prüfintervall " & TextBox_Interval.Value & "%, jedes " & CVar(result) & ". Teil."
    ElseIf TextBox_Interval.Value = 100 Then
    Interval = "Prüfintervall " & TextBox_Interval.Value & "%, jedes Teil."
    End If
    Range("B41:BH41").Select
    ActiveCell.Value = CVar(Interval)
    Range("A1").Select
    Application.ScreenUpdating = True
End Sub

Sub allcompleted()
    MsgBox "Mit OK werden alle Eingaben übernommen." & vbCrLf & "Vorhandener Inhalt wird überschrieben!"
    ActiveSheet.Range("B3") = TextBox_Customer.Value
    ActiveSheet.Range("BA6") = TextBox_Date.Value
    ActiveSheet.Range("BF6") = TextBox_Version.Value
    ActiveSheet.Range("L7") = TextBox_PartNo.Value
    ActiveSheet.Range("AG7") = TextBox_JobNo.Value
    ActiveSheet.Range("BA7") = TextBox_TestplanNo.Value
    ActiveSheet.Range("L9") = TextBox_DrawingNo.Value
    ActiveSheet.Range("AD9") = TextBox_Index.Value
    ActiveSheet.Range("AR9") = TextBox_PartName.Value
    ActiveSheet.Range("L10") = TextBox_OrderNo.Value
    ActiveSheet.Range("AG10") = TextBox_CommissionNo.Value
    ActiveSheet.Range("BA10") = TextBox_Pieces.Value
    ActiveSheet.Range("L11") = TextBox_Operation.Value
    ActiveSheet.Range("AR11") = TextBox_Machine.Value
    ActiveSheet.Range("L12") = TextBox_Material.Value
    ActiveSheet.Range("BJ1") = TextBox_Interval.Value
    'ActiveSheet.Range("BA5") = TextBox_Creator.Value
    Call inspectionlot
End Sub

Sub notallcompleted()
    MsgBox "Es wurden nicht alle Eingaben gemacht." & Chr(13) & "Mit OK werden alle Eingaben und leere Textfelder übernommen!"
    ActiveSheet.Range("B3") = TextBox_Customer.Value
    ActiveSheet.Range("BA6") = TextBox_Date.Value
    ActiveSheet.Range("BF6") = TextBox_Version.Value
    ActiveSheet.Range("L7") = TextBox_PartNo.Value
    ActiveSheet.Range("AG7") = TextBox_JobNo.Value
    ActiveSheet.Range("BA7") = TextBox_TestplanNo.Value
    ActiveSheet.Range("L9") = TextBox_DrawingNo.Value
    ActiveSheet.Range("AD9") = TextBox_Index.Value
    ActiveSheet.Range("AR9") = TextBox_PartName.Value
    ActiveSheet.Range("L10") = TextBox_OrderNo.Value
    ActiveSheet.Range("AG10") = TextBox_CommissionNo.Value
    ActiveSheet.Range("BA10") = TextBox_Pieces.Value
    ActiveSheet.Range("L11") = TextBox_Operation.Value
    ActiveSheet.Range("AR11") = TextBox_Machine.Value
    ActiveSheet.Range("L12") = TextBox_Material.Value
    ActiveSheet.Range("BJ1") = TextBox_Interval.Value
    'ActiveSheet.Range("BA5") = TextBox_Creator.Value
    Call inspectionlot
End Sub


Private Sub CMD_Apply_Click()
    If TextBox_Interval.Value = "" Then Range("B41:BH41").ClearContents
    If TextBox_Interval.Value = "" Then
    End If
    Dim bolText As Boolean
    Dim oControl As Control
    For Each oControl In Me.Controls
    If TypeName(oControl) = "TextBox" Then
    bolText = Len(oControl)
    If Not bolText Then Exit For
    End If
    Next oControl
    If bolText Then
    If MsgBox("Mit OK werden alle Eingaben übernommen." & vbCrLf & "Vorhandener Inhalt wird überschrieben!", vbOKCancel + vbExclamation) = vbYes Then
    allcompleted
    End If
   
    Else
    If MsgBox("Es wurden nicht alle Eingaben gemacht." & vbCrLf & "Mit OK werden alle Eingaben und leere Textfelder übernommen!", vbOKCancel + vbExclamation) = vbYes Then
    notallcompleted
    End If
    End If


End Sub
Top
#19
Hi Uwe,

danke Dir. Ich war gerade am Rumspielen und dann habe ich durch Zufall einen Fehler bemerkt in der Reihenfolge eines anderen Subs in UserForm1 und den behoben. Dann wieder aufgebaut wie Du zuvor geschrieben hast und jetzt klappt es.

Was ich gerne wissen würde: Warum muss ich hier zum Ausrufen der Subs kein Call vorherstellen oder muss das generell nicht sein.
Top
#20
Hallo,

wenn Du den Cursor auf Call setzst und dann die Taste F1 drückst, käme dann unter anderem das: Wink

"Das Schlüsselwort Call muß nicht unbedingt beim Aufrufen einer Prozedur verwendet werden. Wenn Sie jedoch Call verwenden, um eine Prozedur aufzurufen, die Argumente erfordert, müssen Sie die Werte für ArgListe in Klammern einschließen. Wenn Sie das Schlüsselwort Call nicht angeben, sind auch keine Klammern um ArgListe zulässig."

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • ToXiC
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste