Avatar billede overchord Nybegynder
20. maj 2004 - 12:48 Der er 6 kommentarer og
1 løsning

Split string: VBA [Access97]

Jeg kan ikke lige helt gennemskue om jeg mangler en bestemt reference eller om split ganske simpelt ikke er en del af VBA men kun VB?
Skal have splittet en string hvor der er semi-kolon.
20. maj 2004 - 12:52 #1
Split blev vist først indført i Access 2000
20. maj 2004 - 12:53 #2
Er der altid kun ét semikolon? Eller skal funktionen fungere som den alm. split-funktion, som gemmer i et Array?
Avatar billede overchord Nybegynder
20. maj 2004 - 12:55 #3
thomas, nej der er en raekke semikoloner i hvert string paa variable steder (forfatter navne delt med semikolon). Jeg bliver nok bare noed til at loebe strengen igennem tegn for tegn saa.
20. maj 2004 - 13:14 #4
Så følte jeg mig jo udfordret :o)

Prøv at lægge denne i et modul:

Public Resultat() As String

Public Function Split(Streng As String, Afgrænser As String) As Long
    Dim pos As Long, OldPos As Long
    Dim n As Long
    pos = 1
    OldPos = 1
    Do
        pos = InStr(OldPos, Streng, Afgrænser)
        If pos > 0 Then
            n = n + 1
            ReDim Resultat(n)
            Resultat(n) = Mid(Streng, OldPos, pos - OldPos)
            OldPos = pos + 1
        End If
    Loop Until pos >= Len(Streng) Or pos = 0
    Split = n
End Function

Du kan bruge den således:
Dim Antal as long
Dim n as long
Antal = Split("Din;tekststreng;som;Skal;splittes", ";")
for n = 1 to Antal
  debug.print Resultat(n)
next n
20. maj 2004 - 13:15 #5
vent....der mangler et eller andet....
20. maj 2004 - 13:22 #6
Sådan (manglede lige en Preserve og lidt til ;o):

Option Compare Database
Option Explicit
Option Base 1

Public Resultat() As String

Public Function Split(Streng As String, Afgrænser As String) As Long
    Dim pos As Long, OldPos As Long
    Dim n As Long
    pos = 1
    OldPos = 1
    Do
        pos = InStr(OldPos, Streng, Afgrænser)
        If pos > 0 Then
            n = n + 1
            ReDim Preserve Resultat(n)
            Resultat(n) = Mid(Streng, OldPos, pos - OldPos)
            OldPos = pos + 1
        End If
    Loop Until pos >= Len(Streng) Or pos = 0
    n = n + 1
    ReDim Preserve Resultat(n)
    Resultat(n) = Mid(Streng, OldPos)
    Split = n
End Function

Public Function TestSplit()
Dim Antal As Long
Dim n As Long
Antal = Split("Din;tekststreng;som;Skal;splittes", ";")
For n = 1 To Antal
  Debug.Print Resultat(n)
Next n
End Function


Kør TestSplit og kig herefter i debug-vinduet
Avatar billede overchord Nybegynder
20. maj 2004 - 14:21 #7
Fantasktisk Thomas ! Naar MS nu ikke inkluderede den i 97, saa maa den jo tilfoejges manuelt :-)
Takker.
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
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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