2016-07-07 10 views
0

Ich möchte eine .dotm-Vorlage erstellen, aus der die Dokumentenbasis erstellt wird. Dann möchte ich es mit Visual Basic-Formularen füllen.Ist es möglich, ein neues Dokument aus einer Vorlage zu erstellen und dessen Füllung mit einem visuellen Basisformular zu automatisieren?

Zuerst habe ich versucht, es mit AutoExec und AutoOpen zu tun, aber es hat nicht geklappt. Also habe ich gegoogelt und eine Lösung gefunden - ich muss das Document_New-Verfahren verwenden. So im Moment sieht das alles so aus:

Ich habe eine dotm Vorlage. Im Templates-Projekt habe ich ein Makro für ThisDocument und das Formular mit dem Namen InputForm definiert. Makro sieht wie folgt aus

Private Sub Document_New() 
    InputForm.Show 
End Sub 

In Inputform Code erhalte ich einen Text von TextBox-Elemente, und wollen es bestimmte Felder in neu erstellte Dokument zuweisen.

Problem ist, dass das Dokument aus der Vorlage erstellt wird, bevor ich Formular ausfülle, so dass alle Änderungen, die in einem neuen Dokument vorgenommen werden sollen, in der Vorlage vorgenommen werden.

bearbeiten: Code für Inputform

Private Sub OkButton_Click() 

    If IsRight Then 
     ThisDocument.txt_Num.Value = txt_Num1.Value 

     ThisDocument.txt_Date.Value = txt_Date1.Value 

     ThisDocument.lbl_Num_Date.Caption = " ТКП № " & txt_Num1.Value & " от " & _ 
     txt_Date1.Value & "г." 

     ThisDocument.txt_Project.Value = txt_Project1.Value 

     ThisDocument.lbl_Project.Caption = txt_Project1.Value 

     ThisDocument.txt_Author.Value = txt_Author1.Value 

     ThisDocument.txt_Org.Value = txt_Org1.Value 

     ThisDocument.lbl_Organization.Caption = txt_Org1.Value 

     ThisDocument.txt_Phone.Value = txt_Phone1.Value 

     ThisDocument.txt_Mail.Value = txt_Mail1.Value 

     InputForm.Hide 
    Else 
     MsgBox ("Неверно") 
    End If 
End Sub 

Public Function IsRight() As Boolean 
    If IsDate(txt_Date1.Value) Then 
     IsRight = True 
    Else 
     IsRight = False 
    End If 
End Function 

Private Sub CancelButton_Click() 
    InputForm.Hide 
End Sub 

Antwort

1

Sie sollten ActiveDocument statt ThisDocument verwenden.

Sie können so etwas wie

ActiveDocument.txt_Num.Value = txt_Num1.Value 

https://msdn.microsoft.com/en-us/library/office/ff194846.aspx

auch versuchen, überprüfen Sie meine Antwort hier für eine einfachere Alternativen Find and replace multiple words in Word

+0

Habe es einfach versucht, kein Glück. Es scheint, dass die Shapes-Auflistung leer ist (Größe = 0). Aber ActiveDocument ist wirklich das Dokument, das gerade erstellt wurde. –

+0

Dann vielleicht in der 'ActiveDocument.ContentControls' oder der' ActiveDocument.Controls' Sammlung? – Slai

+0

ContentControls ist ebenfalls leer. Ich denke über die Fields-Sammlung nach, aber es erlaubt nicht, irgendetwas anderes als Index als Argument zu verwenden ... –

0

Vorausgesetzt, dass Sie das Makro haben Arbeit in Form zu füllen, sobald eine neue Instanz des Dokuments offen Ich würde versuchen, die folgenden Documents.Add Template:="C:/put absolute file path here, NewTemplate:= False, DocumentType:= 0'. Es scheint mir Ihren Code Öffnet die eigentliche Vorlage und kein "neues Dokument".

Ich würde dann dieses Makro an eine Tastaturverknüpfung anhängen oder es aus einer Schaltfläche innerhalb der Vorlage auslösen und dann Ihr Makro ausführen, um das Dokument auszufüllen. Meiner Erfahrung nach (was begrenzt ist), die Makros so kompartimentiert wie möglich zu machen, liefert mir die besten Ergebnisse.

+0

In der Tat mein Code hat nichts öffnen. Es wird ausgelöst, wenn ein neues Dokument geöffnet wird. Und ein neues Dokument wird geöffnet, wenn die Vorlage geöffnet wird. So sieht die Ereigniskette wie folgt aus: Vorlage öffnen => Neues Dokument aus Vorlage erstellt => Mein Formular wird für Vorlage geöffnet –

+0

Wären Sie in der Lage, den Code vollständig zu liefern. Dies könnte helfen, ein klares Bild von dem zu bekommen, was vor sich geht, und das Problem zu lösen. – BG927

+0

Ich habe es zu der Frage hinzugefügt, danke für den Versuch zu helfen :) –

Verwandte Themen