28. juli 2005 - 10:42Der 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 :)
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.
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 ****************************
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> *************************
**************************** 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.
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.
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.