• 締切済み

WORDのアドイン

お世話になっております。 QNo.4228197で質問させて頂きました。 その節はありがとうございました。 WORDでも同様な事をやりたいのです。 ドキュメントを開いた際のイベントは、 Dim WithEvents oWord as Word.Application Private Sub oWorf_DocumentOpen(ByVal Doc As Word.Document) end sub でいいのでしょうか??

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

やり方は同じですよ IDTExtensibility2_OnStartupCompleteイベントの最後の方で if oHostApp.Name = "Microsoft Word" then   Set oWord = oHostApp End if IDTExtensibility2_OnBeginShutdownの最後に Set oWord = Nothing を追加 Private Sub oWord_DocumentOpen(ByVal Doc As Word.Document)   If oWord.Documents(1).CustomDocumentProperties.Count Then     MsgBox oWord.Documents(1).CustomDocumentProperties("文書番号").Value   End If end sub といった具合です

takao0429
質問者

補足

下記のようにしてテストしてみたのですが、うまく行きません。 宣言部 Dim WithEvents objWord As Word.Application IDTExtensibility2_OnConnectionイベント Set objWord = objHostApp IDTExtensibility2_OnBeginShutdownイベント Set objWord = Nothing Private Sub objWord_DocumentOpen(ByVal Doc As Word.Document) MsgBox "word Open" End Sub Private Sub objWord_DocumentActivate(ByVal Doc As Word.Document) MsgBox "word Activate" End Sub どこか違うのでしょうか。 宜しくお願い致します。 ※これって返答頂いても、それに返答できないんでしょうか。。。。

関連するQ&A

  • WORDのアドイン

    先日、以下のように教えて頂き試したのです、できませんでした。 ご回答が頂けないので再投稿をしました。 教えて下さい。 ------------------------------------------------ お世話になっております。 QNo.4228197で質問させて頂きました。 その節はありがとうございました。 WORDでも同様な事をやりたいのです。 ドキュメントを開いた際のイベントは、 Dim WithEvents oWord as Word.Application Private Sub oWorf_DocumentOpen(ByVal Doc As Word.Document) end sub でいいのでしょうか?? ------------------------------------------------------------ やり方は同じですよ IDTExtensibility2_OnStartupCompleteイベントの最後の方で if oHostApp.Name = "Microsoft Word" then   Set oWord = oHostApp End if IDTExtensibility2_OnBeginShutdownの最後に Set oWord = Nothing を追加 Private Sub oWord_DocumentOpen(ByVal Doc As Word.Document)   If oWord.Documents(1).CustomDocumentProperties.Count Then     MsgBox oWord.Documents(1).CustomDocumentProperties("文書番号").Value   End If end sub といった具合です ------------------------------------------------------------------- 下記のようにしてテストしてみたのですが、うまく行きません。 宣言部 Dim WithEvents objWord As Word.Application IDTExtensibility2_OnConnectionイベント Set objWord = objHostApp IDTExtensibility2_OnBeginShutdownイベント Set objWord = Nothing Private Sub objWord_DocumentOpen(ByVal Doc As Word.Document) MsgBox "word Open" End Sub Private Sub objWord_DocumentActivate(ByVal Doc As Word.Document) MsgBox "word Activate" End Sub どこか違うのでしょうか。 宜しくお願い致します。 ----------------------------------------------------------------

  • AccessVBAからWordのマクロを実行するには

    [環境]Access2000,Word2000 AccessVBAでWordのオブジェクトをつくりファイルを開くところまでは たどり着いたのですが、開いたWordファイルにあるマクロを実行させる ことが出来ずに困っています。 WordオブジェクトのApplicationとDocumentsオブジェクトの関係も把握 しきれていないため、おかしなソースになっているかも知れません。 よろしくお願いします。 sub DoMacro() Dim oWrd as Word.Application Dim oDoc as Word.Document Set oWrd = New Word.Application With oWrd Set oDoc = oWrd.Documents.Open("c:\test.doc") .Visible = True .Application.Run ("Macro1") oDoc.SaveAs "c:\newTest.doc" .Quit End With End Sub

  • 複数フォームへのイベントの通知方法について

    Visual Basic2005にてプログラミングをしております。プログラミング初心者です。 以下、どなたかご教授いただけませんでしょうか? あるクラスを定義し、そのクラスの1つのインスタントがイベントを出した時に、 フォーム1~フォーム3の各Formにイベントを通知する様なプログラムを作成しております。 複数フォームへのイベントの通知方法として、以下の様なやり方は一般的に正しいのでしょうか? プログラムを実行させて見ると、動作上は何の問題もなく動いている様に見えますが、 プログラミング経験が少ない事もあり、以下のやり方が本当に正しいのかどうか、あまり自信が持てません。 どなたかご教授いただけると助かります。宜しくお願い致します。 =================================================================================== 'クラスA Public Class classA   Public Event StatusChange(ByVal status As Integer)   Public Event MassageOutput(ByVal message As String)   Private status As Integer   Private Sub EventReport1()       status = 5       'statusの変更を通知するイベントを生成させる       RaiseEvent StatusChange(status)   End Sub   Private Sub EventReport2()       'メッセージを通知するイベントを生成させる       RaiseEvent MassageOutput("メッセージを通知します")   End Sub End Class 'モジュール Module moduleA   Public myInstance As New classA End Module 'フォーム1 Public Class form1   Private WithEvents myInstance1 As classA   Public Sub New()       InitializeComponent()       myInstance1 = myInstance   End Sub   Private Sub StatusChange(ByVal message As String) _                Handles myInstance1.MassageOutput       TextBox1.Text = message   End Sub End Class 'フォーム2 Public Class form2   Private WithEvents myInstance1 As classA   Public Sub New()       InitializeComponent()       myInstance1 = myInstance   End Sub   Private Sub StatusChange(ByVal status As Byte) _                Handles myInstance1.MassageOutput       TextBox1.Text = status.ToString   End Sub End Class 'フォーム3 Public Class form3   Private WithEvents myInstance1 As classA   Public Sub New()       InitializeComponent()       myInstance1 = myInstance   End Sub   Private Sub StatusChange(ByVal status As Byte) _                Handles myInstance1.MassageOutput       TextBox1.Text = (status + 10).ToString   End Sub End Class ===================================================================================

  • エクセルマクロですべてのファイル保存時コメントだす

    エクセルのアドインでファイル保存するときに”保存しますか?”の ダイアログをすべてのファイルに出したいのですが、 うまくいきません。どなたかお教えください。 PERSONAL_SAVE.XLS というファイルに以下のマクロを作成し C:\Documents and Settings\***\Application Data\Microsoft\Excel\XLSTART VBのClass1に 'Option Explicit Public WithEvents App As Application Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox ("保存しますか?") End Sub を作成し、 同じくVBのThisworkbookに Dim x As New Class1 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Set x.App = Application End Sub を作成します。 このときは、ほかのファイルに対しても 保存しますか? のメッセージがでます。 しかし、 このファイルをPERSONAL_SAVE.lxa として 保存し、ツール⇒アドイン で追加し、立ち上げても 同様な動きをしません。 どうしてでしょうか? インスタンス?の関係でしょうか?Private を Publicにしても同じでした。

  • VB.NET スレッドからのイベント受信について

    はじめて質問させていただく、VB.NET初心者です。 ただいまスレッド、イベント処理を作成中で Form1にButton1、Label1を貼り付け以下の様なプログラムを記述しました。 (スレッドにて5秒ごとにイベントを発生させます。) 'イベント引数 Public Class EventArgs Inherits System.EventArgs Public nowTime As String End Class 'イベント発行 Public Class EventTest Public Event _event(ByVal sender As Object, ByVal e As EventArgs) Public Sub Go() Dim args As New EventArgs() args.nowTime = Now.ToString RaiseEvent _event(Me, args) End Sub End Class 'フォーム内処理 'スレッド宣言 Dim MyThread As New System.Threading.Thread(AddressOf _Thread) Private WithEvents _test As New EventTest() 'イベント受信   Private Sub Handler(ByVal sender As System.Object, ByVal e As EventArgs) Handles _test._event Label1.Text = e.nowTime End Sub 'スレッド(5秒間隔でイベント発行) Private Sub _Thread() Dim i As Integer For i = 0 To 99 System.Threading.Thread.Sleep(5000) _test.Go() Next End Sub 'スレッド起動 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MyThread.Start() End Sub End Class 開発環境から普通に実行すれば正常に動作している様なのですが、 イベント受信部(Handler)のLabel1.Text = e.nowTime部に ブレークポイントを置いてLabel1のウォッチをするとその時点で 処理がとまってしまいます。なぜとまるのかが知りたいです。 作成方法がまずいのでしょうか? 皆様よろしくお願いいたします。

  • Word起動方法

    Visual Basic6についての質問です。 現在次のようなPGを組んでいます。 Sub NewWord() Dim mswApp As Object 'Word.Application Dim mswDoc As Object 'Word.Document 'ワードを取得か生成する Set mswApp = GetWord 'ドキュメントを追加 Set mswDoc = mswApp.Documents.Add '名前を付けて保存 mswDoc.SaveAs "C:\abc.doc" End Sub Private Function GetWord() As Object '起動中のワードを捕まえる On Error Resume Next Set GetWord = GetObject(, "Word.Application") On Error GoTo 0 '捕まえる事ができなかったら、新規に起動する If (GetWord Is Nothing) Then Set GetWord = CreateObject("Word.Application") '生成時は、非表示で起動するので、表示する GetWord.Visible = True End If End Function 上記を実行すると、開いている文書に同じ名前を指定することはできません。保存する文書に異なる名前をつけてください。というエラーがでてきます。 開いている文書とはなんのことでしょか?VBの他にアプリケーションは起動していません。名前を変更(abc.docのとこですよね?)してもエラーはでます・・・。 なにがいけないのでしょうか。教えてください><

  • VB6.0でPowerPoint上のイベントを取得したい

    VB6.0からPowerPointのファイルを開き、 PowerPoint上のイベントを取得したいのですが、 方法が分からず困っております。 具体的には、ツールバーのプレビューボタンが クリックされたことをVBで検知したいと考えています。 現状では下記のように、Applicationの閉じるイベントは 取得できたのですが、そこからどうして良いか分からない状態です。 良きアドバイスをお願い致します。 ---------------------------------------------------- Option Explicit Private WithEvents PPTApp As PowerPoint.Application '■パワポを開く Private Sub Command1_Click() Set PPTApp = New PowerPoint.Application PPTApp.Visible = True PPTApp.Presentations.Open (App.Path & "\test.ppt") End Sub '■パワポを閉じる Private Sub Command2_Click() PPTApp.Quit Set PPTApp = Nothing End Sub '■閉じるイベントを取得 Private Sub PPTApp_PresentationClose(ByVal Pres As PowerPoint.Presentation) MsgBox "閉じる" End Sub ----------------------------------------------------

  • wordでのhyperlinkマクロ作成方法

    通称poppyといいます。 excelでは各シートのマクロ定義で Private Sub Worksheet_followhyperlink(ByVal Target As Hyperlink) Application.Goto reference:=ActiveCell, scroll:=True End Sub と定義し、 thisworkbookでは Private Sub Worksheet_followhyperlink(ByVal sh As Object, ByVal Target As Hyperlink) Application.Goto reference:=ActiveCell, scroll:=True End Sub と定義すればhyperlinkでジャンプした先の画面表示では指定したセルが画面左上に表示されます。 このような方法をwordで実行したいのですが、マクロの作成方法を教えて下さい。 よろしくお願いいたします。

  • VBAのクラスのインスタンス化のタイミングについて

    こんにちはvbaのクラスのインスタンス化について質問があります。 私は普段使えないイベントを使用するときにクラスモジュールに WithEventsを使ってイベントを作成し それをプロシージャからインスタンス化して 作成したイベントを有効にするという手法をよく使います。 Excelのように最初からワークブックにイベントがある場合は、 ワークブックを開いたと同時にWorkbook_Openプロシージャから クラスをインスタンス化して作成したイベントを有効にするということが可能なのですが、 CATIAやInventorなど、一部のアプリケーションでは、 最初から使えるイベントが見つからず、 Subプロシージャでインスタンス化する方法しかみつかりません。 しかし、Subプロシージャを実行させるためには、 ボタンなどユーザー側に何らかのアクションとってもらうしかなく、 自動化するために作成したイベントなのに、そのイベントを有効にするために ユーザーにボタンを押してもらうという矛盾した構成になってしまいます。 クラスをインスタンス化する方法はSubプロシージャに記述するしかないのでしょうか? 自分がよく使っているコードを下に記述します。 下の例は、Excelで新しくブックを開いたときにメッセージを出すプログラムです。 アプリケーションレベルのイベントをクラスモジュールで作成しています。 これを有効にするためには標準モジュール内の Event_ONプロシージャを実行しなければなりません。 モジュールを実行する前まではいくら新しいブックを開いてもメッセージは出ません これをどのうようにしたらいいかご教授ください。 Excelの例 Classモジュール「Class1」に記述 -------------------------------------------------------------------- Private WithEvents APP As Application Private Sub APP_NewWorkbook(ByVal Wb As Workbook) MsgBox "新しいブックが開かれました" End Sub Private Sub Class_Initialize() Set APP = Application End Sub -------------------------------------------------------------------- 標準モジュール「Module1」に記述 -------------------------------------------------------------------- Dim CLS As class1 Public Sub Event_ON() Set CLS = New class1 End Sub --------------------------------------------------------------------

  • 自作クラスのイベントを外部ハンドラでスレッドセーフ

    ■.NETモジュールプロジェクト(DLL) Public Class MyClass   Public Event hoge( ByVal sender As Object, ByVal e As EventArgs )   Private WithEvents Timer As Timers.Timer   Private Sub New()     Timer = New Timers.Timer : Timer.Interval = 10 : Timer.Start()   End Sub   Private Sub fuga( ByVal sender As Object, ByVal e As EventArgs ) Handles Timer.Elapsed     RaiseEvent hoge( Me, New EventArgs ) ' 一定時間ごとにイベントを発生させる   End Sub End Class ■上の.NETモジュールを参照している Windows Form アプリケーションプロジェクト(EXE) Public Class Form1   Private WithEvents foo As MyClass.MyClass   Public Sub New()     InitializeComponent()     foo = New MyClass.MyClass   End Sub   Private Sub bar() Handles foo.hoge     TextBox1.Text = "baz" ' TextBox1 は デザイナで Form1 に貼り付け済み   End Sub End Class という 2 プロジェクトを含むソリューションを作成しました。実行すると、 有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'TextBox1' がアクセスされました。 というエラーが出てきます。 foo が MyClass ではなく、system.windows.forms.dll などに入っている Button や Form といったコントロールの場合は、上記の bar() のような書き方でもスレッドセーフに扱えるので、MyClass もForm1 のコードを修正する事なく、利用できたらなと思っています。 その場合、どのように MyClass を書けばいいでしょうか。環境は VS2008 で、.NET2.0 ベースです。

専門家に質問してみよう