bin noch blutiger Anfänger und versuche mich gerade an der 1. VBA-Programmierung. Vieles konnte ich aus dem Forum herauslesen und für mich umsetzen. Bisher soweit, sogut. Doch jetzt stoße ich an eine Grenze:
Ich bastele derzeit an einer Userform (Userform3), die als Eingabe für ein Rechnungsformular dienen soll. In diesem Formular gibt es einen Optionbutton, der folgendes auslösen soll:
Wenn aus, dann soll nebenstehendes eMail-Feld leer bleiben. Weiter unten soll das Feld "Porto" zu einem Mussfeld werden. Wenn an, soll aus aus dem Textfeld 3, welches die Adresse aus der Tabelle 1 generiert, nur noch der Name stehen, das "Porto-Textfeld" grau hinterlegen und inaktiv machen.
Ich hoffe, ich habe mich nicht zu undeutlich ausgedruckt. Zum besseren Verständnis habe ich meine "Baustelle" einfach mal angehängt. Ich freue mich schon auf Eure Lösungsvorschläge
Versuch' mal das Mussfeld beim Verlassen der Userform abzufragen ...
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim Check As Boolean
Check = True If OptionButton1.Value = True Then If IsNumeric(TextBox31.Value) Then If CDbl(TextBox31.Value) = 0 Then Check = False End If Else Check = False End If End If
If Not Check Then MsgBox "Bitte ein gültiges Porto eintragen", vbCritical, "FEHLER" TextBox31.SetFocus Cancel = True End If End Sub
'TextBoxen füllen With Tabelle1 TextBox1 = Trim(CStr(.Cells(lZeile, 1).Value)) For i = 2 To 9 'Inhalt setzen Me.Controls("TextBox" & i).Value = .Cells(lZeile, i).Value Next i End With
an den anderen Stellen analog:
Code:
With Tabelle1 .Cells(lZeile, 1).Value = Trim(CStr(TextBox1.Text)) For i = 2 To 9 'Inhalt setzen .Cells(lZeile, i).Value = Me.Controls("TextBox" & i).Text Next i End With
Um in einer TextBox nur Zahlen und Komma zuzulassen, könntest Du diesen Beispielcode verwenden:
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case 48 To 57, 44 Case Else: KeyAscii = 0 MsgBox "Nur Zahlen erlaubt", vbCritical, "FEHLER" End Select End Sub
ich habe die Codes eingebaut. Allerdings machen sie noch nicht das Richtige.
Wichtig ist, dass eine Rechnung nur ausgedruckt werden kann, wenn der Optionbutton aktiv ist. Das Schließen der Userform geschieht über einen "Zurück"-Button. da ist das egal. D.h. die msg muss auf den "Druckbutton gelegt werden, bevor er das "Drucken-Macro ausführen kann. Was auch noch nicht funktioniert ist, den Option-Button wieder abzuwählen. Da würde ich Euch gerne nochmal bemühen. Das Ausdrucken einer Rechnung mit den eingegebenen Werten funktioniert inzwischen auch schon. Das Rechnungsformular habe ich als Tabelle erstellt, so dass ich von dort die Gesamtsummen in der Userform anzeigen lassen kann. Ebenfalls sollen aus der Tabelle "Rechnungen" die Werte in die Buchführung übernommen werden. Da denke ich aber, reichen meine Excel Kenntnisse aus. Die aktuelle Version hängt wieder an.
Und @ Rabe, mir fiel der Code auf die Schnelle nicht ein, habe mich daher auf die ersten "Übungsstunden" bezogen und die "einfache Variante" genommen. Du hast natürlich recht. Sobald mein Projekt einigermaßen läuft, werde ich "aufräumen"
_Mappe1üben 1-2.xlsm (Größe: 57,34 KB / Downloads: 5)
dann lösche mal den Code oben wieder und verwende diesen hier für Deinen Button2:
Code:
Private Sub CommandButton2_Click() Dim Check As Boolean
Check = True If OptionButton1.Value = True Then If IsNumeric(TextBox31.Value) Then If CDbl(TextBox31.Value) = 0 Then Check = False End If Else Check = False End If End If
If Not Check Then MsgBox "Bitte ein gültiges Porto eintragen", vbCritical, "FEHLER" TextBox31.SetFocus Exit Sub End If
....
Verwende am besten ein Kontrollkästchen (Checkbox) statt einem Optionbutton. Im Kontrollkästchen kann man den Haken wieder entfernen :)
so, ich habe den Code eingebaut. Es funktioniert. Allerdings sollen die FEhlermeldungen erst kommen, wenn der "Drucken"-Button gedrückt wird. Der Drucken-Button ist mit einem Makro hinterlegt. Hier soll die Fehlermeldung kommen, bevor das Makro durchläuft. Jetzt bekomme ich schon automatisch eine Fehlermeldung, wenn ich nur das Häckchen setze.