Na podstawie:
http://www.xtremevbtalk.com/archive/index.php/t-23313.html
Chciałem wykorzystać możliwość przechwycenia podwójnego kliknięcia, by:
- zaznaczyć całe słowo,
- stworzyć i otworzyć dokument o nazwie takiej jak zaznaczone słowo, ewentualnie jeśli dokument już istnieje, jedynie otworzyć dokument.
Celem takiej zabawy miało być stworzenie prostego mechanizmu Wiki, sieci wzajemnie powiązanych dokumentów Worda - takiej prostej bazy wiedzy.
Niestety, makro tworzy dokumenty i je "uszkadza", tj. po ich zamknięciu nie można ich ponownie otworzyć, a komunikat o błędzie niczego szczególnego nie mówi. Co może powodować taki błąd? Czy może to być związane np. z konfliktami między makrami w dokumencie rodzicu, a takimi samymi makrami występującymi w szablonie dotm i w tworzonych kolejnych dokumentach?
Próbowałem wszystkiego chyba co umiałem (jestem początkującym programistą). Z góry dziękuję za pomoc i wszelkie podpowiedzi. Załączam pliki index.docm i template.dotm.
Makra.
W module basGeneral:
''add a new MODULE to the active document, '' re-name it "basGeneral" using the properties window, '' then paste the following section of code Dim objClass As New clsWordApp Sub Register_EventHandler() Set objClass.appWord = Word.Application End Sub Sub test() 'expand selection to whole word Selection.Expand Unit:=wdWord If Selection.Characters.Last = " " Then Selection.End = Selection.End - 1 End If Selection.Font.Underline = wdUnderlineSingle 'send selection to variable Dim selBkUp As Range Set selBkUp = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End) 'check if file exists Dim fso As Object Dim objWord As Word.Application Dim doc As Word.Document Set fso = CreateObject("Scripting.FileSystemObject") Set objWord = CreateObject("Word.Application") If fso.FileExists(ActiveDocument.Path & "/" & selBkUp & ".docm") Then Documents.Open (ActiveDocument.Path & "/" & selBkUp & ".docm") ActiveDocument.Save Else MsgBox "No such file " Documents.Add(ActiveDocument.Path & "/" & "template.dotm").SaveAs (ActiveDocument.Path & "/" & selBkUp & ".docm") Documents.Open (ActiveDocument.Path & "/" & selBkUp & ".docm") ActiveDocument.Save End If End Sub
================================
w ThisDocument:
================================
''Or to run this automatically whenever Word is opened ''Paste this code into the "ThisDocument" module of your '' "Normal" VBA project Private Sub Document_New() Register_EventHandler End Sub Private Sub Document_Open() Register_EventHandler End Sub ================== w Class Modules ================= ''-------------------------------------------------------- ''add a new CLASS MODULE to the active document, '' re-name it "clsWordApp" using the properties window, '' then paste in the code below Public WithEvents appWord As Word.Application Private Sub appWord_WindowBeforeDoubleClick(ByVal Sel As Selection, Cancel As Boolean) test End Sub