PDA

View Full Version : Call word from excel



thieltgj
02-13-2006, 05:41 AM
Hello!

My macro doesn`t work, maybe anyone could help me???
I have to write a macro in Excel, that should open a Word document,
looking for a word (last month) and replace it with the actual month. (My code has problems with the selection and search)
Then it should replace numbers in the word document against numbers from my excel sheet.
Please help me!!!

Sub Word()
Dim wdAnw As Object
Dim wdDok As Object

Application.ScreenUpdating = False

letztes_datum = InputBox("Bitte geben sie das letzte Pr?fdatum ein, " & _
"damit der Monat durch den aktuellen Monat ersetzt " & _
"werden kann!", "letztes Pr?fdatum", 6250, 6150)
letzter_monat = Monat(letztes_datum)
akt_datum = Date
akt_monat = Monat(akt_datum)

If letzter_monat = 1 Then
letzter_monat = "Januar"
ElseIf letzter_monat = 2 Then
letzter_monat = "Februar"
ElseIf letzter_monat = 3 Then
letzter_monat = "M?rz"
ElseIf letzter_monat = 4 Then
letzter_monat = "April"
ElseIf letzter_monat = 5 Then
letzter_monat = "Mai"
ElseIf letzter_monat = 6 Then
letzter_monat = "Juni"
ElseIf letzter_monat = 7 Then
letzter_monat = "Juli"
ElseIf letzter_monat = 8 Then
letzter_monat = "August"
ElseIf letzter_monat = 9 Then
letzter_monat = "September"
ElseIf letzter_monat = 10 Then
letzter_monat = "Oktober"
ElseIf letzter_monat = 11 Then
letzter_monat = "November"
ElseIf letzter_monat = 12 Then
letzter_monat = "Dezember"
End If

If akt_monat = 1 Then
akt_monat = "Januar"
ElseIf akt_monat = 2 Then
akt_monat = "Februar"
ElseIf akt_monat = 3 Then
akt_monat = "M?rz"
ElseIf akt_monat = 4 Then
akt_monat = "April"
ElseIf akt_monat = 5 Then
akt_monat = "Mai"
ElseIf akt_monat = 6 Then
akt_monat = "Juni"
ElseIf akt_monat = 7 Then
akt_monat = "Juli"
ElseIf akt_monat = 8 Then
akt_monat = "August"
ElseIf akt_monat = 9 Then
akt_monat = "September"
ElseIf akt_monat = 10 Then
akt_monat = "Oktober"
ElseIf akt_monat = 11 Then
akt_monat = "November"
ElseIf akt_monat = 12 Then
akt_monat = "Dezember"
End If

Application.ActivateMicrosoftApp xlMicrosoftWord

Const pfad = "M:\Investment-Controlling\privat\Judith\Monatsreport_Performance_2006.doc"

Set wdDok = GetObject(pfad)
Set wdAnw = wdDok.Parent
wdAnw.Visible = True
wdAnw.WindowState = 1
wdDok.Activate

....??????
Selection.Find.ClearFormatting '??
With Selection.Find
.Text = "Januar"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
With Selection.Find
.Text = "Januar"
.Replacement.Text = "Februar"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End Sub


Function Monat(Datum)
Monat = Month(Datum)
End Function

Greetings, Judith

Norie
02-13-2006, 08:42 AM
Judith

The way you have referred to the Selection I think will actually refer to the current selection in Excel, not Word.

geekgirlau
02-13-2006, 09:49 PM
Sub Word()
Dim wdAnw As Object
Dim wdDok As Object

Application.ScreenUpdating = False

letztes_datum = InputBox("Bitte geben sie das letzte Pr?fdatum ein, " & _
"damit der Monat durch den aktuellen Monat ersetzt " & _
"werden kann!", "letztes Pr?fdatum", 6250, 6150)

letzter_monat = Monat(letztes_datum)
akt_datum = Date
akt_monat = Monat(akt_datum)

Select Case letzter_monat
Case 1: letzter_monat = "Januar"
Case 2: letzter_monat = "Februar"
Case 3: letzter_monat = "M?rz"
Case 4: letzter_monat = "April"
Case 5: letzter_monat = "Mai"
Case 6: letzter_monat = "Juni"
Case 7: letzter_monat = "Juli"
Case 8: letzter_monat = "August"
Case 9: letzter_monat = "September"
Case 10: letzter_monat = "Oktober"
Case 11: letzter_monat = "November"
Case 12: letzter_monat = "Dezember"
End Select

Select Case akt_monat
Case 1: akt_monat = "Januar"
Case 2: akt_monat = "Februar"
Case 3: akt_monat = "M?rz"
Case 4: akt_monat = "April"
Case 5: akt_monat = "Mai"
Case 6: akt_monat = "Juni"
Case 7: akt_monat = "Juli"
Case 8: akt_monat = "August"
Case 9: akt_monat = "September"
Case 10: akt_monat = "Oktober"
Case 11: akt_monat = "November"
Case 12: akt_monat = "Dezember"
End Select

Application.ActivateMicrosoftApp xlMicrosoftWord

Const pfad = "M:\Investment-Controlling\privat\Judith\Monatsreport_Performance_2006.doc"

Set wdDok = GetObject(pfad)
Set wdAnw = wdDok.Parent

wdAnw.Visible = True
wdAnw.WindowState = 1

With wdDok
.Activate

.Selection.Find.ClearFormatting '??

With .Selection.Find
.Text = "Januar"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With

.Selection.Find.Execute

With .Selection.Find
.Text = "Januar"
.Replacement.Text = "Februar"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End With

Set wdDok = Nothing
Set wdAnw = Nothing
End Sub

Function Monat(Datum)
Monat = Month(Datum)
End Function

Jacob Hilderbrand
02-14-2006, 12:06 AM
Just an observation, we can get rid of a lot of lines of code.

All this code:

If letzter_monat = 1 Then
letzter_monat = "Januar"
ElseIf letzter_monat = 2 Then letzter_monat = "Februar"
ElseIf letzter_monat = 3 Then
letzter_monat = "M?rz"
ElseIf letzter_monat = 4 Then
letzter_monat = "April"
ElseIf letzter_monat = 5 Then
letzter_monat = "Mai"
ElseIf letzter_monat = 6 Then
letzter_monat = "Juni"
ElseIf letzter_monat = 7 Then
letzter_monat = "Juli"
ElseIf letzter_monat = 8 Then
letzter_monat = "August"
ElseIf letzter_monat = 9 Then
letzter_monat = "September"
ElseIf letzter_monat = 10 Then
letzter_monat = "Oktober"
ElseIf letzter_monat = 11 Then
letzter_monat = "November"
ElseIf letzter_monat = 12 Then
letzter_monat = "Dezember"
End If

If akt_monat = 1 Then
akt_monat = "Januar"
ElseIf akt_monat = 2 Then
akt_monat = "Februar"
ElseIf akt_monat = 3 Then
akt_monat = "M?rz"
ElseIf akt_monat = 4 Then
akt_monat = "April"
ElseIf akt_monat = 5 Then
akt_monat = "Mai"
ElseIf akt_monat = 6 Then
akt_monat = "Juni"
ElseIf akt_monat = 7 Then
akt_monat = "Juli"
ElseIf akt_monat = 8 Then
akt_monat = "August"
ElseIf akt_monat = 9 Then
akt_monat = "September"
ElseIf akt_monat = 10 Then
akt_monat = "Oktober"
ElseIf akt_monat = 11 Then
akt_monat = "November"
ElseIf akt_monat = 12 Then
akt_monat = "Dezember"
End If



Can be replaced with this code:


letzter_monat = Format(DateSerial(1, letzter_monat, 1), "mmmm")
akt_monat = Format(DateSerial(1, akt_monat, 1), "mmmm")


I do not know if these functions are valid with the language version of Excel that you have (German?), but they should have an equivalent.

geekgirlau
02-14-2006, 04:15 AM
Good pickup Jake - I didn't even think of it!