Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 7
  • 200

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

 

Załączniki

  • zip

    docwiki.zip ( 40K )
  • zip

    docwiki.zip ( 40K )
Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 13.03.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94

Odpowiedź (1)

  • 15

W sub test(), procedura tworzenia nowego dokumentu:

Documents.Add(ActiveDocument.Path & "/" & "template.dotm").SaveAs (ActiveDocument.Path & "/" & selBkUp & ".docm") - brakuje tam deklaracji formatu pliku.

To znaczy jest. Domyślnie tworzy dokument w formacie 97-2003. A to, że Pan na siłę wymusza zmianę rozszerzenia, to Word ma w "nosie". :) Jak Pan zmieni ręcznie rozszerzenie pliku na doc, to się otwiera bez błędu.

Jeżeli mają być w formacie docm, to sugeruję tak:

Documents.Add(ActiveDocument.Path & "/" & "template.dotm").SaveAs (ActiveDocument.Path & "/" & selBkUp & ".docm"), FileFormat:= wdFormatXMLDocumentMacroEnabled

 

  • Odpowiedział
  • @ | 14.03.2015
  • TRENER ALTKOM AKADEMII