Avatar billede Falentin Seniormester
20. februar 2019 - 21:52 Der 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?
Avatar billede Lene Fredborg Ekspert
20. februar 2019 - 23:53 #1
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?
Avatar billede Lene Fredborg Ekspert
21. februar 2019 - 00:05 #2
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?
Avatar billede Falentin Seniormester
21. februar 2019 - 00:30 #3
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.

Giver det mening?
Avatar billede Falentin Seniormester
21. februar 2019 - 00:35 #4
Som en krølle på tallen må den ikke søge i tabeller ...
Avatar billede Lene Fredborg Ekspert
21. februar 2019 - 00:59 #5
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?
Avatar billede Lene Fredborg Ekspert
21. februar 2019 - 01:11 #6
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
Avatar billede Falentin Seniormester
21. februar 2019 - 01:43 #7
Hej Lene

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?
Avatar billede Falentin Seniormester
21. februar 2019 - 02:07 #8
Næ, fandt ud af det selv:

Man skal bare udskifte ActiveDocument.Content med Selection.range.

Tusind Tak, Lene.
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