Avatar billede rasmus1234 Nybegynder
23. april 2007 - 10:49 Der er 16 kommentarer og
1 løsning

Erstat-funktionen til en variabel tekststreng

Hvordan får jeg nedenstående til at fungere?

Erstat([product.product_description_long];Chr(60)&"*"&Chr(62);"")

Altså erstat <dfklmdfklmnl> eller <454516> med ""
Avatar billede fdata Forsker
23. april 2007 - 18:39 #1
Skriv en lille funktion i stil med:

Private Sub Test_ErstatNoget()
  MsgBox ErstatNoget("Test<dfklmdfklmnl>streng")
End Sub

Function ErstatNoget(s As String) As String
  Dim p60 As Integer
  Dim p62 As Integer
  p60 = InStr(1, s, Chr(60))
  p62 = InStr(1, s, Chr(62))
  ErstatNoget = Left(s, p60 - 1) & Mid(s, p62 + 1)
End Function
Avatar billede kabbak Professor
23. april 2007 - 22:19 #2
hvis den skal finde alle i strengen, hvis der er flere forekomster, så skal den kalde sig selv igen, jeg tjekker kun på Chr(60)

Function ErstatNoget(s As String) As String
    Dim p60 As Integer
    Dim p62 As Integer
    Dim Rest As String
    p60 = InStr(1, s, Chr(60))
    p62 = InStr(1, s, Chr(62))
    Rest = Left(s, p60 - 1) & Mid(s, p62 + 1)
    If InStr(1, Rest, Chr(60)) > 0 Then
        ErstatNoget = ErstatNoget(Rest)
    Else
        ErstatNoget = Rest
    End If
End Function
Avatar billede rasmus1234 Nybegynder
24. april 2007 - 08:23 #3
Der ER nemlig flere forekomster, så godt spottet kabbak.
Noget går galt i denne linie, hvor jeg bliver stoppet:
Rest = Left(s, p60 - 1) & Mid(s, p62 + 1)

Nogen forslag?
Avatar billede rasmus1234 Nybegynder
24. april 2007 - 09:32 #4
...måske det har noget at gøre med at feltet er "Notat" er et langt felt...Excel vil f.eks. ikke søg/erstatte i felter over 916 tegn.
Avatar billede rasmus1234 Nybegynder
24. april 2007 - 09:38 #5
...nej, nu tror jeg at jeg har fundet fejlen...det forekommer, når et felt OVERHOVEDET IKKE har Chr(60) og Chr(62)...kan dette rettes i koden?
Avatar billede rasmus1234 Nybegynder
24. april 2007 - 09:41 #6
...nej, æv...nu returneres "Overflow" i stedet
Avatar billede fdata Forsker
24. april 2007 - 19:52 #7
Function ErstatNoget(s As String) As String
    Dim p60 As Integer
    Dim p62 As Integer
    Dim Rest As String

    ErstatNoget = s
    p60 = InStr(1, s, Chr(60))
    if p60=0 then exit function

    p62 = InStr(1, s, Chr(62))
    Rest = Left(s, p60 - 1) & Mid(s, p62 + 1)
    If InStr(1, Rest, Chr(60)) > 0 Then
        ErstatNoget = ErstatNoget(Rest)
    Else
        ErstatNoget = Rest
    End If
End Function
Avatar billede rasmus1234 Nybegynder
25. april 2007 - 08:43 #8
tak for indlægget. Notatfeltet bliver desværre til et Tekstfelt, hvilket resulterer i max. 255 karakterer. Dvs. at en masse af den oprindelige tekst fra notatet forsvinder. Herudover kommer en fejl, at nogle af felter bliver til Null.
Avatar billede rasmus1234 Nybegynder
25. april 2007 - 09:45 #9
Jeg har kigget lidt på denne løsning, som er tilfredsstillende.

Erstat([Tabel2.2];Chr(60) & "br" & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "li" & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "br " & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "/b" & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "b" & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "hr" & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "/br" & Chr(62);"")
Erstat([Tabel2.2];Chr(60) & "br /" & Chr(62);"")
Left([tabel2.2];InStr(1;[tabel2.2];Chr(60);0)-1)

Kan man lave en funktion til dette?
Avatar billede fdata Forsker
26. april 2007 - 08:55 #10
Øøøh.
Har du prøvet at ændre ErstatNoget's parameter- og resultattype fra String til Variant?
Er [Tabel2.2] det eneste felt, der skal ændres?
I hvilken situation skal det ændres?
Fra kode? I en forespørgsel? På en formular eller på en rapport?
Avatar billede rasmus1234 Nybegynder
26. april 2007 - 09:54 #11
nu er jeg jo rookie når det kommer til koder, så en ændring fra String til Variant kan jeg umuligt komme på...har lige prøvet det...og det VIRKER sørme. Super super super. Til andre der finder dette emne...her er den endelige kode:

Function ErstatNoget(s As Variant) As Variant
    Dim p60 As Integer
    Dim p62 As Integer
    Dim Rest As Variant

    ErstatNoget = s
    p60 = InStr(1, s, Chr(60))
    If p60 = 0 Then Exit Function

    p62 = InStr(1, s, Chr(62))
    Rest = Left(s, p60 - 1) & Mid(s, p62 + 1)
    If InStr(1, Rest, Chr(60)) > 0 Then
        ErstatNoget = ErstatNoget(Rest)
    Else
        ErstatNoget = Rest
    End If
End Function
Avatar billede rasmus1234 Nybegynder
26. april 2007 - 09:57 #12
...har fundet ud af en fejl, som tidligere beskrevet...pga. notatfeltet indeholdte tegnet *....
Avatar billede rasmus1234 Nybegynder
26. april 2007 - 10:09 #13
...nej, det var ikke det...det var i stedet fordi Variant sluttede med "<br".
Det var DET der skabte fejlen. Kan man tage forbehold for dette i koden?
Avatar billede kabbak Professor
26. april 2007 - 10:21 #14
Nu tjekker den på >, så prøv det

Function ErstatNoget(s As Variant) As Variant
    Dim p60 As Integer
    Dim p62 As Integer
    Dim Rest As Variant
    ErstatNoget = s
    p60 = InStr(1, s, Chr(60))
    p62 = InStr(1, s, Chr(62))
  If p62 = 0 Then Exit Function
    Rest = Left(s, p60 - 1) & Mid(s, p62 + 1)
    If InStr(1, Rest, Chr(60)) > 0 Then
        ErstatNoget = ErstatNoget(Rest)
    Else
        ErstatNoget = Rest
    End If
End Function
Avatar billede kabbak Professor
26. april 2007 - 10:28 #15
Vi kan også tjekke på begge

If p62 = 0 or p60 = 0 Then Exit Function
Avatar billede rasmus1234 Nybegynder
26. april 2007 - 11:32 #16
kabbak, jeg synes også din deltagelse skal have point, fik lukket spørgsmålet for hurtigt. Venligst læg et svar på http://www.eksperten.dk/spm/775288
Avatar billede fdata Forsker
26. april 2007 - 21:36 #17
Så lykkedes det! Takker for point  ;o)
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

IT-JOB