ExcelからWord起動のマクロについての質問

このQ&Aのポイント
  • ExcelからWord起動のマクロを記述しましたが、Wordを終了後に再度起動するとWord閉じるメッセージが表示されます。
  • 2回目のWordを閉じても、タスクマネージャにない状態でも同じメッセージが表示されます。
  • GetObjectの戻り値がNothingにならない原因は何でしょうか?
回答を見る
  • ベストアンサー

Excelから、Word起動 マクロ

ExcelからWord起動のマクロを以下のように記述しました。 (1)Wordを起動、Word閉じるメッセージが出る (2)2回目Wordを閉じて、タスクマネージャに無い状態でも、Word閉じるメッセージが出る   GetObjectの戻り値が、Nothingにならない。 原因は、何でしょうか? Dim WdApp As Word.Application On Error Resume Next Set WdApp = GetObject(, "Word.Application") On Error GoTo 0 If WdApp Is Nothing Then Set WdApp = CreateObject("Word.Application") Else MsgBox "Wordを終了後に起動してください。", vbExclamation End If

  • P80
  • お礼率57% (4/7)

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

提示されたのが部分的なので外しているかもしれませんが 一回目は、Wordが無い場合 Set WdApp = CreateObject("Word.Application") で起動していますが、WdApp の解放・終了はどこで行っているのでしょう? 二回目以降は、WdAppが残っていますので、MsgBox が出ます。 タスクマネージャのプロセスタブに、Winword.exe がありませんか? Word が立ち上がっているか否かは下記のようにしても確認できるかな? Sub tx() Dim obj As Object Dim i As Integer For Each obj In GetObject("winmgmts:\\.\root\cimv2") _ .ExecQuery( _ "Select * from Win32_Process Where Name = 'winword.exe'") i = i + 1 Next MsgBox i & " 個あり" End Sub

その他の回答 (1)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

こちらで試したところでは何の問題もないようですが。

関連するQ&A

  • 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のとこですよね?)してもエラーはでます・・・。 なにがいけないのでしょうか。教えてください><

  • ExcelからAutoCADへの連携ができない

    ExcelのVBAでAutoCADの操作をしようと勉強中なのですが 参考資料を真似て -------------------------------------------------------- Function acad_int()   On Error Resume Next   Set AcadApp = GetObject(, "AutoCAD.Application") (上の行でERR'429'Activexコンポーネントはオブジェクトを作成できません。のエラー)     If Err Then      Set AcadApp = CreateObject("AutoCAD.Application")       AcadApp.Visible = True     End If   AcadApp.Visible = True End Function ----------------------------------------------------------- コピーしてExcelで実行すると、GetObjectで上記( )内のエラ-メッセージがでます。 参照でAutoCAD 2004 タイプライブラリ にはチェック入れています。 また、AutoCADを起動していても、していなくても同じみたいです。 使用しているのは ・AutoCAD LT2004 ・オフィス2003Excel ですが、何せ初心者で始めたばかりでここから進む事ができません。 どうかお力をお貸しください。

  • エクセルマクロで開いているアクセスのファイルを知る

    エクセル2007です。今立ち上がっているファイルを、エクセルの表に書き出すマクロを作りたいです。 エクセル自身はいうまでもなく、ワード、パワーポイントまで成功しました。けど、アクセスだけがうまくいきません。パワーポイント用testはうまく動くのに、アクセス用testはだめなのです。 For Each アクセス文書 In アクセスアプリケーション.databases でこけるのです。どうも、「databases」 というところが間違っていると、目星をつけました。どう書いたらいいのか教えてください。いろいろ調べましたがわかりませんでした。 Sub パワーポイント用test() Dim パワーポイントアプリケーション As Object Dim パワーポイント文書 As Object Dim カウンター As Long カウンター = 1 Range("A2").Select On Error Resume Next Set パワーポイントアプリケーション = GetObject(, "PowerPoint.Application") On Error GoTo 0 If パワーポイントアプリケーション Is Nothing Then Exit Sub For Each パワーポイント文書 In パワーポイントアプリケーション.Presentations カウンター = カウンター + 1 Cells(カウンター, 1) = パワーポイント文書.Name Cells(カウンター, 2) = パワーポイント文書.FullName Next Set パワーポイントアプリケーション = Nothing End Sub Sub アクセス用test() Dim アクセスアプリケーション As Object Dim アクセス文書 As Object Dim カウンター As Long カウンター = 1 Range("A2").Select On Error Resume Next Set アクセスアプリケーション = GetObject(, "Access.Application") On Error GoTo 0 If アクセスアプリケーション Is Nothing Then Exit Sub For Each アクセス文書 In アクセスアプリケーション.databases カウンター = カウンター + 1 Cells(カウンター, 1) = アクセス文書.Name Cells(カウンター, 2) = アクセス文書.FullName Next Set パワーポイントアプリケーション = Nothing End Sub

  • 【【大至急!!】】VB6.0(SP6)で任意のExcelのデータを参照する

    Windows2000環境で任意のエクセルが開かれた時に、GetObjectでxlAppをセットし、そのシートの値を参照するソースを作成しています。以前のURL http://oshiete1.goo.ne.jp/kotaeru.php3?q=1081151 を参考にそのままでは動作しなかったので、変更を加えました。しかし、依然として動作しません。 回答お願いします。 Do DoEvents For i = 0 To 1000 i = i + 1 Next i 'ここで、errmain.countupflagT2は2秒毎に立てる If errmain.countupflagT2 Then If xlApp Is Nothing Then On Error Resume Next Set xlApp = GetObject _ (, "Excel.Application") End If If xlbk Is Nothing Then On Error Resume Next Set xlbk = xlApp.ActiveWorkbook End If On Error Resume Next Set xlsh = xlbk.ActiveSheet If xlbk.ActiveSheet Is Nothing Then Else Judge End If If xlApp.Visible = False Then Set xlApp = Nothing Set xlbk = Nothing Set xlsh = Nothing End If End If Loop 上記のような感じで、エクセルが閉じた時には、逆の処理をしたいのですが・・・。 エクセルが起動しても、xlbk以降がSetできません。 xp環境ではそれなりに動いてますが。

  • Excelの終了について

    こんにちは。昨日もお世話になったguruguru2です。 早速質問なのですが、VBから新規Excelを起動したあとで、フォルダから既存のExcelファイルをダブルクリックで起動します。そのあとで、VBからExcelを終了する時、VBで起動したExcelのみを終了させたいのに、2つとも終了してしまいます。又、フォルダから起動するのではなく、スタートメニューからExcelを起動して、「ファイルを開く」で既存のファイルを開き、VBからExcelを終了するとVBで起動させたExcelのみ終了させることが出来ました。 どうしたら、前者の方法でVBで起動したExcelのみを終了させることが出来るのでしょうか。ソースも書きます。 Private Sub Excel起動() Dim objXls As Object On Error Resume Next Set objXls = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set objXls = CreateObject("Excel.Application") objXls.DefaultFilePath = mstrPath(最初に設定したパスです。) objXls.DisplayAlerts = False objXls.Workbooks.Add objXls.Visible = True End If AppActivate (objXls.Caption) Set objXls = Nothing Err.Clear End Sub Private Sub Excel終了() Dim objXls As Object On Error Resume Next Set objXls = GetObject(, "Excel.Application) If Err.Number = 0 Then     objXls.Quit End If Set objXls = Nothing End Sub わかりづらい説明ですみません。お願いします。

  • エクセルのマクロについて

    OS:XP Excel:2007 お世話になります。 マクロ初心者ですが宜しくお願いします。 エクセルにワードの文字を挿入するマクロを組んでみたのですがセルのサイズの取得方法が解りません。 挿入したオブジェクトのサイズを数値にて指定するところまでは出来たのですが、選択されているセルのサイズに合わせる為にはどうしたら良いでしょうか? 宜しくお願いします。 Sub 起動コピー() Call word起動 Call wordコピー Call 形式を選択して貼付 Call セルに合わせる End Sub Sub word起動() Set wd = CreateObject("word.Application") wd.Visible = True wd.Documents.Open Filename:= _ "C:\Documents and Settings\aaa.docx" End Sub Sub wordコピー() Dim wdApp As Word.Application Set wdApp = GetObject(, "word.application") wdApp.Run "copy" wdApp.quit End Sub Sub 形式を選択して貼付() ActiveSheet.PasteSpecial Format:="Microsoft Office Word 文 書 オブジェクト", Link:= _ False, DisplayAsIcon:=False End Sub Sub セルに合わせる() Selection.ShapeRange.ScaleHeight 1.08, msoFalse, msoScaleFr omTopLeft Selection.ShapeRange.ScaleWidth 0.93, msoFalse, msoScaleFro mTopLeft End Sub

  • AccessからWordの差し込み印刷文書を印刷するVBAについて教えてください

    Access初心者です。 使用バージョンは、Access・Wordともに2007です。 Accessのクエリー/テーブルをWord文書に差し込み、Accessから起動してその差し込み文書を印刷したいのですが、うまくいきません。 Getobjectを使ってWordの差し込み文書テストを印刷する以下のようなプロシジャを作成しました。 予め、手動でWordを起動してから、このプロシジャを実行すると、文書『テスト』を開く前に「次の文書を開くと次のコマンドが実行されます。Select*fromテーブル名 データベースのデータが文書に挿入されます続行しますか?」のメッセージが表示されて応答確認が来るのですが、Wordを起動せずに実行すると、上記のメッセージは表示されず、テーブル内のデータに更新がかかっているにもかかわらず、上記メッセージで「いいえ」と応答したのと同様の状態で印刷されます。 はたして、こんなプロシジャでよいのか、使用方法が間違っているのかすら見当がつきません。どなたかアドバイスをお願いいたします。 (作成したプロシジャ) On Error GoTo エラー発生 Dim WordFilePass As String WordFilePass = "C:\Users\User1\Documents\テスト.docx" Dim MyWord As Word.Application Set MyWord = GetObject(, "Word.Application") MyWord.Visible = True MyWord.Documents.Open FileName:=WordFilePass MyWord.ActiveDocument.PrintOut MyWord.Application.Quit Set MyWord = Nothing エラー発生: If Err.Number = 429 Then Set MyWord = CreateObject("Word.Application") Resume Next Else MsgBox "エラーNo : " & Err.Number & vbNewLine & vbNewLine & _ "エラー内容 : " & Err.Description End If

  • vbスクリプトからexcelのVBAを起動したい。

    vbスクリプトからexcelのVBAを起動したいので、初心者ながら下記のようにコーディングしましたが、excelのVBA;main()が実行できません。  <excelのVBA;main()は単独では正常に起動します。> vbスクリプトからexcelのVBAの起動の方法を教えて下さい。 そのスクリプトをタスク(元旦)に起動したいです。 <vbスクリプト コーディング> dim exlApp On Error Resume Next set exlApp = createobject("Excel.Application") exlApp.visible = true exlApp.Workbooks.Open "C:\年賀状.xls" exlApp.run "Main" If Err Then WScript.Quit End IF If Not(exlApp Is Nothing) Then exlApp.Quit set exlApp = nothing End If

  • エクセルVBAでメールに画像添付

    エクセル2010です。 以下のようなVBAでOutlookメールを作成しているのですが、本文の中に画像を添付する方法がわかりません。 下記で言えば strMOJI(0) と strMOJI(1) の間に画像を張り付けたいのです。 画像ファイルを添付するのではなく画像として見えるようにしたいのです。 どのように書けばよろしいでしょうか? Sub TEST001()   Dim oApp As Object   Dim objMAIL As Object   Dim strMOJI(1) As String   On Error Resume Next   Set oApp = GetObject(, "Outlook.Application")   On Error GoTo 0   If oApp Is Nothing Then     Set oApp = CreateObject("Outlook.Application")   End If   Set objMAIL = oApp.CreateItem(0)   strMOJI(0) = "こんにちは!" & vbCrLf & _   "テストです。。" & vbCrLf & _   "よろしくおねがいします。" & vbCrLf   strMOJI(1) = vbCrLf & _   "以上です。" & vbCrLf & _   "ABC株式会社" & vbCrLf & _   "emaxemax"   objMAIL.To = ""   objMAIL.CC = "xxxx@xxx.co.jp"   objMAIL.Subject = "テスト"   objMAIL.Body = strMOJI(0) & strMOJI(1)   objMAIL.Display End Sub

  • EXCEL VBAで空白削除のマクロを作りましたが

    削除されません。 下記のとおりですが、どう考えても動きません、どなたか修正をお願いします。 初心者です。宜しくお願いします。 Sub Ksakujyo() Dim ObjRange As Range On Error Resume Next Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8) On Error GoTo 0 If ObjRange Is Nothing Then MsgBox "キャンセルされました。" End If If Selection.Count = 1 Then Exit Sub On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Exit Sub End Sub

専門家に質問してみよう