Formatera data i formulärobjekt
Här visas två exempel på hur vi kan formatera data i formulärobjekt. I dessa exempel används ett combobox-objekt respektive ett textbox-objekt.
Tidsformatering
I det första exemplet visas hur vi kan hantera tid i en combobox-objekt i ett formulär. De värden som tilldelas comboboxen är textvärden, dvs alfanumeriska värden.
När användaren har valt ett önskat värde måste vi omvandla det till ett talvärde, dvs numeriskt värde, som därefter formateras med ett tidsformat.
Option Explicit
Private Sub cmbOK_Click()
Dim vaValue As Variant
'Här använder vi oss av en kalkylbladsfunktion för att ersätta kolon med
'ingeting.
vaValue = Application.WorksheetFunction.Substitute(ComboBox1.Value, ":", "")
'För att kunna utföra beräkning måste värdet 000 omvandlas till 2400.
If vaValue = "000" Then vaValue = 2400
'Omvandlar värdet till ett numeriskt värde.
vaValue = vaValue * 1
'Här konverteras det valda värdet till tidsvärden, dvs till ett decimalvärde.
If Right(vaValue, 2) <> 0 Then
'Värdet 30 i t ex 01:30 representeras av värdet 50, vilket vi måste beakta.
vaValue = vaValue + 20
vaValue = (vaValue / 100) / 24
Else
vaValue = (vaValue / 100) / 24
End If
'Här formateras decimalvärdet till ett tidsvärde.
MsgBox Format(vaValue, "hh:mm")
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim i As Long
For i = 0 To 23
With ComboBox1
.AddItem ((i) & ":00")
.AddItem ((i) & ":30")
.ListIndex = -1
End With
Next i
End Sub
Valutaformatering
I detta exempel visas hur vi kan formatera ett angivet belopp i en textbox till ett valuta-format.
Även andra format kan användas.
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = CheckTal(TextBox1)
'Här formateras värdet till valuta och använder sig av det valutaformat
'som återfinns i Windows regionala inställningar.
If Not Cancel Then TextBox1.Value = Format(CDbl(TextBox1.Text), "Currency")
End Sub
Private Function CheckTal(TxtBox As MSForms.TextBox) As Boolean
Dim stTal As String
stTal = TxtBox.Text
If IsNumeric(stTal) Then
If stTal < 0 Then
MsgBox "Talet måste vara större än 0.", vbExclamation
TxtBox.Text = ""
CheckTal = True
ElseIf stTal - Int(stTal) = 0 Then
CheckTal = False
Else
MsgBox "Talet måste vara ett heltal.", vbExclamation
TxtBox.Text = ""
CheckTal = True
End If
Else
MsgBox "Indata måste vara ett heltal.", vbExclamation
TxtBox.Text = ""
CheckTal = True
End If
End Function