1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Word 2002-VBA funktioniert nicht in word 2007

Discussion in 'Office-Programme' started by hajo, Feb 26, 2012.

Thread Status:
Not open for further replies.
  1. hajo

    hajo Kbyte

    Hallo,

    die folgende Prozedur funktioniert unter WORD 2002 einwandfrei, unter WORD 2007 erscheint der

    Laufzeitfehler '5' :
    Ungültiger Prozeduraufruf oder ungültiges Argument.

    Der Debugger zeigt auf 'AppActivate appID'.

    Hilft jemand einem Unwissenden?

    Danke
    hajo


    Sub Calculator()
    '
    ' Calculator Makro
    ' Makro aufgezeichnet am 25.01.2012 von
    '
    Dim Ergebnis, I

    'Starten des Windows-Calculators und Auffangen der Applikation-ID
    appID = Shell("CALC.EXE", 1)

    'Sicherstellen dass der Calculator den Fokus hat
    AppActivate appID

    'berechnen der Summe der Zahlen von 1 bis 100
    For I = 1 To 99
    'send keys to add the values of I
    SendKeys I & "{+}", True
    Next I
    SendKeys ("100"), True
    SendKeys "=", True
    'MsgBox als Pause-Ersatz
    MsgBox "Arbeit beendet, Calculator wird ohne Ergebnis-Speicherung geschlossen"
    ' Calculator beenden mit F4
    ' SendKeys String:="%{F4}", Wait:=True
    End Sub
     
  2. chipchap

    chipchap Ganzes Gigabyte

    Bei mir funktioniert das Makro einwandfrei (Word 2007 Home).
    Hast Du die Makros in Word 2007 aktiviert?
     
  3. Falcon37

    Falcon37 Ganzes Gigabyte

    Der Grund ist ein anderer weshalb es nicht funktioniert:
    Der Aufruf Appactivate kommt bevor der Rechner überhaupt gestartet ist.

    So geht's:

    Sleep 1000
    AppActivate (appid)

    Sleep geht aber nur wenn man vorher das eingefügt hat:

    Private Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)
     
    Last edited: Feb 26, 2012
  4. chipchap

    chipchap Ganzes Gigabyte

    Kommt wohl auf die Geschwindigkeit des PCs an.
    Mit Sleep ist es sicherer.
    Bei sehr langsamen PC müßte man da wohl auch noch etwas länger schlafen.
     
  5. Falcon37

    Falcon37 Ganzes Gigabyte

    Ohne Pause geht's auf meinem gar nicht.
     
  6. chipchap

    chipchap Ganzes Gigabyte

    Bei mir geht es ohne, aber ich hab ja auch einen 5 Jahre alten Q6700. :D
     
  7. Falcon37

    Falcon37 Ganzes Gigabyte

    Siehst du, mit dem Teil kannst du hier keinen vernünftigen Support mehr leisten.
    Du musst dringend aufrüsten, sonst findest du dich in Kürze auf dem Abstellgleis wieder. :D
     
  8. chipchap

    chipchap Ganzes Gigabyte

    Tja, Alteisen bin ich ja schon lange.
    Aber alt ist wie jung, nur besser. :D
     
  9. hajo

    hajo Kbyte

    Hallo Falcon37,

    würdest Du bitte für einen Unwissenden Deine Zusätze richtig in meine Prozedur platzieren?

    Trotz mehrerer Versuche mit der Syntax gibt es nur Fehlermeldungen.

    Danke
    Hajo
     
  10. Falcon37

    Falcon37 Ganzes Gigabyte

    Code:
    Private Declare Sub Sleep Lib "kernel32" _
             (ByVal dwMilliseconds As Long)
    
    Sub Calculator()
    '
    ' Calculator Makro
    ' Makro aufgezeichnet am 25.01.2012 von
    '
             
    Dim Ergebnis, I
    
    'Starten des Windows-Calculators und Auffangen der Applikation-ID
    appid = Shell("C:\Windows\System32\calc.exe", 1)
    
    'Sicherstellen dass der Calculator den Fokus hat
    Sleep 1000
    AppActivate (appid)
    
    'berechnen der Summe der Zahlen von 1 bis 100
    For I = 1 To 99
     'send keys to add the values of I
     SendKeys I & "{+}", True
    Next I
     SendKeys ("100"), True
     SendKeys ("="), True
    'MsgBox als Pause-Ersatz
    MsgBox "Arbeit beendet, Calculator wird ohne Ergebnis-Speicherung geschlossen"
    ' Calculator beenden mit F4
    ' SendKeys String:="%{F4}", Wait:=True
    End Sub
     
  11. hajo

    hajo Kbyte

    Der Start der Prozedur erzeugt den Hinweis:

    Fehler beim Kompilieren:
    Nach End Sub, End Function oder End Property können nur Kommentare stehen.


    Prozedur:

    Private Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)
    Sub Calculator()
    '
    ' Calculator Makro
    ' Makro aufgezeichnet am 25.01.2012 von
    '

    Dim Ergebnis, I

    'Starten des Windows-Calculators und Auffangen der Applikation-ID
    appid = Shell("C:\Windows\System32\calc.exe", 1)

    'Sicherstellen dass der Calculator den Fokus hat
    Sleep 1000
    AppActivate (appid)

    'berechnen der Summe der Zahlen von 1 bis 100
    For I = 1 To 99
    'send keys to add the values of I
    SendKeys I & "{+}", True
    Next I
    SendKeys ("100"), True
    SendKeys ("="), True
    'MsgBox als Pause-Ersatz
    MsgBox "Arbeit beendet, Calculator wird ohne Ergebnis-Speicherung geschlossen"
    ' Calculator beenden mit F4
    ' SendKeys String:="%{F4}", Wait:=True
    End Sub
     
  12. hajo

    hajo Kbyte

    Der Start der Prozedur erzeugt den Hinweis:

    Fehler beim Kompilieren:
    Nach End Sub, End Function oder End Property können nur Kommentare stehen.

    Dieser Hinweis bezieht sich wohl auf die vorangehende Prozedur.
    Markiert ist : 'Private Declare ...'

    Prozedur:

    Sub ...

    End Sub

    Private Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)

    __________________________________________________________

    Sub Calculator()
    '
    ' Calculator Makro
    ' Makro aufgezeichnet am 25.01.2012 von
    '

    Dim Ergebnis, I

    'Starten des Windows-Calculators und Auffangen der Applikation-ID
    appid = Shell("C:\Windows\System32\calc.exe", 1)

    'Sicherstellen dass der Calculator den Fokus hat
    Sleep 1000
    AppActivate (appid)

    'berechnen der Summe der Zahlen von 1 bis 100
    For I = 1 To 99
    'send keys to add the values of I
    SendKeys I & "{+}", True
    Next I
    SendKeys ("100"), True
    SendKeys ("="), True
    'MsgBox als Pause-Ersatz
    MsgBox "Arbeit beendet, Calculator wird ohne Ergebnis-Speicherung geschlossen"
    ' Calculator beenden mit F4
    ' SendKeys String:="%{F4}", Wait:=True
    End Sub
     
  13. Falcon37

    Falcon37 Ganzes Gigabyte

  14. hajo

    hajo Kbyte

    Der Vergleich meiner Prozedur mit der Auflistung in der Bilddatei ergibt völlige Übereinstimmung. Es bleibt bei der Fehlernachricht.
     
  15. bahnrat

    bahnrat Kbyte

    Hallo!

    Darf man fragen was das für einen Sinn haben soll?

    Nutze doch eine Userform anstelle des Taschenrechners. Da kannst Du dann innerhalb von Word mit Sendkeys arbeiten und musst nicht auf den Taschenrechner warten.

    Du kannst auch VBA rechnen lassen und dann das Ergebnis in einer MsgBox ausgeben lassen. Den Taschenrechner benötigst Du eigentlich gar nicht. Da Du die Eingaben ohnehin per SendKeys an den Taschrechner schickst, kannst Du das Rechnen auch gleich VBA überlassen. Wichtig dabei ist, dass Du die Variablen korrekt deklarierst. Zahlen zum Rechnen sollten immer Double sein. Für jede Variable eine eigene Zeile.

    Kleines Beispiel:

    -----------------------------------------------------------------------------------------
    Sub CalcTest()
    Dim strvalue As Double

    strvalue = 12 * 34 / 6
    MsgBox strvalue
    End Sub
    -----------------------------------------------------------------------------------------

    Gruß, René
     
  16. bahnrat

    bahnrat Kbyte

    Hier Dein Makro als VBA-Variante. Vorteil dabei ist, dass Du das Ergebnis weiterverarbeiten kannst.

    -------------------------------------------------------
    Sub Calculator()
    Dim i As Integer
    Dim strValue As Double

    strValue = 0

    For i = 1 To 100
    strValue = strValue + i
    Next i

    MsgBox strValue

    End Sub
    -------------------------------------------------------
     
  17. hajo

    hajo Kbyte

    Hallo an alle Helfer,

    mein Problem bestand in der Frage, warum eine WORD2000-VBA-Prozedur nicht in WORD 2007 läuft.

    die Ursache hat Falcon37 auf den Punkt gebracht:

    ------------------
    Der Grund ist ein anderer weshalb es nicht funktioniert:
    Der Aufruf Appactivate kommt bevor der Rechner überhaupt gestartet ist.

    So geht's:

    Sleep 1000
    AppActivate (appid)

    Sleep geht aber nur wenn man vorher das eingefügt hat:

    Private Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)

    -----------------

    Den Vorschlag habe ich nicht zum Laufen gebracht,
    das Problem ist jedoch mit folgender Maßnahme gelöst:

    For I=1 to 50000
    Next I

    Das gibt Windows die Zeit, das aufgerufene Programm zu starten.

    Dank an alle
    Hajo
     
Thread Status:
Not open for further replies.

Share This Page