Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Frage zum Makroprogramm
zurück: Druckerprofil unter Word automatisch laden weiter: automatischer Makrostart mit Häufigkeit Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Fischauto
Gast


Verfasst am:
28. Aug 2006, 16:54
Rufname:

Frage zum Makroprogramm - Frage zum Makroprogramm

Nach oben
       

Hallo Makroexperten in Word,

ich bin hier neu im Word-Forum. Mit meinen VBA-Kenntnissen in Word ist es nicht zum besten bestellt.

Ich habe hier ein Makroprogramm mit folgendem Code

Sub Datenübertragung13()
Dim strStzahl1

strStzahl1 = Worksheets("13").Range("A96").Value
strStzahl2 = Worksheets("13").Range("A97").Value

Dim ww As Object

If Err.Number = 429 Then
Set ww = GetObject(, "Word.Application")
Else
Set ww = CreateObject("Word.application")
End If

ww.Visible = True
ww.Documents.Add ("C:\Allgemein\Vorlagen\A.doc")

If .ActiveDocument.FormFields("Stückzahl1").Result = "0" then
Call TextblocklöschenA
else
.ActiveDocument.FormFields("Stückzahl1").Result = strStückzahl1
End if
.ActiveDocument.FormFields("Stückzahl2").Result = strStückzahl2

End With
End Sub

Mit diesem Programm habe ich Excel mit Word miteinander verbunden, d.h Excelwerte werden in Textformularfelder in Word übernommen. Nun möchte ich folgendes. Wenn die Excelzelle (Range("A96") null ist und somit das Textformular ebenfalls null ist, so soll das unten stehenden Makro 'TextblocklöschenA' ausgeführt werden. Das Makro 'TextblocklöschenA' ist in dem Worddokument installiert und wurde mit dem Makrorecorder aufgezeichnet.

Sub TextblocklöschenA()
Selection.MoveDown Unit:=wdLine, Count:=35
Selection.MoveDown Unit:=wdLine, Count:=23, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1
End Sub
Das Programm funzt wunderbar ohne den Part:
If .ActiveDocument.FormFields("Stückzahl1").Result = "0" then
Call TextblocklöschenA
else
.ActiveDocument.FormFields("Stückzahl1").Result = strStückzahl1
End if

Kann mir jemand bei meinem Problem helfen?

Gruß

Uli

Die Frage habe ich im Excel-Center Forum- Rubrik Word gestellt, aber keine Antwort erhalten.
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
28. Aug 2006, 23:30
Rufname:
Wohnort: Leipzig


AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Uli,

an sich sieht das nicht schlecht aus. Möglicherweise springt TextblocklöschenA nicht an, weil der Formularschutz eingeschaltet ist. Wenn das so ist, dann muss dieser zunächst ausgeschaltet werden, dann der Text gelöscht, danach wieder eingeschaltet werden.
Alternativ könnte der Text auch belassen und lediglich versteckt (Hide) werden. Damit behält man die Möglichkeit, ihn später wieder einzublenden.
Es könnte also etwa so aussehen:
Code:
Sub TextblocklöschenA()

    If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
        ActiveDocument.Unprotect
    End If

    With Selection
        .MoveDown Unit:=wdLine, Count:=35
        .MoveDown Unit:=wdLine, Count:=23, Extend:=wdExtend
        .Delete Unit:=wdCharacter, Count:=1
'        .Font.Hidden = True    'diese Zeile "versteckt", dann Delete natürlich herausnehmen
        .Collapse wdCollapseEnd
    End With

    ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

End Sub

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Fischauto
Gast


Verfasst am:
29. Aug 2006, 07:54
Rufname:

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

vielen Dank für Deine Codes, die ich heute morgen ausprobiert habe.
Allerdings meldet sich der Debugger ' Objekt erforderlich'.
Ich habe folgendes ausprobiert. Das Makro, das vom Makrorecorder aufgezeichnet wurde, und im Doc.Dokument hinterlegt ist unter 'New Makros' , habe ich einen Button unter 'Anpassen' in die Befehlsleiste hinterlegt. Und das Makro wird ordnungsgemäß ausgeführt. Auch Deine Codes funzen.
Nur, wie schon beschrieben, wenn die Codes in das Makro ' Datenübertragung13 integriert werden, meldet der Debugger ' Objekt erforderlich'.
Vielleicht liegt es daran, dass das Makro 'Datenübertragung13' von Excel aus gestartet wird.

Danke nochmal für Deine Hilfe.

Gruß

Uli
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
29. Aug 2006, 10:27
Rufname:
Wohnort: Leipzig

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Uli,

ja, natürlich, daran liegt es. Bei Dir steht ja auch ein Punkt vor ActiveDocument, d. h. es wird auf das Word-Objekt Bezug genommen. Ich hatte den Beginn der With-Anweisung nicht gesehen (steht nicht in Deinem Code, nur das Ende).
Entweder reicht es bereits, vor ActiveDocument noch Word.Application zu setzen, müsstest Du probieren, also jeweils:
Code:
Word.Application.ActiveDocument
...

Ansonsten evtl. beim Aufruf der Löschen-Prozedur als Argument das Word-Objekt mit übergeben.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Fischauto
Gast


Verfasst am:
29. Aug 2006, 11:45
Rufname:


AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

danke Dir für Deine Antwort, aber das kann auch nicht sein.

Hier nochmal mein kompletter Code. Diesmal mit With ww. Hatte ich tatsächlich vergessen

Sub Datenübertragung13()
Dim strStzahl1

strStzahl1 = Worksheets("13").Range("A96").Value
strStzahl2 = Worksheets("13").Range("A97").Value

Dim ww As Object

If Err.Number = 429 Then
Set ww = GetObject(, "Word.Application")
Else
Set ww = CreateObject("Word.application")
End If

ww.Visible = True
ww.Documents.Add ("C:\Allgemein\Vorlagen\A.doc")

With ww
If .ActiveDocument.FormFields("Stückzahl1").Result = "0" then
Call TextblocklöschenA
else
.ActiveDocument.FormFields("Stückzahl1").Result = strStückzahl1
End if
.ActiveDocument.FormFields("Stückzahl2").Result = strStückzahl2

End With
End Sub

Mit ww ist Word.Application erschlagen, sodass man nur einmal die Anweisung schreiben muß. Deshalb der Punkt.

Nach wie vor meldet sich der Debugger 'Objekt nicht vorhanden'.

Gruß

Uli
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
29. Aug 2006, 12:25
Rufname:
Wohnort: Leipzig

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Uli,

OK, hatte ich vorhin nicht gut formuliert. In der Hauptprozedur ist alles klar, da gibt es das Objekt ww. Dann wird jedoch mit
Code:
Call TextblocklöschenA

eine neue Prozedur aufgerufen und keine Argumente übergeben. Die neue Prozedur "weiß" nichts von dem Objekt. Dort muss vor ActiveDocument ein Objekt steht. ActiveDocument funktioniert als Objektverweis nur, solange man in Word bleibt. Da Du die Prozedur aus Excel startest, fehlt jetzt der Objektverweis.
  1. Also ich würde die Prozedur mal so probieren:
    Code:
    Sub TextblocklöschenA()

        If Word.Application.ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
            Word.Application.ActiveDocument.Unprotect
        End If

        With Selection
            .MoveDown Unit:=wdLine, Count:=35
            .MoveDown Unit:=wdLine, Count:=23, Extend:=wdExtend
            .Delete Unit:=wdCharacter, Count:=1
    '        .Font.Hidden = True    'diese Zeile "versteckt", dann Delete natürlich herausnehmen
            .Collapse wdCollapseEnd
        End With

        Word.Application.ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

    End Sub

    Also probier mal aus. (Ich kann es jetzt nicht testen, muss gleich weg.)
  2. Sollte das noch nicht funktionieren, müsste ein Objektverweis beim Aufruf der Prozedur mitgegeben werden. Die Prozedur könnte dann etwa heißen:
    Code:
    TextblockLöschenA(ByRef ww As Object)

    Der Aufruf wäre dann etwa so:
    Code:
    Call TextblockLöschenA(ww)

Ich melde mich heute abend sicher nochmal.

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Fischauto
Gast


Verfasst am:
29. Aug 2006, 14:39
Rufname:

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

danke Dir für Deine Unterstützung. Immer noch meldet sich der Debugger ' Objekt erforderlich'.
Ich habe alle von Dir vorgeschlagenen Tipps ausprobiert, aber wie immer meldet sich der Debugger. Ich werd zum Hirsch hier.
Aber vielleicht mache ich ja was verkehrt. Hier eine Zusammenfassung meiner Vorgehensweise.
Das Makro 'TextblocklöschenA' ist im Modul der Excelliste untergebracht.
Probiert habe ich auch das Makro in das Doc.Dokument unter 'New Makros'. Aber auch nichts.

Dann habe ich den von Dir vorgeschlagenen Verweis gemacht:

Sub TextblockLöschenA(ByRef ww As Object)

If Word.Application.ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
Word.Application.ActiveDocument.Unprotect
End If

With Selection
.MoveDown Unit:=wdLine, Count:=35
.MoveDown Unit:=wdLine, Count:=23, Extend:=wdExtend
.Delete Unit:=wdCharacter, Count:=1
' .Font.Hidden = True 'diese Zeile "versteckt", dann Delete natürlich herausnehmen
.Collapse wdCollapseEnd
End With

Word.Application.ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True

End Sub

Und habe dann die Anweisung im Makro' Datenübertragung13' dieses geändert

With ww
If .ActiveDocument.FormFields("Stückzahl1").Result = "0" then
Call TextblockLöschenA(ww)
else
.ActiveDocument.FormFields("Stückzahl1").Result = strStückzahl1


Hier bleibt der Debugger stehen:
If .ActiveDocument.FormFields("Stückzahl1").Result = "0" then

Bis heute abend.

Gruß

Uli
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
30. Aug 2006, 18:36
Rufname:
Wohnort: Leipzig

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Uli,

hat doch noch einen Tag gedauert, gestern abend bin ich nicht mehr fertig geworden.
So, jetzt habe ich den Code (aus Excel heraus) probiert, also beide Prozeduren in Excel – es funktioniert einwandfrei. Dass es offenbar nicht das macht, was Du erwartest, hat andere Gründe. Beim Debuggen habe ich erstmal festgestellt, dass da wohl auch logische Fehler sind.
Deswegen mal Schritt für Schritt:
  • Ich verstehe das so, dass die Werte aus den beiden Excel-Zellen 96 und 97 in die Formularfelder in Word übertragen werden sollen? Das funktioniert bei mir mit dem Code. Allerdings wurden die Formularfelder in Word nicht mit den Variablen gefüllt (die Namen waren anders geschrieben! in Excel oben StrStzahl und Word StrStückzahl). Das habe ich jetzt angepasst, nun werden die Zahlen übertragen.
  • Was ich noch nicht verstehe ist, was da im Formular abgefragt wird. Du fragst nach, ob das Feld StrStzahl1 = "0" ist.
    Code:
    If ww.ActiveDocument.Formfields("Stückzahl1").Result = "0" then ...

    Solange das Formular noch leer ist, steht da nichts drin, also auch nicht 0. Soll das wirklich abgefragt werden, müsste es heißen:
    Code:
    If ww.ActiveDocument.Formfields("Stückzahl1").Result = "     " then ...

    Das sind 5 Leerzeichen (Default-Einstellung der Formularfelder) oder auch weniger Leerzeichen, wenn die Länge in Word begrenzt worden ist.
    In Deinem Beitrag oben steht allerdings, dass es von dem Wert in A96 abhängen soll:
    Uli hat folgendes geschrieben:
    Wenn die Excelzelle (Range("A96") null ist und somit das Textformular ebenfalls null ist, so soll das unten stehenden Makro 'TextblocklöschenA' ausgeführt werden.

    Das fragst Du aber gar nicht ab. Dann müsste die Bedingung heißen:
    Code:
    If strStzahl1 = 0 ((oder "0", falls es ein String ist, wie bei mir))

  • Das ist der dritte Punkt, die Variablen sind nicht sauber deklariert. Ich weiß ja nicht, was in A96 und A97 steht. Vielleicht steht da ja auch Text, dann muss es immer ein String sein. Dann könnte man auch abfragen:
    Code:
    If strStzahl1 = ""

    also ob er leer ist. Diese scheinbaren Kleinigkeiten sind wichtig, denn sie sorgen dafür, dass der Code bei Dir bis jetzt nicht zuverlässig funktioniert. Also sauber deklarieren, sind es definitiv Zahlen oder Strings.
  • Weiter fällt mir auf, dass mit ww.Documents.Add ("C:\Allgemein\Vorlagen\A.doc") ein neues Dokument erstellt wird. Ist das die Absicht? Oder wolltest Du ein bestehendes Dokument öffnen?
    In einem neuen Dokument, das aus der Vorlage A.doc erstellt wird, könnte z. B. das Formfield sowieso leer sein.
  • Möglicherweise ist auch das Makro in Word "vertauscht". Zuerst soll das Formfield strStzahl1 gefüllt und danach sein Wert abgefragt werden oder umgekehrt?
    In meinem Code habe ich den Word-Code jetzt dahin geändert, dass zuerst die beiden Felder gefüllt und dann der erste Wert getestet wird. Sollte er 0 sein, werden die Zeilen gelöscht/hidden.
  • Wenn der Code direkt in Excel steht, muss das Objekt ww übergeben werden, habe ich jetzt so gemacht.
  • Außerdem müssen die Word-Konstanten in ihre Integer-Werte „aufgelöst“ werden, da Excel die Konstanten nicht kennt. Habe ich auch gemacht. Alternativ könnte in Excel ein Verweis auf Word gesetzt werden, dann könnten die Konstanten drin bleiben.
  • Nach dem Ganzen müsste das Dokument und Word auch wieder geschlossen und das Objekt freigegeben werden (habe ich jetzt angedeutet).

So, ich hör jetzt erstmal auf, sonst wird der Thread zu lang. Bei mir läuft der Code genau so, wie er jetzt hier steht:
Code:
Option Explicit
Sub Datenübertragung13()

    Dim strStzahl1 As String, strStzahl2 As String
    Dim ww As Object

    strStzahl1 = Worksheets("Tabelle1").Range("A96").Value
    strStzahl2 = Worksheets("Tabelle1").Range("A97").Value

    If Err.Number = 429 Then
        Set ww = GetObject(, "Word.Application")
    Else
        Set ww = CreateObject("Word.Application")
    End If

    ww.Visible = True
    ww.Documents.Add ("D:\test\A.doc")

    With ww
        .ActiveDocument.FormFields("Stückzahl1").Result = strStzahl1
        .ActiveDocument.FormFields("Stückzahl2").Result = strStzahl2
        If .ActiveDocument.FormFields("Stückzahl1").Result = "0" Then
            Call TextblocklöschenA(ww)
        End If
    End With
    'Hier sollte der Code weitergehen: Wird das Dokument und Word geschlossen?
    ww.Close
    Set ww = Nothing
   
End Sub
Sub TextblocklöschenA(ByRef ww As Object)

    If ww.ActiveDocument.ProtectionType = 2 Then
        ww.ActiveDocument.Unprotect
    End If

    With ww.Selection
        .MoveDown Unit:=5, Count:=35
        .MoveDown Unit:=5, Count:=23, Extend:=1
        .Delete Unit:=1, Count:=1
'        .Font.Hidden = True    'diese Zeile "versteckt", dann Delete natürlich herausnehmen
        .Collapse 0
    End With

    ww.ActiveDocument.Protect Type:=2, NoReset:=True

End Sub

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Fischauto
Gast


Verfasst am:
30. Aug 2006, 19:20
Rufname:

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

erst einmal vielen Dank für Deine ausführlichen Bemerkungen.
Bei mir ruft jetzt noch die Arbeit.
Ich werde mich morgen wieder melden.

Gruß

Uli
Fischauto
Gast


Verfasst am:
31. Aug 2006, 08:29
Rufname:

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

juhu, das Makroprogramm funzt. Ich danke Dir ganz herzlich.
Allerdings habe ich nicht alle Änderungen von Dir übernommen. Der Fehler den ich gemacht habe war folgender :

Es werden von der Excelliste nur Zahlen übernommen. Ist eine Zelle leer,
so habe ich die Anweisung in
If ww.ActiveDocument.Formfields("Stückzahl1").Result = ""
geändert und das funzt.

Zum Verständnis für mich habe ich noch ein paar Fragen:
Der Makrorecorder hat mir ja dieses aufgezeichnet
Sub TextblocklöschenA(ByRef ww As Object)
.....
MoveDown Unit:=wdLine, Count:=35
.MoveDown Unit:=wdLine, Count:=23, Extend:=wdExtend
.Delete Unit:=wdCharacter, Count:=1
....
End Sub

In Deinem Code:
.MoveDown Unit:=5, Count:=35
.MoveDown Unit:=5, Count:=23, Extend:=1
.Delete Unit:=1, Count:=1

steht aber statt wdLine eine 5, statt wdExtend=1, statt wdCharacter=1.
Was hat das zu bedeuten? Kann ich diese Ziffern immer verwenden?

Eine Frage noch:
Da in dem Dokument mehrere Textformularfelder vorhanden sind, muß ich dann für jedes Textformularfeld ein Makro schreiben? Gibt es da irgendwie eine andere Möglichkeit?

Für Dich zur Info: Es ist beabsichtig das ein neus Dokument erstellt wird, das dann per Syntax in einem variablen Pfad automatisch abgespeichert wird. Das allerdings muß ich noch installieren. Dieses werde ich dann mit dem Makrorecorder aufzeichnet. Hoffentlich benötige ich nicht wieder Hilfe des Forums.

Also, Lisa, vielen Dank nochmal.

Bis später.

Gruß

Uli
Fischauto
Gast


Verfasst am:
31. Aug 2006, 10:35
Rufname:

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

das nächste Problem das ich nicht verstehe.

Da das Dokument mehrere Textformularfelder hat, habe ich die Anweisung
If .ActiveDocument.FormFields("Stückzahl1").Result = "" Then
Call TextblocklöschenA(ww)
End If
If .ActiveDocument.FormFields("Stückzahl2").Result = "" Then
Call TextblocklöschenLaugetank(ww)
End If

für die Stückzahl2 erweitert.

Nun meldet der Debugger: Falsche Anzahl von Argumenten oder ungültige Zuweisungen zu einer Eigenschaft.

Was ist verkehrt?

Gruß

Uli
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
01. Sep 2006, 19:02
Rufname:
Wohnort: Leipzig

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Uli,

okay, dann mal zu den Nachfragen:
  1. Uli hat folgendes geschrieben:
    Zum Verständnis für mich habe ich noch ein paar Fragen:
    Der Makrorecorder hat mir ja dieses aufgezeichnet
    Sub TextblocklöschenA(ByRef ww As Object)
    .....
    MoveDown Unit:=wdLine, Count:=35
    .MoveDown Unit:=wdLine, Count:=23, Extend:=wdExtend
    .Delete Unit:=wdCharacter, Count:=1
    ....
    End Sub

    In Deinem Code:
    .MoveDown Unit:=5, Count:=35
    .MoveDown Unit:=5, Count:=23, Extend:=1
    .Delete Unit:=1, Count:=1

    steht aber statt wdLine eine 5, statt wdExtend=1, statt wdCharacter=1.
    Was hat das zu bedeuten? Kann ich diese Ziffern immer verwenden?

    In Word zeichnet der Makrorekorder auf und schreibt statt der Integer-Werte, die in VBA verwendet werden, Wordkonstanten. Die kann man verwenden, solange man sich in Word befindet. Man kann sie aus externen Anwendungen (z. B. Excel) nur verwenden, wenn dort ein Verweis auf Word gesetzt ist (Extras - Verweise). Nur dann "kennt" Excel die Word-Konstanten.
    Die Word-Konstanten erkennt man daran, dass sie mit "wd" beginnen. Wenn man in Excel Makros aufzeichnet, beginnen die Excel-Konstanten mit "xl". Allgemeingültige VB-Konstanten beginnen mit "vb".
    Wenn man aus einer externen Anwendung keinen Verweis auf Word gesetzt hat, kann man die Word-Konstanten nicht verwenden, sondern muss stattdessen die "richtigen" Integer-Werte benutzen. All diese Konstanten der jeweiligen Anwendungen sind in der Anwendung im Objektkatalog verzeichnet (den man mit F2 aufruft). Dort kann man nachschlagen, wenn man nicht weiß, welcher Wert zu "wdLine" gehört.
  2. Uli hat folgendes geschrieben:
    Da in dem Dokument mehrere Textformularfelder vorhanden sind, muß ich dann für jedes Textformularfeld ein Makro schreiben? Gibt es da irgendwie eine andere Möglichkeit?

    Das kann man machen. Man kann es auch eleganter lösen. Dazu sollte man dann VBA lernen. Dann besteht sicher die Möglichkeit, das Makro in Word sozusagen "allgemeingültig" zu schreiben (nämlich mit Bezug zu anderen Elementen), so dass man das gleiche Makro für verschiedene Formularfelder verwenden kann.
    Weiter gibt es natürlich auch die Möglichkeit, dass man (ähnlich wie oben das Word-Objekt an die Prozedur übergeben wurde) den Verweis auf das Formularfeld an die Prozedur als Argument übergibt. In dem Fall braucht man nur eine Prozedur, die dann die Arbeit macht.
    Eine allgemeine Antwort auf diese Frage ist daher nicht möglich.
  3. Und noch zum Makrorekorder: Der Makrorekorder ist eine feine Sache. Jedoch zeichnet er - wie CaBe schon richtig bemerkt - nur das auf, was man selbst ausführt. Man muss also wenigstens selber wissen, was Word machen soll.
    Weiter sind im Vergleich zu den vielfältigen Möglichkeiten von VBA die Möglichkeiten des Rekorders wirklich nur sehr klein. So gut wie immer muss der aufgezeichnete Code nachbearbeitet werden bzw. liefert nur Hinweise auf Eigenschaften oder Methoden, deren Namen man nicht kennt.
    Der Makrorekorder kann in den allermeisten Fällen nur als Hilfsmittel dienen - und natürlich als Einstieg, damit man "Blut leckt" und dann VBA lernt Mr. Green
  4. Fischauto hat folgendes geschrieben:
    das nächste Problem das ich nicht verstehe.

    Da das Dokument mehrere Textformularfelder hat, habe ich die Anweisung
    If .ActiveDocument.FormFields("Stückzahl1").Result = "" Then
    Call TextblocklöschenA(ww)
    End If
    If .ActiveDocument.FormFields("Stückzahl2").Result = "" Then
    Call TextblocklöschenLaugetank(ww)
    End If

    für die Stückzahl2 erweitert.

    Nun meldet der Debugger: Falsche Anzahl von Argumenten oder ungültige Zuweisungen zu einer Eigenschaft.

    Was ist verkehrt?

    Ich kann schlecht beurteilen, was hier verkehrt ist. Die neue Prozedur TextblocklöschenLaugetank muss an sich nur analog zu der anderen deklariert werden, etwa:
    Code:
    Sub TextblocklöschenLautetank(ByRef ww As Object)

So, das soll erstmal reichen. Schönen Abend noch!

_________________
Sei doch so nett und gib eine Rückmeldung, ob es klappt!
Gruß, Lisa

Guter Rat ist teuer!
Fischauto
Gast


Verfasst am:
02. Sep 2006, 10:16
Rufname:

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Moin Lisa,

vielen, vielen Dank für Deine ausführlichen Anregungen und Tipps, die ich mir sicherlich beherzigen werde.
Zu meinem Problem:

Die Deklarierung habe ich vorgenommen, aber wie geschrieben meldet sich der Debugger. Ich werde amMontag noch mal nachschauen, vielleicht ist mir ja doch einen Fehler unterlaufen.

Trotzdem hätte ich gerne gewußt, was die zahlen hier bedeuten ( Du bist leider nicht ganz darauf eingegangen)
In Deinem Code:
.MoveDown Unit:=5, Count:=35
.MoveDown Unit:=5, Count:=23, Extend:=1
.Delete Unit:=1, Count:=1

steht aber statt wdLine eine 5, statt wdExtend=1, statt wdCharacter=1.
Was haben die Ziffern (Integer) zu bedeuten?

Danke Dir nochmal.

Ein schönes Wochenende.

Gruß

Uli
Lisa
Moderator; Word seit Word 5.0 (für DOS)


Verfasst am:
03. Sep 2006, 18:38
Rufname:
Wohnort: Leipzig

AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Uli,

zu wdLine: wdLine ist eine Word-Konstante und steht für den Wert 5. Oben hatte ich das erklärt:
Lisa hat folgendes geschrieben:
In Word zeichnet der Makrorekorder auf und schreibt statt der Integer-Werte, die in VBA verwendet werden, Wordkonstanten. Die kann man verwenden, solange man sich in Word befindet. Man kann sie aus externen Anwendungen (z. B. Excel) nur verwenden, wenn dort ein Verweis auf Word gesetzt ist (Extras - Verweise). Nur dann "kennt" Excel die Word-Konstanten. Außerdem werden sie in der VBA-Hilfe jeweils erläutert, einfach mal den Cursor vor vbLine setzen und F1 drücken.
Die Word-Konstanten erkennt man daran, dass sie mit "wd" beginnen. Wenn man in Excel Makros aufzeichnet, beginnen die Excel-Konstanten mit "xl". Allgemeingültige VB-Konstanten beginnen mit "vb".
Wenn man aus einer externen Anwendung keinen Verweis auf Word gesetzt hat, kann man die Word-Konstanten nicht verwenden, sondern muss stattdessen die "richtigen" Integer-Werte benutzen. All diese Konstanten der jeweiligen Anwendungen sind in der Anwendung im Objektkatalog verzeichnet (den man mit F2 aufruft). Dort kann man nachschlagen, wenn man nicht weiß, welcher Wert zu "wdLine" gehört.

VBA arbeitet mit Integer-Werten. Damit man sich nicht merken muss, dass 5 für eine Zeile steht, gibt es diese Konstanten, die "sprechende Namen" haben. Diese Konstanten mit "wd" gelten für Word. Excel hat eigene Konstanten (xl). Es gibt auch vb-Konstanten, die Word und Excel kennen. Alle Konstanten sind im Objektkatalog erklärt!! Man erreicht diesen im VBA-Editor mit F2! Also bitte, sieh dort nach.
Weiter möchte ich das Thema jetzt nicht auswalzen. Solltest Du gemeint haben, nicht zu wissen, was ein Integer-Wert ist (!), kann ich nur dringend empfehlen, vor weiteren Rückfragen wenigstens die ersten Kapitel zu lesen:

VBA in 21 Tagen

Das ist ein sehr gutes, kostenlos im Web stehendes Buch über VBA. In den ersten Kapiteln lernst Du bereits so viel, dass der Großteil Deiner Fragen sofort klar wird.
Aus der schieren Anzahl Deiner Fragen und aus der Art der Fragen kann ich nur schließen: Entweder ist bei Dir gar kein Grundlagenwissen vorhanden oder Du willst mich (und alle anderen hier im Forum) verschaukeln. Ich glaube an das Gute im Menschen und nehme die erste Möglichkeit an. Da Du offenbar ein Projekt mit VBA in Word und Excel betreust (auf der Arbeit?), solltest Du diese wirklich sehr gute Möglichkeit, VBA für Excel und Word zu lernen, nutzen. Ich kann Dir das nur empfehlen. Ich selbst habe auch nach diesem Buch (natürlich in meiner Freizeit) gelernt, das ist noch nicht lange her und hat mir sehr viel Spaß gemacht!

Also Dir auch viel Spaß beim Lernen,

Gruß, Lisa
Fischauto
Gast


Verfasst am:
04. Sep 2006, 10:24
Rufname:


AW: Frage zum Makroprogramm - AW: Frage zum Makroprogramm

Nach oben
       

Hallo Lisa,

vielen Dank für den Buchtipp, den ich übers Wochenende beherzigen werde.

Sollte der Eindruck der Art und Weise meiner gestellten Fragen Dir bzw Euch den Eindruck erweckt haben, das ich Euch verschauckeln wolle, so tut mir das leid und unterliegt keiner bewußten Absicht von mir.
Aber wie meinst Du das mit dem verschaukeln genau. ?
Ich habe mit Word nicht viel zu tun und habe, wie ich es schon mal beschrieben nicht viel Hintergrundwissen.
Wenn ich frage und auf eine Antwort noch mal frage, dann möchte ich, wenn irgendetwas unklar, verstehen was dieses und jenes bedeutet, damit ich diese beim nächsten Problem anwenden kann.

Gruß

Uli
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Word Formate: Frage zum Index 3 Gregor81 110 09. Okt 2013, 15:39
G.O.Tuhls Frage zum Index
Keine neuen Beiträge Word Formate: Frage zu Format Abbildungsverzeichnis 1 Renzo 94 07. Apr 2013, 21:52
theoS Frage zu Format Abbildungsverzeichnis
Keine neuen Beiträge Word Serienbriefe: Frage zu leeren Zellen / Serienbrief 10 pottkieker 735 12. März 2012, 16:23
ffranz Frage zu leeren Zellen / Serienbrief
Keine neuen Beiträge Word Formate: Formatieren der Anführungszeichen – simple Frage 1 Schuhu 760 24. Feb 2012, 16:39
G.O.Tuhls Formatieren der Anführungszeichen – simple Frage
Keine neuen Beiträge Word VBA Programmierung (Makros): Frage zu wdDialogFilePrint 1 dcm99 420 16. Dez 2011, 16:03
dcm99 Frage zu wdDialogFilePrint
Keine neuen Beiträge Word Formate: Frage zu Inhaltsverzeichnis ?? 3 Gast_Frank 2146 27. Feb 2011, 22:19
Gregor80 Frage zu Inhaltsverzeichnis ??
Keine neuen Beiträge Word VBA Programmierung (Makros): Frage zu Checkboxen 10 AnjaT 617 24. Nov 2010, 12:37
AnjaT Frage zu Checkboxen
Keine neuen Beiträge Word VBA Programmierung (Makros): [Frage] Dokumenterstellung/Inhaltsverzeichnis 0 thobo 312 08. Jun 2010, 08:42
thobo [Frage] Dokumenterstellung/Inhaltsverzeichnis
Keine neuen Beiträge Word Formate: Frage bzgl. Zeilenumbruch verhindern 2 TheEngineer 5696 13. Okt 2008, 16:09
TheEngineer Frage bzgl. Zeilenumbruch verhindern
Keine neuen Beiträge Word Formate: Frage - Abstände zwischen Wörter verrigern (bei Blocksatz) 4 TheEngineer 26415 07. Okt 2008, 23:01
Gast Frage - Abstände zwischen Wörter verrigern (bei Blocksatz)
Keine neuen Beiträge Word Serienbriefe: Verständnisfrage - Serienbrief - Bedingung - Frage 2 sunghost 919 01. Feb 2008, 13:44
sunghost Verständnisfrage - Serienbrief - Bedingung - Frage
Keine neuen Beiträge Word VBA Programmierung (Makros): Komplizierte Frage zu Fußnoten und Feldern 2 azure 820 22. Okt 2007, 00:32
azure Komplizierte Frage zu Fußnoten und Feldern
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Frontpage Forum