Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Optionbutton soll mehrere Funktionen auslösen
#1
Hallo,

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


Angehängte Dateien
.xlsm   _Mappe1üben 1-2.xlsm (Größe: 50,97 KB / Downloads: 15)
Antworten Top
#2
Servus kulis,

bist ja schon richtig weit gekommen, prima!

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

LG Gerd
Antworten Top
#3
Hi,
und bei
"Private Sub optionButton1_Click()"

die Zeile
TextBox4Text = "OK"
ersetzen mit
TextBox4.Value = "OK"


Diesen Block in Userform 1:
Code:
TextBox1 = ""
     TextBox2 = ""
     TextBox3 = ""
     TextBox4 = ""
     TextBox5 = ""
     TextBox6 = ""
     TextBox7 = ""
     TextBox8 = ""
     TextBox9 = ""

kannst Du durch diese 3 Zeilen ersetzen:
Code:
For i = 1 To 9            'alle auf "" setzen
         Me.Controls("TextBox" & i).Value = ""
      Next i

Und diesen Block
Code:
'TextBoxen füllen
                 TextBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
                 TextBox2 = Tabelle1.Cells(lZeile, 2).Value
                 TextBox3 = Tabelle1.Cells(lZeile, 3).Value
                 TextBox4 = Tabelle1.Cells(lZeile, 4).Value
                 TextBox5 = Tabelle1.Cells(lZeile, 5).Value
                 TextBox6 = Tabelle1.Cells(lZeile, 6).Value
                 TextBox7 = Tabelle1.Cells(lZeile, 7).Value
                 TextBox8 = Tabelle1.Cells(lZeile, 8).Value
                 TextBox9 = Tabelle1.Cells(lZeile, 9).Value

durch
Code:
'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
Antworten Top
#4
... dann setzen wir gleich noch einen drauf :)

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
LG Gerd
Antworten Top
#5
Hi,

und eine Nachfrage:

Was ist "Me.Dirty"?
Antworten Top
#6
Guten Morgen und vielen Dank für die Hilfe,

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"
.xlsm   _Mappe1üben 1-2.xlsm (Größe: 57,34 KB / Downloads: 5)
Antworten Top
#7
Servus kulis,

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 :)

LG Gerd
Antworten Top
#8
Guten Morgen,

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.
Antworten Top
#9
Mhm ... dann hast Du das Script an der falschen Stelle eingefügt?
Ist Dein "Drucken"-Button CommandButton2?
Antworten Top
#10
Das stimmt. Ist Button2
Antworten Top


Gehe zu:


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