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.