プロが教えるわが家の防犯対策術!

はじめまして。
以下のような処理ができるかどうか教えて下さい。

<環境>
Windows XP
Excel2002 SP-1

<内容>
2つのブックが用意されているとします。

【ブックA】
 マスタと集計表が含まれる。
 ユーザーはシート変更の権限、およびVBA変更権限を持たないため、
 一切の変更はできない。

【ブックB】
 一括印刷専用機能が含まれる。

処理としては、
(1)ブックBを起動させ、ブックBのSheet1にある「処理実行」ボタンを押下。
(2)(1)を実行すると、印刷部数を入力するInputBox表示。
(3)(2)で数値入力後、それをパラメータとして保持。
(4)ブックAを起動させ、その中に含まれる、
  処理を実行するための関数を呼び出す。

ブックBより処理実行をかけ、ブックAに含まれる関数を遠隔で
実行できないかということです。

もしよい方法があったら教えて下さい。お願いします。

A 回答 (2件)

Application.Run macro:="処理名"



ヘルプのRun メソッドの使用例
mySum = Application.Run("MYCUSTOM.XLM!My_Func_Sum", 1, 5)

参考URL:http://www2s.biglobe.ne.jp/~iryo/2vba/vba26y.htm …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Application.Run (ファイル名(フルパス)!マクロ名)
で処理が完結しました。
他ブックに仕込まれているモジュールを遠隔で動かすというのは意外にやったことが無かったので、参考になりました。

お礼日時:2005/05/12 19:09

要するに、読み取り専用のブックを外部のブックから、印刷させようとしていて、


その印刷部数を、外部ブックからコントロールさせようとしている、というわけですね。
二通り考えてみました。

以下は、きちんとしたテストをしたわけではありませんので、コードを良く調べてからお使いください。test_2は、最初から、PrintAreaが設定されていたら、確か、.Selectとかは要りませんから、その前のVisible =True も要らないような気がしますね。

なお、私個人として、test_1 の方に、軍配が上がると思っています。1番目は、ご要望に沿っているか分かりませんが、開かれる側のマクロ側に、プロシージャを置いて、引数で、印刷ページを決めます。

Sub test_1()
 Dim PageNum As Integer
 Const BookName As String = "Book1.xls"
 Const MacroName As String = "PrintPrc"
PageNum = Application.InputBox("ページ枚数を指定してください", Type:=1)
If VarType(PageNum) = vbBoolean Or PageNum = 0 Then
  Exit Sub
End If
 'パスワードと読み取りパスワード
 Workbooks.Open BookName, , , , "111", "222"
 Run "macro050511a.xls" & "!" & MacroName, PageNum
 Workbooks(BookName).Close False
End Sub

'相手側のブックのマクロを統合させた場合。
Sub test_2()
Dim PageNum As Variant
Const BookName As String = "Book1.xls"
PageNum = Application.InputBox("ページ枚数を指定してください", Type:=1)
If VarType(PageNum) = vbBoolean Or PageNum = 0 Then
  Exit Sub
End If
With CreateObject("Excel.Application")
 'パスワードと読み取りパスワード
  On Error GoTo ErrHandler
 .Workbooks.Open BookName, , , , "111", "222"
 .Visible = True
  'シート1の印刷
  With .Workbooks(BookName).Worksheets(1)
   .Select
   .PageSetup.PrintArea = .Range("A1").CurrentRegion
   .PrintOut Copies:=PageNum, Preview:=True
   DoEvents
  End With
ErrHandler:
  If Err.Number > 0 Then
   MsgBox Err.Number & "(" & Err.Description & ")"
  End If
 .Workbooks(BookName).Close False
 .Quit
End With
End Sub
    • good
    • 0
この回答へのお礼

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

実はですね・・・。
印刷部数は、ユーザー側でInputBoxにて指定した上で、
実際に行いたかったのは、開いた相手方のマクロだったんです。
しかし、挙げて頂いたサンプルは今後発生しうるケースですので、
ぜひ参考にさせていただきたいと思います。

お礼日時:2005/05/12 19:12

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