Har 6 textrutor som ska fyllas i. En knapp startar en procedur, men kollar först så att alla rutorna är ifyllda. Så här hade jag tänkt mig: if txt1.text = "" or txt2.text = "" or txt3.text = "" or txt4.text = "" or txt5.text = "" or txt6.text = "" then Det är bättre att berätta för användaren vilka ruter det glömt att fylla i. Annars kan programmet upplevas som mycket jobbigt. 1) Har 6 textrutor som ska fyllas i. Du ger inget bra meddelande till användaren("Allt är inte ifyllt"). Om inte allt är ifylt bör man tala om vad som inte är ifyllt så användaren kan korrigera det. Det skulle ju vara som om besiktningen sa att bilen inte blev godkänd. Men berättade inte vad du fick underkänt på. Hur kul skulle det då vara att behöva gå igenom hela bilen?If
<code>
Private Sub cmdKnapp_Click()
If txt1.Text = 0 Then
MsgBox "Text1 är inte ifylld", 64, "Hallå!"
If txt2.Text = 0 Then
MsgBox "Text2 är inte ifylld", 64, "Hallå!"
If txt3.Text = 0 Then
MsgBox "Text3 är inte ifylld", 64, "Hallå!"
If txt1.Text = 0 Then
MsgBox "Text4 är inte ifylld", 64, "Hallå!"
If txt5.Text = 0 Then
MsgBox "Text5 är inte ifylld", 64, "Hallå!"
If txt6.Text = 0 Then
MsgBox "Text6 är inte ifylld", 64, "Hallå!"
End If
End If
End If
End If
End If
End If
End Sub
</code>
Funkar inte med de som inte är ifyllda efter en ifylld. Vill inte göra en array på rutorna då jag har så olika namn på dem.
/PeterSv: If
msgbox "Fyll i alla rutor, annars... :)"
else
msgbox "Godkännt! :)"
end ifSv: If
<code>
Private Sub cmdKnapp_Click()
Dim strMsg As String
If Len(txt1.Text) = 0 Then
strMsg = strMsg & "Text1" & vbCrLf
End If
If Len(txt2.Text) = 0 Then
strMsg = strMsg & "Text2" & vbCrLf
End If
If Len(txt3.Text) = 0 Then
strMsg = strMsg & "Text3" & vbCrLf
End If
If Len(txt4.Text) = 0 Then
strMsg = strMsg & "Text4" & vbCrLf
End If
If Len(txt5.Text) = 0 Then
strMsg = strMsg & "Text5" & vbCrLf
End If
If Len(txt6.Text) = 0 Then
strMsg = strMsg & "Text6" & vbCrLf
End If
If Len(strMsg) Then
Msgbox "Du har glömt fylla i:" & vbCrLf & strMsg, vbInformation
Else
'Ok
End If
End Sub
</code>Sv: If
2) En knapp startar en procedur, men...
3) ...kollar först så att alla rutorna är ifyllda.
Detta var alltså frågeställningen.
Jag skulle välja att dimma:
<code> Dim txt1(6) as String
Dim Klart as Boolean </code>
Sen kollar man:
<code>Private sub Kolla()
Klart=True ' Utgå från att allt är ifyllt.
Dim Nr as Byte
For Nr=1 to 6
If txt1(Nr).Text="" Then
Klart=False ' Här sket det sig.
Endif
Next
If Klart=False Then
MsgBox "Allt är inte ifyllt.", 64, "Hallå!"
Endif
End Sub </code>
Denna kod uppfyller 3)-an ovan, lr? :-)
/ChristerGbg
Sv: If
Du ska inte använda Byte. Eftersom datorn arbetar med 32bitar måste den omvandla din variabel från 8bitar till 32bitar och sedan tillbaks. Vilket gör den långsammare än en Long vilket är 32bitar. Sedan är ju en For Each lopp snyggare och jag tror även den är lite snabbare.
Du gav mig en ide. Om man har en kontrollarray med sex element. Ger varje kontroll ett namn i Tag egenskapen(Mycket viktigt, annars blir resultatet tomt):
Sen kollar man:
<code>
Private sub Kolla()
Dim TextBox as Textbox
Dim strMesage As String
For Each TextBox In txt
If Len(TextBox.Text) = 0 Then
strMesage = strMesage & vbCrLf & TextBox.Tag
End if
Next
If Len(strMesage) Then
MsgBox "Du har inte fyllt i:" & strMesage, vbInformation, "Hallå!"
Else
'Gör det som skall göras
End if
</code>