24. oktober 2014 - 11:48Der 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
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
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 :-)
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)
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
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.