Avatar billede Larsgl Novice
30. juli 2016 - 07:56 Der er 4 kommentarer og
1 løsning

VBA kode problemer med transfer af procentværdi fra Userform textbox til ws

Jeg har lavet en Inputbox som initierer med at indlæse eksisterende værdier fra ws! Herefter har jeg store problemer med at få en procentværdi overført.
Jeg har følgende kode:

Først prøvede jeg med:
ws.Range("B12") = CDbl(TextBox4.Value)

Som gave mismatch type 13 error

Jeg har så prøvet med:

ws.Range("B12") = Val(TextBox4.Value)

skriver jeg så fx 30% og overfører fås værdien 3000% i ws
skriver jeg 0,30 fås værdien 0 i ws, men US komma dvs 0.30 giver korrekt 30% i ws [B12]

[B12] er formateret som procent i arket

Jeg har så prøvet med følgende:

If Val(TextBox4.Value) > 100 Then
ws.Range("B12") = Val(TextBox4.Value) / 100
Else
ws.Range("B12") = Val(TextBox4.Value)
End If

I det mindste burde dette virke for værdien 30% uden decimaler, men stadigvæk viser ws [B12] 3000%

Når jeg initierer textboksen har jeg formatteret TextBox4 som følger:

TextBox4.Text = Format(ws.Range("B12"), "0.00%")

Det kunne være cool hvis man fx vha If sætninger eller lignende kunne bruge tre forskellige metoder i procent feltet fx
30, 30% eller 0,3 og de alle virkede
pt. virker kun 0.3 altså US format og 30% giver 3000% som så skal divideres med 100
Håber der er en som har et godt forslag! eller flere forslag!

På forhånd tak!

Mvh Lars
Avatar billede kabbak Professor
30. juli 2016 - 08:21 #1
jeg skriver 30% eller 0.3 , tekstboksen

Range("B12") = Ark1.TextBox4.Value

giver udmærket 30% i mit ark
Avatar billede Larsgl Novice
30. juli 2016 - 08:42 #2
Hej kabbak
Jeg ønsker bare ikke, at man skal skrive 0.3! dette er jo ikke DK format og irriterende for brugeren! Og har du startet med at indlæse en udgangsværdi fra ws i tekstboksen og formatteret denne til:
TextBox4.Text = Format(ws.Range("B12"), "0.00%")
Jeg har i øvrigt en indledende validering kørende, kode:
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii > 47 And KeyAscii < 58) Or KeyAscii = 44 Or KeyAscii = 46 Or KeyAscii = 32 Or KeyAscii = 37 Then
KeyAscii = KeyAscii
Else
KeyAscii = 0
MsgBox "Beklager, kun tal er tilladt!"
End If
End Sub

Og 30% giver 3000% uanset om ws [B12] er formatteret som procent eller tal!
At du så får 30% hjælper jo ikke mig til at få løst mit problem desværre, da jeg får 3000%, men tak for svaret!
Avatar billede excelent Ekspert
30. juli 2016 - 09:26 #3
Avatar billede Larsgl Novice
31. juli 2016 - 11:42 #4
Jeg har fundet en løsning selv her som virker!

Sub parsepctvalues()

Dim ovalue4, ovalue7 As String
Dim nvalue4, nvalue7 As Variant
Dim ws As Worksheet
Set ws = Worksheets("Input")
ovalue4 = FormatPercent(InputFormular.TextBox4, 2)
ovalue7 = FormatPercent(InputFormular.TextBox7, 2)
nvalue4 = Left(ovalue4, Len(ovalue4) - 1) / 100
ws.Range("B12").value = nvalue4
nvalue7 = Left(ovalue7, Len(ovalue7) - 1) / 100
ws.Range("B15").value = nvalue7
Konvertertiltal

End Sub
Sub Konvertertiltal()
' Konvertertiltal Makro
Dim ws As Worksheet

Set ws = Worksheets("Input")

    ws.Cells(12, 2).NumberFormat = "0.00%"
    ws.Cells(15, 2).NumberFormat = "0.00%"
End Sub
Avatar billede Larsgl Novice
31. juli 2016 - 11:46 #5
Tak til excelent jeg kigger lige på din løsning, men jeg synes min egen også er ok, da brugeren her både kan skrive tallet som decimal dvs fx 0,30 eller som procent 30% og det virker!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester