Avatar billede mrkr Juniormester
24. oktober 2014 - 11:48 Der er 5 kommentarer og
1 løsning

VBA til at erstatte tekst

Hej eksperter

Jeg har en kode som jeg har fået hjælp til at lave herinde.
Koden indsætter automatisk en tekst i en celle udfor en kode jeg bruger. Jeg indtaster q100 og op til q999 i en celle.

Derefter henter den teksten fra arket AUTOTEKSTER i linje 100-999, alt efter hvilken Q kode jeg har brugt. Q100 henter fra linje 100, q125 henter fra linje 125 osv.

Det fungerer rigtig godt.

Nu kunne jeg så rigtig godt tænke mig udvide koden, da jeg ofte gerne vil tilføje en tekst EFTER selve autoteksten.

Autoteksterne fra arket "AUTOTEKSTER" kunne se således ud:
q101 = Dette er autotekst101
q102 = Dette er autotekst for nr. 102
osv.

Når jeg skriver q101, så kommer teksten "Dette er autotekst101" frem. Men jeg kunne godt tænke mig at jeg kunne bruge en "joker" og kombinere en autotekst (q1) og noget tekst jeg selv tilføjer, når jeg taster.

Det jeg taster i cellen kunne eks. se sådan ud:
"q101+ og den er rigtigt god"

Hvis jeg skriver det skal den indsætte følgende tekst:
"Dette er autotekst1 og den er rigtig god"

Dvs. at koden skal teste efter de første 4 tegn fra venstre.
Bruge dette til at slå en autotekst op samt indsætte den tekst jeg har brugt efter "+" som altid vil være tegn nr. 5 i cellen.

Jeg vil meget gerne anvende + som jokertegn, hvis det kan lade sig gøre.

Min nuværende kode ser således ud:


dim maalNR as integer

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D:E")) Is Nothing Then
  For maalNR=100 to 999
    If Target.Value = "q" & maalNR Then Target.Value = Sheets  ("autotekster").Range("b" & maalNR).Value
  Next maalNR
endif
End Sub
Avatar billede finb Ekspert
24. oktober 2014 - 13:10 #1
´inputbox popper op og spørger dig om tekst:

dim maalNR as integer

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D:E")) Is Nothing Then
  For maalNR=100 to 999
    If Target.Value = "q" & maalNR Then Target.Value = Sheets  ("autotekster").Range("b" & maalNR).Value & " " & inputbox("Her skriver du den ønskede tilføjelse")
  Next maalNR
endif
End Sub
Avatar billede mrkr Juniormester
24. oktober 2014 - 16:57 #2
hej finb

Så har jeg testet.
Koden kommer fint med en popup og spørger.
Men det er desværre ikke som jeg havde tænkt mig.

Dette skyldes at jeg bruger koderne "q101" m.m. rigtig mange gange. Langt de fleste gange bruger jeg "kun" koden, uden at tilføje ekstra tekst. Altså kun q101

Jeg vil derfor helst ikke have nogen popup hver gang.
Jeg vil faktisk helst ikke have nogen popup, hvis det kan undgås.

Dette skyldes at jeg bruger koden frygtelig mange gange, når jeg har arket åbnet. Så det skal helst flyde så meget som muligt :-)
Avatar billede mrkr Juniormester
25. oktober 2014 - 17:01 #3
Nu har jeg sidt op prøvet en masse forskellige ting.
Jeg er kommet frem til nedenstående kode.

Så længe jeg skriver q111+, så henter den data far arket autotekster.
Men så snart jeg tilføjer noget ekstra tekst (mere end 5 cifre), så virker koden ikke.

Er der nogen der kan se hva der er galt?


If Not Intersect(Target, Range("D:E")) Is Nothing Then
  For maalNR=100 to 999
  If Target.Value = Left("q" & maalNR & "+", 5) Then Target.Value = Sheets("autotekster").Range("b" & maalNR).Value & Mid(Target.Value, 6, 100)

  Next maalNR
end if
End Sub
Avatar billede kabbak Professor
25. oktober 2014 - 22:41 #4
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D:E")) Is Nothing Then
    Application.EnableEvents = False' skal forhindre kørsel af makro, når Target rettes
        maalNR = Mid(Target, 2, 3)
        tekst = Sheets("autotekster").Range("b" & maalNR).Value
        EkstraTekst = Right(Target, Len(Target) - 4)
        Target.Value = tekst & EkstraTekst
          Application.EnableEvents = True' nu slår vi makroer til igen
    End If
End Sub

hvis nu koden går i stå, det kan den gøre hvis du får fejl imellem de 2 linjer med
Application.EnableEvents

så kør denne makro


Public Sub EnableEvent()
Application.EnableEvents = True
End Sub
Avatar billede mrkr Juniormester
26. oktober 2014 - 10:51 #5
Det virker fuldstændigt som det skal.
Det var jeg aldrig selv kommet frem til.

Mange tak for hjælpen KABBAK.
Vil du komme med et svar, så jeg kan afgive point?
Avatar billede kabbak Professor
26. oktober 2014 - 11:57 #6
Godt det virkede ;-))
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