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