Aufruf einer vba Funktion mittels Textmarke

Moderator: ModerationP

Aufruf einer vba Funktion mittels Textmarke

Beitragvon trawideli » 01. Jul 2021, 17:19

Hallo zusammen,

ich komme nicht weiter. In meinem Word-Dokument wird mittels einer Textmarke (Macrobutton) eine Prozedur aufgerufen. Diese Prozedur möchte ich jetzt in eine Funktion umwandeln, da ich in manchen Fällen einen Rückgabewert brauche. Dazu habe ich folgenden Zeile
Code: Alles auswählen
'Public Sub TestInterface()
in diese verändert
Code: Alles auswählen
Public Function TestInterface(Optional w As Word.Document) As String

Das klappt auch und läuft problemlos bis ich die Word-Datei abspeichere und neu aufrufe. Dann wird die Funktion nicht mehr gestartet. Wandle ich es in ein Prozedur um, läuft es wieder auch nach dem Abspeichern und erneutem Aufrufen.
Bisher habe ich nur in Access programmiert und kenne die Word-VBA-Eigenheiten noch nicht. Kann mir jemand dieses Verhalten von Word erkären?

Grüße,
Trawideli
PS.: Ich bin nur an Dienstagen und Donnerstagen hier.
System: Win10 mit Access2016 (voher Acc07)
trawideli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 228
Registriert: 29. Apr 2014, 10:43

Re: Aufruf einer vba Funktion mittels Textmarke

Beitragvon theoS » 01. Jul 2021, 19:51

Schwer zu sagen. Woher kommt das Worddokument, das du hier in der Funktion übergibst?
Ohne den Aufruf, den übergebenen Parameter und das was die Funktion denn damit tun soll, kann dir das vermutlich keiner sagen.

Ach ja, noch was. Ein Macrobutton ist ein Feld, keine Bookmark.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5717
Registriert: 19. Apr 2008, 00:14

Re: Aufruf einer vba Funktion mittels Textmarke

Beitragvon MarkMH_K » 02. Jul 2021, 08:28

Hi,

in meinem alten WordXP müssen functions von subs aufgerufen werden
Ich tippe darauf, daß das (manchmal zu fehlertolerante) VBA den ursprünglichen Sub TestInterface in irgendeiner temporären unsichtbaren Ecke abspeichert und beim Entwickeln diese Fassung aufruft. Wenn der temporäre Speicher dann leer ist, könnte das Feld noch immer einen Sub erwarten, aber nicht mehr kriegen.

HTH anyway. Markus
MarkMH_K
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2663
Registriert: 17. Jul 2011, 12:45
Wohnort: Köln rrh

Re: Aufruf einer vba Funktion mittels Feldfunktion Makrobutt

Beitragvon trawideli » 13. Jul 2021, 12:44

Hallo nochmal,

ich bin dem Hinweis nachgegangen, dass Word sich irgendwo gemerkt hat, dass er es mit einer "Sub" statt einer "Function" zu tun hat.
Ich habe alles in ein neues Dokument kopiert und als „Word-Dokument mit Macros“ gespeichert. Dazu habe ich am Ende des Originals einen fortlaufenden Absatzumbruch eingefügt und diesen beim Kopieren (STRG+C, STRG+V) mitgenommen, damit auch Kopf- und Fußzeilen übernommen werden. Es musste bei den „Optionen“ unter „Erweitert“ im Abschnitt „Ausschneiden, Kopieren, Einfügen“ für „Einfügen zwischen Dokumenten, wenn Formatvorlagendefinitionen nicht übereinstimmen“ „[Formatvorlage des Ziels verwenden]“ eingestellt sein, damit die Überschriftennummerierung übernommen wird. Anschließend habe ich ein neues Modul erstellt, wie gewünscht benannt und den Inhalt aus dem Original hineinkopiert. Ich habe sogar das gleiche nochmal gemacht, nachdem ich die "Normal.dotm" neu erstellen ließ. Word hatte mir immer "[Kompatibilitätsmodus]" angezeigt, obwohl die Einstellungen in den Optionen richtig waren. Das war zumindest danach behoben.
Ansonsten war das Verhalten immer gleich. Wenn ich das Dokument gestartet habe, während "Sub" eingestellt war, wurde die Prozedur durchlaufen, auch wenn ich auf "Function" umgestellt habe. Habe ich das Dokument so abgespeichert und neu gestartet, wurde die Prozedur nicht durchlaufen, auch wenn ich auf "Sub" ungestellt habe.
Also entweder ist es tatsächlich so, dass mit der Feldfunktion "Makrobutton" nur eine "Sub" ausgeführt werden kann oder ich kopiere mit den enthaltenen Formatierungen etwas, das diesen Effekt auslöst. Allerdings möchte ich ungern alle 310 Überschriften neu setzen und die anderen Formatierungen, die ich noch nicht einmal alle kenne, nachbauen.
Der Aufruf in der Feldfunktion sieht wie folgt aus. Ich habe ihn auch gleich gelassen, egal ob "Sub" oder "Function" eingestellt war, da ich an dieser Stelle keinen Übergabeparameter brauche.
Code: Alles auswählen
{MacroButton TestInterface Lesezeichen auffrischen}

Muss ich "Sub" und "Function" unterschiedlich aufrufen?

Meine Idee war, dass ich die Prozedur "TestInterface" beim Aufruf von Access aus durchlaufen lasse bevor ich dort die Daten aus dem Dokument einlese. Dann braucht man diesen Schritt nicht mehr separat in Word machen und ich spare mir einen Durchlauf. Aber dafür brauche ich den Rückgabewert in Access. Die Feldfunktion in Word wollte ich allerdings auch belassen.

Wenn noch jemand Ideen oder Informationen hat, würde ich mich sehr freuen.

Grüße,
trawideli
PS.: Ich bin nur an Dienstagen und Donnerstagen hier.
System: Win10 mit Access2016 (voher Acc07)
trawideli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 228
Registriert: 29. Apr 2014, 10:43

Re: Aufruf einer vba Funktion mittels Textmarke

Beitragvon HKindler » 13. Jul 2021, 14:20

Hi,

mit Word kenn ich mich jetzt nicht so gut aus, aber bei Excel ist es tatsächlich so, dass man einem Button nur Subs und keine Functions zuordnen kann. Functions werden einem für die Zuordnung erst gar nicht angeboten (ja, nicht einmal Subs, die ein Argument brauchen). Ist ja irgendwie auch logisch: was soll ein Button mit dem zurückgegeben Wert denn anfangen?

Wenn deine Function kein Argument braucht und der rückgegebene Wert egal ist, dann kannst du doch gleich eine Sub daraus machen. Oder du machst eine umgebende Sub, die die Function aufruft:
Code: Alles auswählen
Sub BisherigeSub()
NeueFunction irgendwas
End Sub

Function NeueFunction(a)
NeueFunction = "Eingabe: " & a
End Function

Jetzt kannst du deinem Button "BisherigeSub" zuweisen. Zumindest würde das in Excel so funktionieren.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6282
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Aufruf einer vba Funktion mittels Feldfunktion Makrobutt

Beitragvon trawideli » 13. Jul 2021, 15:04

Hallo Helmut,

danke für den Input. Beim zweiten Nachdenken macht es tatsächlich Sinn. Bei der Schaltfläche brauche ich keinen Rückgabewert. Den brauche ich nur, wenn ich meine Prozedur von Access laufen lassen will. Und wenn ich beide Möglichkeiten haben möchte (start über Schaltfläche und start über Access) muss ich es wohl so machen wie von dir beschrieben, dass die Schaltfläche eine "Sub" aufruft, die mir dann die "Function" durchläuft.
Da war ich zu verwöhnt von Access, wo mir beides nach Bedarf zur Verfügung steht. Da bin ich gar nicht auf die Idee gekommen, dass das in Word anders wäre.

Grüße,
trawideli
PS.: Ich bin nur an Dienstagen und Donnerstagen hier.
System: Win10 mit Access2016 (voher Acc07)
trawideli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 228
Registriert: 29. Apr 2014, 10:43

Re: Aufruf einer vba Funktion mittels Textmarke

Beitragvon theoS » 13. Jul 2021, 17:38

Das ist auch bei Word so. Wenn du mal einen Macrobutton in das Doc neu einfügst, wird dir keine Function angeboten die aufgerufen werden kann.
Wenn du einen Rückgabewert brauchst, dann lies doch einfach die Variable aus. Wenn du die richtig deklarierst, dann klappt das auch mit der Sub
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5717
Registriert: 19. Apr 2008, 00:14


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast