Hallo zusammen,
ich habe einen Word-Displaybarcode erstellt, der von Banking-Apps zum Bezahlen eingescannt werden kann. Diesen Barcode möchte ich in eine Fachanwendung integrieren und den Betrag über VBA dynamisch zu aktualisieren.
Dabei stoße ich jedoch auf ein Problem: Sobald ein weiteres Word-Dokument geöffnet wird, funktioniert die Aktualisierung des QR-Codes nicht mehr, wenn der Betrag im Textfeld geändert wird. Ich arbeite mit Office Standard 2016 und habe leider keine Möglichkeit, auf eine neuere Version zu upgraden. Zudem erlaubt die Fachanwendung ausschließlich VBA-Codes über Word-Vorlagen mit Makros.
Habt ihr vielleicht eine alternative Lösung für den VBA-Code oder einen Workaround, um dieses Problem zu umgehen?
Vielen Dank vorab für eure Unterstützung!
Beste Grüße
Zeus77
Dim oldValue As String
Dim monitoredDoc As Document
Sub AutoOpen()
' Diese Subroutine wird beim Öffnen des Dokuments ausgeführt
Call SetUpChangeEvent
End Sub
Sub SetUpChangeEvent()
' Diese Subroutine richtet das Change-Event für die Textmarke "Betrag" ein
Set monitoredDoc = ActiveDocument
' Überprüfen, ob das Dokument die Vorlage Qr2.dotm verwendet
If IsDocumentUsingTemplate(monitoredDoc, "Qr2.dotm") Then
' Überprüfen, ob die Textmarke existiert
If monitoredDoc.Bookmarks.Exists("Betrag") Then
' Speichern Sie den ursprünglichen Wert der Textmarke
oldValue = monitoredDoc.Bookmarks("Betrag").Range.Text
' Einrichten des Change-Events
Application.OnTime Now + TimeValue("00:00:01"), "CheckBookmarkChange"
End If
End If
End Sub
Function IsDocumentUsingTemplate(oDoc As Document, templateName As String) As Boolean
' Diese Funktion überprüft, ob ein Dokument eine bestimmte Vorlage verwendet
Dim attachedTemplate As Template
Set attachedTemplate = oDoc.attachedTemplate
If attachedTemplate Is Nothing Then
IsDocumentUsingTemplate = False
Else
IsDocumentUsingTemplate = (attachedTemplate.Name = templateName)
End If
End Function
Sub CheckBookmarkChange()
' Diese Subroutine überprüft, ob die Textmarke "Betrag" verändert wurde
If monitoredDoc Is Nothing Then Exit Sub
' Sicherstellen, dass das Dokument noch geöffnet ist
On Error Resume Next
Dim checkName As String
checkName = monitoredDoc.Name
If Err.Number <> 0 Then Exit Sub
On Error GoTo 0
' Sicherstellen, dass das aktuelle Dokument das überwachte Dokument ist
If ActiveDocument Is monitoredDoc Then
Dim newValue As String
' Überprüfen, ob das Dokument die Vorlage Qr2.dotm verwendet
If IsDocumentUsingTemplate(monitoredDoc, "Qr2.dotm") Then
' Überprüfen, ob die Textmarke existiert
If monitoredDoc.Bookmarks.Exists("Betrag") Then
newValue = monitoredDoc.Bookmarks("Betrag").Range.Text
' Prüfen, ob der Wert sich geändert hat
If newValue <> oldValue Then
oldValue = newValue
Call UpdateFields
End If
End If
End If
End If
' Wiederholtes Einrichten des Timers
Application.OnTime Now + TimeValue("00:00:01"), "CheckBookmarkChange"
End Sub
Sub UpdateFields()
' Diese Subroutine aktualisiert alle Felder im Dokument
If monitoredDoc Is Nothing Then Exit Sub
Dim oField As field
' Überprüfen, ob das Dokument die Vorlage Qr2.dotm verwendet
If IsDocumentUsingTemplate(monitoredDoc, "Qr2.dotm") Then
For Each oField In monitoredDoc.Fields
oField.Update
Next oField
End If
End Sub
|