AW: Variablen, Objekt, Prozedur zu groß, Verweisfehler
21.12.2015 09:24:33
Thomas
Hallo,
ich wollte die Frage nicht sprengen aber hier in Auschnitten der Code:
Dim TmpVar(0 To 5000) As String
Dim TmpVari(1 To 50) As String
Dim wdApp As Object
Dim wdDoc As Object
'Dim TmpVar(0 To 1000) As String
'Dim TmpVar(500 To 1500) As String
'Dim TmpVar(1000 To 2000) As String
'Dim TmpVar(1500 To 2500) As String
'Dim TmpVar5(2000 To 3000) As String
' Die Routinen eine nach der Anderen aufrufen und die Variablen bleiben erhalten
Sub Gen_Var()
' Generate Variables
TmpVar(1) = Sheets("Data entry").Range("d5").Value
TmpVar(2) = Sheets("Data entry").Range("e5").Value
TmpVar(3) = Sheets("Data entry").Range("f5").Value
TmpVar(4) = Sheets("Data entry").Range("d6").Value
TmpVar(5) = Sheets("Data entry").Range("e6").Value
TmpVar(6) = Sheets("Data entry").Range("f6").Value
TmpVar(7) = Sheets("Data entry").Range("f7").Value
.... und so weiter für alle Zellen die übertragen werden müssen
TmpVar(510) = Sheets("Results").Range("q23").Value
TmpVar(511) = Sheets("Results").Range("q44").Value
TmpVar(512) = Sheets("Results").Range("q65").Value
Gen_Var1
End Sub
Sub Gen_Var1()
' Resident beginn
TmpVar(513) = Sheets("Results").Range("ad3").Value
TmpVar(514) = Sheets("Results").Range("ae3").Value
TmpVar(515) = Sheets("Results").Range("ap3").Value
.... und so weiter für alle Zellen die übertragen werden müssen insgesamt 5 Blöcke
.... das funktioniert auch wunderbar
.... die Variablen bleiben erhalten und werden wunderbar ausgelesen.
TmpVar(2149) = Sheets("Results").Range("am65").Value ' Resident Active 3 Sum adult Crop _
21
TmpVar(2150) = Sheets("Results").Range("ab65").Value ' Resident Active 3 Sum child Crop 21
Var_Tausch
End Sub
Sub Var_Tausch()
Set wdApp = CreateObject("Word.application")
Set wdDoc = wdApp.Documents.Open(Filename:=Application.ActiveWorkbook.Path & "\template.docx")
wdApp.Visible = True ' show Word document
With wdDoc.Content.Find
.Execute findtext:="TmpVar(1)", replacewith:=TmpVar(1), Replace:=wdReplaceAll ' Active
Sub 1
.... und so weiter für alle Zellen die übertragen werden müssen
End With
TmpVari(1) = Format(Date, "yyyymmdd") & " " & Format(Time, "hhmmss") & " " & " - " & TmpVar(7)
wdDoc.SaveAs Filename:=Application.ActiveWorkbook.Path & "\" & TmpVari(1) & ".docx"
MsgBox ("File saved in directory: ") & vbCrLf & Application.ActiveWorkbook.Path & vbCrLf & " _
with filename: " & vbCrLf & TmpVari(1) & ".docx"
wdApp.Quit
Set wdDoc = Nothing
Set wdApp = Nothing
Var_Tausch1
End Sub
....Und hier im zweten Block der Tauschaktion laufe ich in den Verweisfehler
Sub Var_Tausch1()
Set wdApp = CreateObject("Word.application")
Set wdDoc = wdApp.Documents.Open(Filename:=Application.ActiveWorkbook.Path & "\" & TmpVari1 & ". _
docx")
wdApp.Visible = True ' show Word document
' Beginn
.Execute findtext:="TmpVar(513)", replacewith:=TmpVar(513), Replace:=wdReplaceAll
.Execute findtext:="TmpVar(514)", replacewith:=TmpVar(514), Replace:=wdReplaceAll
End with
End Sub
.... etc. es sollen alle anderen getauscht werden alles geschlossen und ich hätte ein fertiges Word Dokument.
Zu
Weißt du die Variablen alle einzeln zu? Da wäre man ja schneller, wenn man in Word die Begriffe per Hand ersetzt, als den Code zu schreiben.
Ja. Ich erstellen quasi aus einer komplexen Berechnung ein Sheet mit den Ergebnissen.
Diese lese ich mit meinem Makro aus und übertrage sie nach Word.
Um die weiderkehrenden Berechnungen ohne Fehle zu übertragen der Versuch der Automation.
Ich hoffe es ist jetzt etwas klarer. Vielen Dank schonmal.
Gruß Thomas