20. februar 2019 - 12:57Der er
6 kommentarer og 1 løsning
Makro
Ok jeg giver op og spørger herinde :)
Jeg har lavet en lille makro - lad os kalde den makro 3.
Den er indspillet automatisk og leder efter et ord i mit word dokument. Når den finder ordet sætter den 6 stjerner bagefter. eks: Søg ordet forår og sæt ******. Det virker.
Nu ville jeg gerne have makroen til at fortsætte og finde det næste "forår" og sætte 6 stjerner.
Når vi når eof skal makroen selvfølgelig stoppe :)
Hvis du viser din nuværende makro, er det lettere at hjælpe dig. Ingen kan vide, hvordan din nuværende makro ser ud - det kommer an på, hvad du præcis har lavet under optagelsen.
Har du prøvet at optage, hvor du i Søg og erstat vælger "Erstat alle"?
En optaget makro er sjældent optimal, men måske det kan gå an i denne situation.
Der er brug for lidt opklaring: Det, makroen laver, passer ikke rigtigt med din første forklaring. Som jeg læser din første forklaring, skal ”klik” erstattes med ”klik******” alle steder.
Du skrev, at der skulle indsættes ****** efter det fundne, men du indsætter # ¨(og ikke kun efter ordet ”klik”) - hvad skal der indsættes?
Skal makroen kun finde forekomster af ordet ”klik” i tabellen og ikke i hele dokumentet?
Hvis ja, er markøren i tabellen, når makroen skal køres? (din makro starter med at flytte markøren til starten af dokumentet).
Skal makroen finde noget, hvor ”klik” er en del at et ord, f-eks. ”klikke” eller ”beklikke”?
Er der nogen speciel formatering i tabellen eller er alt formateret på samme måde?
Dokumentet består af 1 stor tabel på 5 kolonner * xxx rækker. Ja markøren står i dokumentet ved opstart,
Den første forklaring var ikke god nok. Makroen skal finde ordet "klik" (findes ikke i andre variationer (kikke, klikker etc). Når den finder ordet klik hopper den et antal rækker tilbage. Herefter sætter den et # i hver række og hoppe videre til næste række.
Ja, det var jo en noget anden funktionalitet end først beskrevet ;-)
Forudsætningen for, at man kan lave en makro, som gør noget totalt styret, er, at det er soleklart, hvad der skal ske, og hvad udgangspunktet er. En makro gør lige præcis det, koden i den siger, den skal gøre – hverken mere eller mindre.
Din makrokode hopper ikke et antal rækker tilbage. Den finder første ”klik” og sletter sidste k deri. Derefter hopper den 7 celler til venstre - fortsætter i sidste celle i forrige række, når første celle i en række er nået, men hvis f.eks. det fundne "klik" er i første celle i tabellen, hopper den slet ingen steder, da der ikke er nogen celle til venstre. Derefter indsætter den # i den celle, den er nået til – den _overskriver_ indholdet i cellen med #, dvs. at evt. andet indhold i cellen slettes. Derefter hopper koden 5 celler til højre og overskriver cellens indhold med #. Da der er 5 kolonner ifølge din forklaring, vil det være i samme kolonne, som første # blev indsat i, men i rækken under. Dette gentages endnu én gang. Koden slutter med at rykke 4 celler til venstre uden af foretage noget.
Hvis der skal laves ordentlig kode, som ikke laver noget tilfældigt, er du nødt til at forklare præcist, hvad koden skal gøre. Er det f.eks. meningen, at # skal overskrive indhold i alle celler eller et bestemt antal celler lige under ”klik” (dvs. i samme kolonne) eller???
Står der ”klik” på vilkårlige steder i tabellen?
Måske du kan sende mig dokumentet, så jeg kan se indholdet sammen med en forklaring på, hvad du præcis vil opnå? (LF [at] thedoctools.com).
Jeg har set på det tilsendte dokument og på baggrund af det + spørgsmål stillet via e-mail har jeg lavet en makro, som gør, hvad du har efterspurgt. Der er meget langt fra den oprindelige beskrivelse af problemet og den makro, du have optaget, til løsningen her ;-).
Aht. andre, som måske ser denne tråd: Det viste sig, at målet reelt var: Find ”klik”, find en startrække, som er række nr. 67 FØR det fundne og slet i alt 79 (eller 80?) rækker fra startrækken og ned. Gentag, til der ikke findes flere ”klik”. Ifølge forklaringen, jeg har fået, vil der altid være tale om samme antal rækker, der skal slettes. Men jeg erfarede, at der ved sidste ”klik” i dokumentet IKKE er så mange rækker – derfor er der i makroen taget højde for dette.
Du kan bruge F8 til at steppe gemme én makrolinje ad gangen, mens du tester. Kodelinjerne, som står helt til venstre, og som indeholder ”.Select” er indsat for, at du ved at steppe gennem koden med F8 i makroeditoren kan se, hvilke rækker, der bliver udvalgt til at blive slettet – du kan slette de kodelinjer, når du har tjekket, at de rigtige rækker bliver markeret. Da rækkenumrene i dokumentet viste sig ikke at være fortløbende (manglende numre), skal du muligvis rette tallene 67 og 78 i koden, så det passer.
------------------MAKRO START------------------
Sub FindKlikDeleteRows() 'Find "klik" og slet i alt 79 (evt. 80?) rækker, startende 67 rækker før det fundne Dim oTable As Table Dim rngDelete As Range Dim lngRowIndex_First As Long
Set oTable = ActiveDocument.Tables(1)
RepeatFind: Set rngDelete = oTable.Range.Duplicate
rngDelete.Select With rngDelete.Find .ClearFormatting .Replacement.ClearFormatting
'udvid rngDelete til at start 68 rækker før og indeholde i alt 80 rækker lngRowIndex_First = .Rows(1).Index - 67 '"klik"-rækker er allerede med .Start = oTable.Rows(lngRowIndex_First).Range.Start .Select 'hvis der er rækker nok til at udvide med 78, så gør det - eller til sidst i tabellen If oTable.Rows.Count >= lngRowIndex_First + 78 Then .End = oTable.Rows(lngRowIndex_First + 78).Range.End Else .End = oTable.Range.End End If .Select 'rngDelete indeholder nu alle de 80 rækker - slet dem .Rows.Delete End With
'fortsæt søgning GoTo RepeatFind Else 'ikke fundet "klik" GoTo ExitHere End If
ExitHere: 'ryd op i Søg og erstat dialogboks .Replacement.Text = "" End With End Sub ------------------MAKRO SLUT------------------
Stor tak til Lene for løsningen. DXen virker fint, selvom jeg ikke helt kan gennemskue hvad den laver :)
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.