Avatar billede Claus Mester
25. juni 2007 - 13:02 Der er 5 kommentarer og
1 løsning

VBA Word: Find tal og slet

Hej Eksperter
Har puslet lidt med den her, men har glemt for meget af VBA til at løse den.

Jeg har et word dokument, indeholdende 34 sider med manuel talnummerering, efterfulgt af en talsekvens og noget tekst.

Jeg ønsker, at slette alle de manuelle talnummereringer og indsætte words egen autonummerering i stedet, via en makro, så jeg slipper for selv at skulle sidde og slette hver enkelt nummerering og definere autonummerering.

En typisk sekvens kunne se således ud:

___TYPISK SEKVENS___

1
00:00:05,826 --> 00:00:07,987
TEKST

2
00:00:59,446 --> 00:01:01,175
TEKST
3
00:01:04,017 --> 00:01:05,985
TEKST

4
00:01:09,623 --> 00:01:14,083
TEKST
TEKST

5
00:01:14,828 --> 00:01:19,697
TEKST
TEKST
TEKST

___TYPISK SEKVENS SLUT___

Tallene 1,2,3,4,5 ... skal altså slettes og erstattes af autonummerering.

Jeg har lavet følgende kode, der desværre ikke tager højde for om det er tekst, eller talsekvenserne (00:00:01,00). Så den sletter bare derud af.

nicolaus
Avatar billede Claus Mester
25. juni 2007 - 13:03 #1
Sub Slet_tal()
Again:
Selection.EndKey Unit:=wdLine, Extend:=wdExtend

Select Case Selection.Text
  Case Is > 1
  'MsgBox "Ikke tom"
  Number = Number + 1
  Case Else
  'MsgBox "Tom"
  Selection.MoveLeft Unit:=wdCharacter, Count:=1
  Selection.MoveDown Unit:=wdLine, Count:=1
  GoTo Again
End Select

Selection.MoveLeft Unit:=wdCharacter, Extend:=wdExtend, Count:=1

Selection.Delete , Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveDown Unit:=wdLine, Count:=4
End Sub
Avatar billede word-hajen Nybegynder
28. juni 2007 - 19:02 #2
Står selve nummereringen (altså dem, du skal have fjernet) i en linje for sig selv? Og har du gjort dig nogle tanker om, hvordan du vil have autonummereringen til at virke?
Avatar billede Claus Mester
06. juli 2007 - 07:14 #3
Tak for respons.

Jeg har, i mellemtiden konstrueret denne kode, der virker ok:

___ kode ____

Sub Slet_tal()
(variabler)

<!-- fortsæt indtil et tal som brugeren har valgt er nået -->

Do Until Number = CountTo
Selection.EndKey Unit:=wdLine, Extend:=wdExtend

<!-- Tester om teksten er et tal (tekst returnerer i 0 -->

Select Case Val(Selection.Text)
  Case Is >= 1
  Case Else
  GoTo Again
End Select

<!-- Sammenligner det aktuelle tal med det foregående; lig med, mindre end eller større end sidste tal + 1.

Select Case Val(Selection.Text)
  Case Is = Number
  Case Is < Number
  Case Is > Number + 1
  Case Else
  Taeller = Taeller + 1
  Number = Number + 1
  Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
  Selection.Text = Taeller
End Select

Again:
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveDown Unit:=wdLine, Count:=1
Loop

End Sub

___ kode slut ___

Det virker, men har et par forskellige bugs jeg som alene bruger, bare er opmærksom på. Men det kan sikkert konstrueres noget mere effektivt.

nicolaus
Avatar billede Claus Mester
11. juli 2007 - 00:20 #4
Scriptet virker ok, så jeg lukker.
word-hajen: jeg vil godt give dig lidt point for deltagelse, hvis du smider et svar :)
Avatar billede word-hajen Nybegynder
11. juli 2007 - 08:23 #5
Tak, men med min minimale indsats er det nu ikke nødvendigt. Du har selv løst det uden input fra mig (men tak for tanken).
Avatar billede Claus Mester
11. juli 2007 - 09:16 #6
Allright .. Men tak for respons:)
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
Kategori
Kurser inden for grundlæggende programmering

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