Avatar billede stinepigen Nybegynder
28. juli 2005 - 10:42 Der er 7 kommentarer og
1 løsning

Word VBA problemer

Hej eksperter

Jeg har tidligere fået hjælp til at starte på et lille projekt i Word VBA (se spørgsmål: "Macro i word" i samme kategori), men nu er jeg rendt ind i lidt problemer igen.
Det skal lige siges at jeg INTET kender til VBA, så jeg er lidt på gyngende grund her.

Jeg har et dokument på ca. 80 sider, hvor de samme variable går igen og igen. De er noteret således: <environment> og <username> og så videre.

Jeg har oprettet en userform, der åbner når brugeren åbner dokumentet. Her har han så mulighed for at udfylde de rigtige værdier der skal udskiftes hele vejen ned i dokumentet.

Jeg har indtil videre brugt bookmarks til at vise hvilke variabler der skal udskiftes (som jeg fik hjælp til sidst).

Jeg er så løbet ind i 2 problemer.
Kan man bookmarke mere end ét sted i dokumentet med det samme bookmarknavn?
Hvis man kan, så kommer mit ene problem. Der er ca 100-200 forekomster af hver variable ned igennem dokumentet.

Det har jo fået mig til at kigge på en anden løsning:
At søge efter variablerne i dokumentet og erstatte dem.
jeg er så kommet frem til det her, der i øvrigt ikke virker :p

Public Sub SeekReplaceVars()
    With ActiveDocument.Content.Find
        .ClearFormatting
        .Text = "<environment>"
        With Replacement
            .Text = "<environment> skal så replaces med det der er indtastet i userformen"
        End With
        .Execute Replace:=wdReplaceAll
    End With
End Sub

Jeg kan ikke finde ud af:
            ".Text = "<environment> skal så replaces med det der er indtastet i userformen"

Hvordan gør man det?
Er det helt hen i vejret det jeg har fået lavet?
I så fald: hva så? :)

Jeg vil gerne give en hel del point til den/dem der vil hjælpe mig til ende med det her :)
Avatar billede brynil Nybegynder
28. juli 2005 - 15:52 #1
Jeg havde egentlig forestillet mig, at du definerede dine variable som Public som vist i det tidligere indlæg.

Det jeg tænker på er, at de variable du allerede benytter i dit dokument, bliver defineret som Public og ikke lokalt.

Din UserForm bruger du så til at tildele værdier til dine variable og i forlængelse heraf kører du din gamle kode som også kan læse værdien fra en Public variabel.

Hvordan er koden i dit dokument bygget op?
Avatar billede stinepigen Nybegynder
29. juli 2005 - 11:05 #2
Jeg har stadig public variable. (Har dog glemt at kopiere dem med ind).

***************************
Module
***************************
Public env As String
Public use As String

Public Sub SeekReplaceVars()
    With ActiveDocument.Content.Find
        .ClearFormatting
        .Text = "<environment>"
        With Replacement
            .ClearFormatting
            .Text = "<environment> skal så replaces med det der er indtastet i userformen"
        End With
        .Execute Replace:=wdReplaceAll
    End With
End Sub

******************************

******************************
Userform
******************************
Private Sub cancel_Click()
    Unload Me
    ActiveDocument.Close SaveChanges:=False
End Sub

Private Sub ComboDBAbox_Change()
   
End Sub

Private Sub Environmentbox_Change()

End Sub

Private Sub setvarOk_Click()
    user = Userbox.Text
    environm = Environmentbox.Text
    dba = ComboDBAbox.Text
    Application.Run "SeekReplaceVars"
End Sub

Private Sub UserForm_Initialize()
    With ComboDBAbox
        .AddItem "navn1"
        .AddItem "navn2"
        .AddItem "navn3"
        .AddItem "navn4"
    End With
End Sub
****************************

****************************
thisDocument
****************************

Private Sub Document_Open()
    selectVarform.Show
End Sub
***************************

Hvis jeg forstår det du skriver, skal jeg stadig bruge bookmarks, som du viste mig tidligere. Kan du vise mig et eksempel, hvor man udskifter 2 steder i et dokument? For det kan jeg ikke få til at virke med bookmarks.

F.eks.
**********************
Eksempel
************************

bla bla bla <username>
bla bla bla
Dette er en test <environment> som skal vise om der kan udskiftes 2 variabler af gangen.
<environment>
<username>
*************************
Avatar billede stinepigen Nybegynder
29. juli 2005 - 12:42 #3
Nu har jeg lavet det om, sådan som du foreslog.

****************************
Public enviro As String
Public user As String

Public Sub SeekReplaceVars()
  ActiveDocument.Bookmarks("Username").Range.Text = user
  ActiveDocument.Bookmarks("Environment").Range.Text = enviro
End Sub
****************************
Private Sub setvarOk_Click()
    user = Userbox.Text
    enviro = Environmentbox.Text
    dba = ComboDBAbox.Text
    Application.Run "SeekReplaceVars"
End Sub
*****************************

Det her kan udskifte 1 forekomst af det jeg vil have udskiftet i dokumentet, da jeg ikke kan få den til at bookmarke flere forskellige steder med det samme bookmark navn.

What to do?
Avatar billede brynil Nybegynder
29. juli 2005 - 16:13 #4
Er det noget a la dette du skal bruge:

I din UserForm-kode (2 tekstbokse, 1 commandbutton) skal der stå således:

Public usr, env As String

Private Sub CommandButton1_Click()
usr = TextBox1.Text
env = TextBox2.Text

Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
    .ClearFormatting
    .Text = "<username>"
    With .Replacement
        .ClearFormatting
        .Text = usr
    End With
    .Execute Replace:=wdReplaceAll, _
        Format:=True, MatchCase:=True, _
        MatchWholeWord:=True
End With

Set myRange = ActiveDocument.Range(Start:=0, End:=0)
With myRange.Find
    .ClearFormatting
    .Text = "<environment>"
    With .Replacement
        .ClearFormatting
        .Text = env
    End With
    .Execute Replace:=wdReplaceAll, _
        Format:=True, MatchCase:=True, _
        MatchWholeWord:=True
End With
End Sub

Skriv <username> og <environment> forskellige steder i et dokument og kør. Husk userform1.show.
Avatar billede brynil Nybegynder
29. juli 2005 - 16:45 #5
Jeg tror ikke der skulle blive problemer med at droppe dine public variabler og istedet udskifte:

  .Text = usr  (hhv  env)

med

  .Text = TextBox1.Text  (hhv TextBox2.Text)
Avatar billede stinepigen Nybegynder
09. august 2005 - 12:09 #6
Jeg vil lige kigge på det :)

Har været på ferie, så undskyld jeg ikke har svaret :)
Avatar billede stinepigen Nybegynder
09. august 2005 - 12:54 #7
Tusind tak.
Det er lige præcis det jeg skal bruge :)

Vil du sende et svar, så jeg kan komme af med pointene? :)
Avatar billede brynil Nybegynder
09. august 2005 - 15:39 #8
Ok tak - og god arbejdslyst :))
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