Avatar billede sgadegaard Nybegynder
17. marts 2014 - 12:30 Der er 7 kommentarer og
1 løsning

Konverter text til værdi i VBA

Hvordan får jeg konverteret "idn" til en værdi?,

værdien fra instrument.ReadString() er:
10.000,000,00 MHz<CR> og denne skal gerne konverterse til
10,00000000


Private Sub Start_Click()
    Dim ioMgr As VisaComLib.ResourceManager
    Dim instrument As VisaComLib.FormattedIO488
    Dim idn As String
    Dim i As Integer
    Set ioMgr = New VisaComLib.ResourceManager
    Set instrument = New VisaComLib.FormattedIO488
    Set instrument.IO = ioMgr.Open("ASRL3::INSTR")
    i = 1
    Do While i < 10
    idn = instrument.ReadString()
    ActiveSheet.Cells(i, 1) = idn
    i = i + 1
    Loop
End Sub


mvh
Søren
Avatar billede claes57 Ekspert
17. marts 2014 - 12:34 #1
http://msdn.microsoft.com/en-us/library/s2dy91zy.aspx
clng hvis det er heltal, ellers cdbl

    Do While i < 10
      idn = instrument.ReadString()
      ActiveSheet.Cells(i, 1) = CLng(idn)
      i = i + 1
    Loop
Avatar billede sgadegaard Nybegynder
17. marts 2014 - 13:18 #2
Jeg får en "type mismatch" error i linien, når jeg anvender CDbl.

Skal " MHz<CR>" ikke fjernes først? (alt efter første mellemrum)
Avatar billede tjp Mester
17. marts 2014 - 13:27 #3
Hmm, værdien '10.000,000,00 MHz<CR>' ser lidt suspekt ud - der er vist kludder i kommaer og punktum?
Avatar billede tjp Mester
17. marts 2014 - 13:32 #4
En mulighed:
CDbl(Split(idn)(0))
Avatar billede sgadegaard Nybegynder
17. marts 2014 - 14:05 #5
Får stadigvæk en Run-time error '13' type mismatch

idn er udlæst fra en serien frekvens tæller som "printer" værdien hvergang den har trigget. Derfor det list mærklige format.

Jeg har nu lavet en "konvertering" i arket men det ville da være mere optimal at lave den i VBA

Her er hvad jeg laver i excel

A1=idn
B1=SUBSTITUTE(CLEAN(A1);".";":") = 10:000,000,01 MHz
C1=SUBSTITUTE(B1;",";"")        = 10:00000001 MHz
D1=SUBSTITUTE(C1;":";",")        = 10,00000001 MHz
E1=LEFT(D1;LEN(D1)-4)+0          = 10,00000001
Avatar billede claes57 Ekspert
17. marts 2014 - 14:42 #6
Private Sub Start_Click()
    Dim ioMgr As VisaComLib.ResourceManager
    Dim instrument As VisaComLib.FormattedIO488
    Dim idn As String
    Dim i As Integer
    Set ioMgr = New VisaComLib.ResourceManager
    Set instrument = New VisaComLib.FormattedIO488
    Set instrument.IO = ioMgr.Open("ASRL3::INSTR")
    i = 1
    Do While i < 10
        idn = Split(idn)(0)        'fjern MHz
        idn =  Replace(idn, ",", "")    'fjern kommaer
        idn =  Replace(idn, ".", ",")    'skift punktum til komma / evt overflødig
        ActiveSheet.Cells(i, 1) = CDbl(idn)
        i = i + 1
    Loop
End Sub
Avatar billede sgadegaard Nybegynder
17. marts 2014 - 15:07 #7
Super claes57,

Du sender bare et svar :-)

Mange tak
Avatar billede claes57 Ekspert
17. marts 2014 - 15:12 #8
Ok, og tak til tjp for split...
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