1

更新 3:

これは、vb6 スクリプトを保存し、単語を閉じ、単語を開始し、通常のテンプレートと同じようにテンプレートを実行した場合に発生します。つまり、strTemplate は Normal.doc になります。次に、vsto を介して保存されていない元のテンプレートに戻るとすぐに、変数 strTemplate に Letter.doc が含まれていることに戻ります...

更新 2:

私の起動スクリプトには、次のような行があります。

strTemplate = ActiveDocument.AttachedTemplate

Letter.dot という名前の元のテンプレートでは、strTemplate = Letter.dot です。

しかし、何らかの理由で、元の Letter.dot テンプレートに基づいた新しい vsto テンプレートでは、上の同じ行が Normal.dot になり、新しいテンプレートがまだ Letter.dot という名前であるにもかかわらず、問題が発生しています。

手動でコーディングしようとしました

strAttTemplate = "Letter.dot"

スクリプトは次の段階に進みますが、別のことについて不平を言い始めます。

私の質問は、元のテンプレートには strTemplate = Letter.dot がありますが、vsto を介してテンプレートを実行した後、なぜこれが strTemplate = Normal.dot に変わるのでしょうか?

更新 1:

テンプレートの両方のバージョン、つまり元の非 vsto テンプレートと新しい vsto テンプレートのデバッグを実行した後、元のテンプレートにはドキュメント プロパティがなく、vsto テンプレートには 2 つのドキュメント プロパティがあることがわかりました。しかし、それは問題ではないようです。

この問題は、vsto テンプレートに normal.dot が添付されているのに対し、元の非 vsto テンプレートには normal.dot が添付されていないことに関係しているようです。

新しいテンプレートから添付された normal.dot を削除することはできますか?

元の質問:

Visual Studio 2008 を使用して Word 2003 テンプレート プロジェクトを作成しています。バックグラウンドで vb6 マクロ スクリプトを実行している [既存のテンプレートを使用] オプションを選択します。何らかの理由で、Visual Studio プロジェクトを保存すると、vb6 スクリプトが機能しなくなります。

古い vb6 スクリプトは、テンプレートを Word で開くとすぐに実行されますが、vs2008 で追加の機能を追加せずにテンプレートを使用し、プロジェクトを保存してプロジェクトをビルドすると、Word でテンプレートを開こうとすると、古いスタートアップ スクリプトが実行されます。動作しません。

なぜこうなった?

4

2 に答える 2

2

可能性の高いシナリオはAutoExec、Word 2003 .dot VBA で呼び出されるルーチンがあることです。これは、VSTO テンプレートとして展開された場合は実行されません。これは、Word が実行するために想定している種類のアドインではないためですAutoExec(STARTUP フォルダーに .wll ファイルまたは .dot ファイルが想定されています)。VSTO でこれを回避する方法はAutoOpen、テンプレートが VSTO アドインとして開かれたときに、そのサブルーチンでコードを実行する代わりに使用することです。

これら 3 つを VBA で試すことができます (Word では、Alt+F11を押して Visual Basic Editor に移動します)。

Sub AutoNew()
    MsgBox "AutoNew runs when creating a document from a template"
End Sub
Sub AutoOpen()
    MsgBox "AutoOpen runs when opening a template as a document"
End Sub
Sub AutoExec()
    MsgBox "AutoExec runs when loading an add-in (a global template)"
End Sub

もう 1 つのシナリオは、開発マシンの Word セキュリティ設定でセキュリティ設定が「低」に設定されていないことです。


更新#2に関して、これは通常、VSTOをデバッグモードで実行すると発生します(コンパイルして実行する代わりにF5 Ctrl + F5)。どのように実行されているか確認できますか?どちらでもない場合、テスト マシンにデプロイすると、やはり normal.dot になりますか?

最後に、完全な起動スクリプトを投稿できれば、問題の真の原因を特定するのに役立ちます。

于 2011-03-22T18:00:25.167 に答える
0

2003 テンプレートは、DOCM または DOTM ファイルではなく、DOCX または DOTX ファイルを作成している可能性はありますか? 2003 以降では、DOCX または DOTX ファイルにある場合、マクロ コードは実行されません。

于 2011-03-17T16:01:57.487 に答える