「夫を成功」へ導く妻の秘訣 座談会

1. ワードで作られた報告書の表の数値をエクセルにコピーし、
2. その数値を使ってエクセルのオートシェイプでグラフを描き、
3. グラフをもう一度ワードの所定の位置に図として貼りつける、
というマクロを作成しています。ワードの表をコピーするマクロと、エクセルでグラフを描くマクロは作成できました。

問題はエクセルのシートに配置したコマンドボタンをクリックすると、グラフの入ったセル範囲をコピーするまではできたのですが、その後にワードのマクロを指定して実行させる方法がわかりません。
1.→2.のエクセルのマクロを実行する方はauto_openで何とかなったのですが、2.→3.は既にワード文書は開かれていますし、auto_openでは1.の手順ができなくなってしまうので困っています。
もし、エクセルのマクロでワードを操作などできるのでしたらそれでもよいのですが…。

ワードのマクロは初挑戦で、色々サイトも探したのですが見つかりませんでした…。

使用していますのは、Windows98SE,Excel97,Word97です。
ご存知の方、どうぞよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ふむ、よくわからないんですけど


> エクセルからワードのマクロを指定して実行させることができますでしょうか?

だけでしたら、

Dim wdApp As Word.Application

Set wdApp = GetObject(, "word.application")
wdApp.Run "wdtest"

てな感じで、開いてる Word の wdtest というマクロが
Excel側から実行できます。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
試してみましたら、上手くいきました!
またわからないことがあれば、よろしくお願いいたします。

お礼日時:2003/09/09 15:53

むしろ、Word から Excel操作すればよいのでは。


Word の VBE の[ツール]→[参照設定]で
Microsoft Excel *.* Object Library に
チェックを入れてください。

Sub test()
  Dim xlApp As New Excel.Application
  
  ActiveDocument.Tables(1).Rows(1).Select
  Selection.Range.Copy
  With xlApp
    .Workbooks.Add
    .ActiveWorkbook.ActiveSheet.Paste
    .Charts.Add
    With .ActiveChart
      .SetSourceData Source:=xlApp.Worksheets(1).Range("A1").CurrentRegion
      .Location Where:=xlLocationAsObject, Name:="Sheet1"
    End With
    .ActiveSheet.ChartObjects(1).Copy
    Selection.EndKey Unit:=wdStory
    Selection.Paste
    .ActiveWorkbook.Close False
    .Quit
  End With
  Set xlApp = Nothing
End Sub
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

教えていただきましたマクロは、実行すると自動的にグラフウィザードの中にあるグラフをワードに貼りつけるまでしてしまうものなのですね。

ややこしい書き方をして申しわけありませんでしたが、グラフは「エクセルのオートシェイプで描いた」グラフなのです…。オートシェイプの円と線とテキストボックスを一部グループ化したものになります。

私の考えている手順というのは、
1. ワードの表に入力されている数値の一部をコピーして、既に作成してあるエクセルブックの所定のセルに貼りつけし、

2. (これはエクセルでの作業になります)
コントロールツールボックスのコマンドボタンをクリックすると、1.で貼りつけられた数値を使って、元々オートシェイプで作成されたグラフエリアの上に、オートシェイプの矢印とテキストボックスを使って線と項目を描き
(ここで手動でテキストボックスに修正を加える場合があります)、

3. もう一つのコントロールツールボックスのコマンドボタンをクリックすると、オートシェイプを含んだセル範囲をコピーして、ワード文書に、所定の位置と大きさで、コピーされたセル範囲を図として貼りつける。

というものです。グラフの手動での修正がなければワードから全部操作するのがいいのですが、使用する単位の変更などがあるので、こういった面倒な手順が必要になってしまいます…。

ですので、エクセルからワードのマクロを指定して実行させることができますでしょうか?
もしできないのであれば、ワード文書に「貼りつけ」ボタンを作成して、ユーザーにそれをクリックしてもらうという方法しかありませんでしょうか?

どうぞよろしくお願いいたします。

お礼日時:2003/09/08 10:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel2010VBAからWordの呼び出し

お世話になります。
Excel2003VBAで、次の様にWordファイルをオープンしていました。
Dim boReadOnly As Boolean
Dim objWord As Word.Application

boReadOnly = True
Set objWord = CreateObject("Word.Application")
With objWord
.Documents.Open toFullName, ReadOnly:=boReadOnly
.Visible = True
End With

これを、Excel2010VBAへ移植すると、WordファイルがExecelの後方に隠れて表示されてしまいます。
暫定として、.Visibleの次行に、
  .Activate
を追加しています。これを行なうと、Startアイコンの→横に、Wordアイコンが点滅するので、
Wordがオープンした事はわかります。

Wordファイルを呼び出し元のExcelの前面に表示させるには、どうすればいいでしょうか?
御教示よろしくお願いします。

お世話になります。
Excel2003VBAで、次の様にWordファイルをオープンしていました。
Dim boReadOnly As Boolean
Dim objWord As Word.Application

boReadOnly = True
Set objWord = CreateObject("Word.Application")
With objWord
.Documents.Open toFullName, ReadOnly:=boReadOnly
.Visible = True
End With

これを、Excel2010VBAへ移植すると、WordファイルがExecelの後方に隠れて表示されてしまいます。
暫定として、.Visibleの次行に、
  .Activate
を追加し...続きを読む

Aベストアンサー

Windows7,Office2010でもやってみましたが
.activateを入れれば前面になりました。

なお、前レスで書き落としましたが
Dim objWord As Word.Application
でやるとエラーで動かなかったので
Vista機、Win7機とも
Dim objWord As Object
で調べました。

Qエクセルのマクロでワードのマクロに引数を渡す方法

エクセルでワードのマクロを実行するのに下記のQAを参考にさせていただきました。
http://okwave.jp/qa647036.html

あと、ワードのマクロに引数を渡してやりたいのですがやり方がわかりません。

結構いろんなサイトを回りましたがなかったので、質問させて頂きました。

宜しくお願いしますm(__)m

Aベストアンサー

こんばんは。


 wdApp.Run "Test", arg1, arg2 'Wordの「Test」というマクロに、引数として渡されます。
 

MS-Word側

Sub Test(a,b)
 MsgBox a & b
End Sub

このようになります。

しかし、原則的には、
Set wdApp = CreateObject("Word.Application")

です。開いているオブジェクトを取るならGetObject ですが、そうでないものとして、Word等のオブジェクトの 一本釣りという方法があります。たぶん、トラブルはないと思うのですが、あまりお勧めしません。

また、かならず、Document をClose して、wdApp は、Quit してください。そこまで、書いていないコードを良く見ますが、プロセスに残してしまいますから、気をつけてください。

Qwordのマクロからexcelの起動

wordのマクロからexcelの起動方法が分かりません。
wordファイルのマクロからexcelファイル"abc.xls"を呼び出すには、vbaで具体的にどう記載すれば良いか教えて下さい。
vba初心者につき、宜しくお願いします。

Aベストアンサー

こんばんは。
それでは前回のサンプルについてこのように変更してみてください。

'Excelを起動する
Dim app As Excel.Application
Set app = CreateObject("Excel.Application")

たぶん、いけると思います。

Qexcel VBAを利用し、テンプレートとなるワードファイルの一部分を

excel VBAを利用し、テンプレートとなるワードファイルの一部分をエクセルデータで
置換を行い、新しいワードファイルとして保存するという処理を作成しています。

[環境]
Windows Vista
Office 2007
差し込み文書ではなく個別にファイルを作りたいという条件があります。

処理としては、
テンプレートを開く→置換を実施→別名で保存→テンプレートを変更せず閉じる
を繰り返し実施しています。
ただ、このやり方ですと最後の閉じる処理を行った際に、
「wordは、動作を停止しました」というエラーメッセージが頻繁に出てしまいます。
出来上がったファイル自体は問題なく読めているんですが。
処理自体に問題があるんでしょうか?
VBA自体初心者であり、他に良い方法などありましたらご教示いただけたら助かります。


#処理内容はだいぶ簡略化しています。
Public Function output_word2()
  Dim word        As New word.Application
  Dim document      As word.document
  Dim file_name      As String
  Dim output       As String
  Dim path        As String
  Dim row        As Integer
  
  Sheets(CALC_SHEET).Select 'データ取得用シート

  path = Application.ActiveWorkbook.path
  file_name = path & "\xxxxxx.doc"          '元の文書
  row = 3
  Do
    If Range("B" & row).Value = "" Then
      Exit Do
    End If
    
    With word
      .Documents.Open Filename:=file_name
      Set document = .ActiveDocument
    End With
    
    word.Selection.Find.Text = "{置換対象文字}"
    word.Selection.Find.Forward = True
    word.Selection.Find.Replacement.Text = Range("C" & row).Value
    word.Selection.Find.Execute , , , , , , , , , , wdReplaceAll
    
    output = path & "\output\" & Range("C" & row).Value  & ".doc"
    
    document.SaveAs Filename:=output   '置換後のword文書を別名で保存
    document.Close SaveChanges:=False
    word.Quit
    row = row + 1
    Set word = Nothing
    Set document = Nothing
  Loop
End Function

excel VBAを利用し、テンプレートとなるワードファイルの一部分をエクセルデータで
置換を行い、新しいワードファイルとして保存するという処理を作成しています。

[環境]
Windows Vista
Office 2007
差し込み文書ではなく個別にファイルを作りたいという条件があります。

処理としては、
テンプレートを開く→置換を実施→別名で保存→テンプレートを変更せず閉じる
を繰り返し実施しています。
ただ、このやり方ですと最後の閉じる処理を行った際に、
「wordは、動作を停止しました」というエラーメッセージが頻...続きを読む

Aベストアンサー

その元のコードは、癖になりますから、エラーが発生するとかいう以前に直した方がよいですね。時々、非VBAのプログラマの人にいますが、VBAは、ほとんど、予約語が存在しないので、変数名は、何でも付けられますが、それをそのまま使うと、他人からは、まったくコードを読めなくなってしまいます。エラーが発生しても原因がわかりにくくなります。

それから、ハングした後は、タスクマネージャーで、WinWord を削除しないと、エラーが繰り返すはずです。それで、メモリに残らないように、以下のように、エラーが発生したら、必ず、wdApp を外すようにします。

'//
 Sub WordDocDupulicate()
 Dim wdApp As Word.Application
 Dim wdDoc As Word.Document
 Dim wdRng As Word.Range
 Dim Fname  As String
 Dim sOutput As String
 
 Dim mPath  As String
 Dim mRow As Long
 Dim sh As Worksheet
 Set wdApp = New Word.Application
 
 Const CALC_SHEET As String = "Sheet1" '←シート名
 Set sh = Worksheets(CALC_SHEET) 'データ取得用シート
 sh.Select
 
 mPath = ActiveWorkbook.Path & "\"
 Fname = mPath & "xxxxxx.doc"
 
 sOutput = mPath & "\"
 On Error GoTo ErrHandler
 '元の文書
 If Dir(Fname) = "" Then
  MsgBox "元の文書がありません。", vbExclamation
  GoTo ErrHandler
 End If
 mRow = 3
 Do
  With wdApp
   Set wdDoc = .Documents.Open(Fname)
   Set wdRng = wdDoc.Content
  End With
  With wdRng.Find
   .Text = "[置換対象文字]"
   .Forward = True
   .Replacement.Text = Range("C" & mRow).Value
   .MatchCase = False
   .MatchWildcards = False
   .MatchFuzzy = True
   '.Execute Replace:=wdReplaceAll 'Ver Word2003
   .Execute , , , , , , , , , , wdReplaceAll
  End With
  sOutput = mPath & "test1\" & Range("C" & mRow).Value & ".doc"
  wdDoc.SaveAs sOutput '置換後のword文書を別名で保存
  wdDoc.Close False
  mRow = mRow + 1
 Loop Until sh.Range("C" & mRow).Value = ""
 wdApp.Quit
ErrHandler:
 If Err.Number > 0 Then
  MsgBox Err.Number & " : " & Err.Description
 Else
  Beep '正常終了
 End If
 Set wdRng = Nothing
 Set wdDoc = Nothing
 Set wdApp = Nothing
 Set sh = Nothing
End Sub

その元のコードは、癖になりますから、エラーが発生するとかいう以前に直した方がよいですね。時々、非VBAのプログラマの人にいますが、VBAは、ほとんど、予約語が存在しないので、変数名は、何でも付けられますが、それをそのまま使うと、他人からは、まったくコードを読めなくなってしまいます。エラーが発生しても原因がわかりにくくなります。

それから、ハングした後は、タスクマネージャーで、WinWord を削除しないと、エラーが繰り返すはずです。それで、メモリに残らないように、以下のように、エラーが...続きを読む

QExcelVBAで既に開いてるwordを閉じる

ExcelVBAで困っております。

現在Excelで住所録を作り、1度送付してから1ヶ月したら自動でwordを起動し
送付の印刷をするマクロを作ってます。

普通に開いて閉じることはできましたが、
既にwordが開いていた場合に読み込み専用になり、少し困っております。

理想としては、既に開いていた場合、1度保存して終了し、
再度開くようにしたいです。


分かる方がいらっしゃいましたら教えてください。

よろしくお願い致します。

Aベストアンサー

試してください。
(例)
Dim wdapp As Object
Dim wddoc As Object
Dim wdpath As String
Dim wdname As String

wdname = "abc.docx"

On Error Resume Next
Set wdapp = GetObject(, "Word.Application")
Set wddoc = wdapp.Documents(wdname)
On Error GoTo 0
If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub

wdpath = wddoc.FullName
wddoc.Save
wddoc.Close
wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False

Set wdapp = Nothing: Set wddoc = Nothing

試してください。
(例)
Dim wdapp As Object
Dim wddoc As Object
Dim wdpath As String
Dim wdname As String

wdname = "abc.docx"

On Error Resume Next
Set wdapp = GetObject(, "Word.Application")
Set wddoc = wdapp.Documents(wdname)
On Error GoTo 0
If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub

wdpath = wddoc.FullName
wddoc.Save
wddoc.Close
wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False

Set wdapp = N...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QエクセルからWordファイルをオープン

Excel VBAで、雑誌を参考に、次の様に作りました。
Function EwWordWordOpen(totoFullName As Variant)
  Dim objWordApp As Word.Application
  Set objWordApp = CreateObject("Word.Application")
  objWordApp.Documents.Open (totoFullName)
  Set objWordApp = Nothing
End Function

↑の方法ですと、次の動作となります。
1回目は何もしない。
2回目以降は、「ファイルがロックされています。読取専用で開きますか」のMsgBoxが表示されて、OKを入力するとWordを読取専用で開きます。

次に4行目のOpen行を
  objWordApp.Documents.Open (totoFullName), ReadOnly:=True
とすると、このステートは無視される様で何も行なわれません。

正しく、Wordファイルを開く方法を教えて頂きたく、よろしくお願いします。

Excel VBAで、雑誌を参考に、次の様に作りました。
Function EwWordWordOpen(totoFullName As Variant)
  Dim objWordApp As Word.Application
  Set objWordApp = CreateObject("Word.Application")
  objWordApp.Documents.Open (totoFullName)
  Set objWordApp = Nothing
End Function

↑の方法ですと、次の動作となります。
1回目は何もしない。
2回目以降は、「ファイルがロックされています。読取専用で開きますか」のMsgBoxが表示されて、OKを入力するとWordを読取専用で開きます。
...続きを読む

Aベストアンサー

> 1回目は何もしない。

キーボードで、Alt+Ctrl+Delキーの同時押しでタスクマネージャを
確認してもらうとわかりますが、実際には指定したWordのファイルは
非表示で展開済みになっています。
(タスクマネージャ上では「WINWORD.EXE」と表示されます)

そのため、2回目以降は二重で開こうとしていることになるため、
「読み取り専用で」というMsgBoxが表示されることになります。

これ(非表示展開)を回避するためには、「Visible」プロパティを
使用します。
(最初の状態で非表示なのは、VBAでの自動処理を行う中では、
 ユーザーから隠した状態の方が一般的、ということなのかと
 思います)


Function EwWordWordOpen(totoFullName As Variant)
  Dim objWordApp As Word.Application
  Set objWordApp = CreateObject("Word.Application")
  objWordApp.Documents.Open (totoFullName)
  objWordApp.Visible = True   '←【Wordアプリケーションを可視化】
  Set objWordApp = Nothing
End Function

> 1回目は何もしない。

キーボードで、Alt+Ctrl+Delキーの同時押しでタスクマネージャを
確認してもらうとわかりますが、実際には指定したWordのファイルは
非表示で展開済みになっています。
(タスクマネージャ上では「WINWORD.EXE」と表示されます)

そのため、2回目以降は二重で開こうとしていることになるため、
「読み取り専用で」というMsgBoxが表示されることになります。

これ(非表示展開)を回避するためには、「Visible」プロパティを
使用します。
(最初の状態で非表示なのは、VBAでの自...続きを読む

QVBAを使用してWordからExcelのマクロを実行したい

a.docからb.xlsのVBA(マクロ)の
Sub sample()
MsgBox "hello"
End Sub
を実行できるようにするにはどうすればよいのでしょうか?

使用OS:Windows XP
使用ソフト:Microsoft Excel 2003

ご存知の方がおられましたらご回答をよろしくお願いします。

Aベストアンサー

Sub sample()
MsgBox "hello"
End Sub

この↑コードは、本当にb.xlsの標準モジュールに
あるのですか?

シートのモジュールやThisworkbookモジュールに
あるのではないですよね?

簡単なコードなので
何度も試しているのですが、
正常の
hello と表示されます。

再度確認してみてください

Q印刷マクロ【エクセル】エクセルからワードを印刷する

タイトルの件、質問します。

下記の条件で、エクセルを開き、下記の3つの書面を
印刷する、マクロはできますか??

●エクセルブック【Sheet1】【Sheet2】
●ワード【文書1】
※ワードは開いていません。閉じたまま。
※ワードとエクセルブックは同じフォルダ内にあります。

ご存知の方、いらっしゃいましたら、宜しくお願いいたします!!

Aベストアンサー

マクロはエクセル側に書くんですね?
エクセルから開いていないワードを開き、印刷してワードは終了させればいいのですね?
エクセルのSheet1、Sheet2もPrintするんですね?

一例です。

Sub Word_Print()
  Dim wd As Object
  Set wd = CreateObject("Word.application")
  wd.Visible = True
  wd.documents.Open Filename:=ThisWorkbook.Path & "\文書1.doc"
  wd.ActiveDocument.PrintOut Background:=False
  wd.Quit
  Set wd = Nothing
  Sheets(Array("Sheet1", "Sheet2")).PrintOut
End Sub

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング