20. februar 2019 - 21:52Der er
7 kommentarer og 1 løsning
Find text, kopier denne, men tilføje 2 tegn fra venstre side i VBA
Ja, det er ikke nemt at forklare. Men here goes.
Mit Word dokumentet kan se sådan ud:
06.1 test blah blah blah 06.2 test blah blah blah 06.3 test
OSV.
Min kode stump leder efter sidste gang et "06." optræder (ud fra hvor min cursor står). Men jeg vil gerne have at jeg også få tallet efter "06.", fx så jeg får får "06.3" med. Tallene vil ændre sig fra dokument til dokument, så jeg har brug for en dynamisk løsning.
Følgende virker ok, da det skal indsættes i en tabel. Jeg vil helst undgå at bruge select, da det giver problemer senere hen i mit script.
' Finder første to tegn i filnavnet
Dim Wordfile As String Wordfile = ActiveWindow.Parent StrVariable = Left(Wordfile, 2)
' Finder sidste Opgavenummer i teksten Set MyRange = ActiveDocument.Content MyRange.Find.Execute FindText:=StrVariable & ".", Forward:=False If MyRange.Find.Found = True Then MyRange.Copy
Hvordan kan jeg få tilføje 2 karakterer mere fra venstre? Dvs. fx fra 06. til 06.3?
Opklarende spørgsmål: De to tegn, der bliver gemt i StrVariable i din kode, er de to første tegn i filnavnet på det aktive dokument. Det betyder, at den streng, du finder, er de to første tegn i filnavnet + punktum, og det kan jo i teorien være hvilke som helst tegn, som kan indgå i et filnavn.
Ud fra din beskrivelse er det "06", du vil finde - er det sådan, at filnavnet starter med 06, og at du derfor henter værdien fra filnavnet?
Endnu et spørgsmål vedr. "Hvordan kan jeg få tilføje 2 karakterer mere fra venstre? Dvs. fx fra 06. til 06.3?"
Det er kun 1 tegn (til højre), der er tilføjet. Er det meningen, at det er det/de tal, der står efter 06, men før første mellemrum, der skal med i MyRange eller noget andet?
1 spørgsmål: det er fuldstændig rigtig, filnavnet vil altid starte med et tal, 01, 02, 03 osv, derfor henter jeg navnet fra filen. Jeg bruger det til studiet, hvor jeg referer til undervisningensgangen.
2. Spørgsmål. Det er er alle tallene der skal med, både 06. og 3, altså 06.3 skal over i tabellen. Reelt kan man sige at jeg er intereesseret i af få de første fem karakter fra venstre med.
Det giver næsten mening - men du skriver fem karakterer, og 06.3 er kun fire - derfor tænkte jeg, at der måske kunne være flere cifre, f.eks. 06.12 :-). Mener du i virkeligheder fire karakterer?
Et nysgerrigt spørgsmål: Er numrene 06.1, 06.2 osv. i virkeligheden numre i automatisk nummererede overskrifter formateret med Overskrift 2?
Se den ændrede makrokode nedenfor. Der er ikke indbygget noget til at sikre mod, at den fundne tekst er i en tabel.
Jeg har udeladt brugen af variablen Wordfile – den er ikke nødvendig, hvis ikke den skal bruges andre steder. Til gengæld har jeg erklæret de to variabler StrVariable og MyRange.
Dim StrVariable As String Dim MyRange As Range
' Finder første to tegn i filnavnet StrVariable = Left(ActiveDocument.name, 2)
' Finder sidste Opgavenummer i teksten Set MyRange = ActiveDocument.Content With MyRange .Find.Execute FindText:=StrVariable & ".", Forward:=False
If .Find.Found = True Then ' Tilføj næste tegn til MyRange ved at flytte ende af range et tegn til højre .End = .End + 1 .Copy End If End With
Det virker så perfekt:-) Desværre glemte jeg at skrive, at den skal tage udgangspunkt i hvor cursoren står i word., og derefter finde tidligere nummer (Som den så fint gør.) Jeg tænker at man kan udskifte ActiveDocument.Content med noget med Paragrah?
Man skal bare udskifte ActiveDocument.Content med Selection.range.
Tusind Tak, Lene.
Synes godt om
Ny brugerNybegynder
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.