Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3496 / 13646 ツリー ←次へ | 前へ→

【61835】Application.Run で他のブックのfunctionを呼び出したい tsgross 09/6/9(火) 11:05 質問[未読]
【61836】Re:Application.Run で他のブックのfuncti... イブX 09/6/9(火) 11:17 発言[未読]
【61839】Re:Application.Run で他のブックのfuncti... イブX 09/6/9(火) 11:29 発言[未読]
【61840】Re:Application.Run で他のブックのfuncti... tsgross 09/6/9(火) 11:36 発言[未読]
【61838】Re:Application.Run で他のブックのfuncti... つん 09/6/9(火) 11:24 回答[未読]
【61841】Re:Application.Run で他のブックのfuncti... tsgross 09/6/9(火) 12:00 発言[未読]
【61842】Re:Application.Run で他のブックのfuncti... つん 09/6/9(火) 12:18 発言[未読]
【61851】Re:Application.Run で他のブックのfuncti... tsgross 09/6/9(火) 13:59 発言[未読]
【61852】Re:Application.Run で他のブックのfuncti... Yuki 09/6/9(火) 14:05 発言[未読]
【61853】Re:Application.Run で他のブックのfuncti... tsgross 09/6/9(火) 14:16 発言[未読]
【61857】自己解決しました:Re:Application.Run で... tsgross 09/6/9(火) 14:34 お礼[未読]

【61835】Application.Run で他のブックのfunctio...
質問  tsgross  - 09/6/9(火) 11:05 -

引用なし
パスワード
   はじめまして。Excel の VBA で他のブックの関数を呼び出そうとしてうまくいきません。お知恵を拝借させてください。

■症状
二つのブック(Book1.xls, Book2.xls)を作ります。
Book1.xls から Book2.xls 上にある Function を呼び出したいと思うのですが、
「実行時エラー 1004
マクロ 'C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test' が見つかりません」
と言われて Book2.xls にある Test() という Function が呼び出せません。

■マクロ
■■Book1.xls
Private Sub Command_Button1_Click()
 Workbooks.Open("C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls")
 dim x as Long
 x = Application.Run( "C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test )
End Sub

■■Book2.xls
Public Function Test()
 Dim wb as Workbook
 set wb = ThisWorkbook
 MsgBox( "僕は" & wb.Name )
End Function

■その他
OS: Windows XP sp3
Excel 2000

【61836】Re:Application.Run で他のブックのfunc...
発言  イブX  - 09/6/9(火) 11:17 -

引用なし
パスワード
   >■■Book1.xls
>Private Sub Command_Button1_Click()
> Workbooks.Open("C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls")
 ファイルを開いてから↑、フルパスで指定した↓ファイルの
 マクロを実行すると、別のファイルとして扱われます。
 開いてからなら、パスの記述は必要ありません。

 開いていないのなら、↓のコードだけで自動でファイルが
 開きます。必要なら閉じる事も忘れずに。
> dim x as Long
> x = Application.Run( "C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test )
>End Sub

【61838】Re:Application.Run で他のブックのfunc...
回答  つん  - 09/6/9(火) 11:24 -

引用なし
パスワード
   ▼tsgross さん:
こんにちは

>■症状
>二つのブック(Book1.xls, Book2.xls)を作ります。
>Book1.xls から Book2.xls 上にある Function を呼び出したいと思うのですが、
>「実行時エラー 1004
>マクロ 'C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test' が見つかりません」
>と言われて Book2.xls にある Test() という Function が呼び出せません。
>
>■マクロ
>■■Book1.xls
>Private Sub Command_Button1_Click()
> Workbooks.Open("C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls")
> dim x as Long
ここ↓
> x = Application.Run( "C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test )
x = Application.Run("Book2.xls!Test")
でいいと思います。

>End Sub
>
>■■Book2.xls
>Public Function Test()
> Dim wb as Workbook
> set wb = ThisWorkbook
> MsgBox( "僕は" & wb.Name )
>End Function

それから、Functionだと

Public Function Test() As String

 Dim wb As Workbook
 Set wb = ThisWorkbook
 Test = "僕は" & wb.Name
 
End Function

こういう形ですよね。
で、文字列を返してるから、
Book1で受けるのも

> dim x as Long

じゃなくて、「String型」にしないとダメやないかな?

【61839】Re:Application.Run で他のブックのfunc...
発言  イブX  - 09/6/9(火) 11:29 -

引用なし
パスワード
   Application.Run ("'ファイルのフルパス'!マクロ名")

Application.Run ("'ファイル名'!マクロ名")
もしくは、
Application.Run ("ファイル名!マクロ名")

【61840】Re:Application.Run で他のブックのfunc...
発言  tsgross  - 09/6/9(火) 11:36 -

引用なし
パスワード
   すばやいご回答、ありがとうございます。とても助かります。

▼イブX さん:
>>■■Book1.xls
>>Private Sub Command_Button1_Click()
>> Workbooks.Open("C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls")
> ファイルを開いてから↑、フルパスで指定した↓ファイルの
> マクロを実行すると、別のファイルとして扱われます。
> 開いてからなら、パスの記述は必要ありません。
>
> 開いていないのなら、↓のコードだけで自動でファイルが
> 開きます。必要なら閉じる事も忘れずに。
>> dim x as Long
>> x = Application.Run( "C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test )
>>End Sub

……そうだったんですか! 早速試してみました…が、うまくいきませんでした。

(1) ファイルを開いてからファイル名だけで指定
Workbooks.Open("C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls")
dim x as Long
x = Application.Run( "Book2.xls!Test" )

→結果×「実行時エラー 1004 マクロ 'Book2.xls!Test'が見つかりません」

(2) ファイルを開かないでフルパスでいきなり application.run()
dim x as long
x = Application.Run( "C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test")

→結果×「実行時エラー 1004 マクロ 'C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test'」が見つかりません
---

モジュール名が違うのかと思って確認してみましたが、Book2.xls!Test() は(General)と表示されるモジュール(=多分「標準モジュール」ってことですよね?)にあります。

何がいけないのかなぁ…orz

【61841】Re:Application.Run で他のブックのfunc...
発言  tsgross  - 09/6/9(火) 12:00 -

引用なし
パスワード
   ご回答ありがとうございます。

ご指摘いただいた点:
(1) 既にそのブックを開いているなら、Application.Run() の引数は "Book2.xls!Test" でいい
(2) Book2.xls!Test の型が正しく指定されていない
について、ご指摘いただいたとおりに修正してみました。

……でも、ダメでした… orz

「実行時エラー 1004 マクロ'Book2.xls!Test" が見つかりません」

と言われてしまいます。別な方からのご回答も頂き、そちらも試してみましたが、やはり同じ状況です。

どうもBook2.xlsの function Test() が見つけられていないように見えます…。


▼つん さん:
>▼tsgross さん:
>こんにちは
>
>>■症状
>>二つのブック(Book1.xls, Book2.xls)を作ります。
>>Book1.xls から Book2.xls 上にある Function を呼び出したいと思うのですが、
>>「実行時エラー 1004
>>マクロ 'C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test' が見つかりません」
>>と言われて Book2.xls にある Test() という Function が呼び出せません。
>>
>>■マクロ
>>■■Book1.xls
>>Private Sub Command_Button1_Click()
>> Workbooks.Open("C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls")
>> dim x as Long
>ここ↓
>> x = Application.Run( "C:\Documents and Settings\First-Last\My Documents\excel\Book2.xls!Test )
>x = Application.Run("Book2.xls!Test")
>でいいと思います。
>
>>End Sub
>>
>>■■Book2.xls
>>Public Function Test()
>> Dim wb as Workbook
>> set wb = ThisWorkbook
>> MsgBox( "僕は" & wb.Name )
>>End Function
>
>それから、Functionだと
>
>Public Function Test() As String
>
> Dim wb As Workbook
> Set wb = ThisWorkbook
> Test = "僕は" & wb.Name
> 
>End Function
>
>こういう形ですよね。
>で、文字列を返してるから、
>Book1で受けるのも
>
>> dim x as Long
>
>じゃなくて、「String型」にしないとダメやないかな?

【61842】Re:Application.Run で他のブックのfunc...
発言  つん  - 09/6/9(火) 12:18 -

引用なし
パスワード
   そんなことはないやろと思いつつ・・・・

Book2の中に、別のモジュールに同じ「Test」というプロシージャがあるとか・・・・

んなことないですか?

【61851】Re:Application.Run で他のブックのfunc...
発言  tsgross  - 09/6/9(火) 13:59 -

引用なし
パスワード
   コメントありがとうございます。

▼つん さん:
>そんなことはないやろと思いつつ・・・・
>
>Book2の中に、別のモジュールに同じ「Test」というプロシージャがあるとか・・・・
>
>んなことないですか?

探してみましたが、無いようです。ひょっとしてと思って、関数の名前をTestからTestRunとか変えてみましたが、結果は同じでした。

あるブック内にある関数の一覧を見ることができれば、もっと容易に確認できたのかも知れませんが、やり方がわかりませんでした。すみません。

【61852】Re:Application.Run で他のブックのfunc...
発言  Yuki  - 09/6/9(火) 14:05 -

引用なし
パスワード
   ▼tsgross さん:

こんにちは。
イブXさんの
シングルコーテーション付きは試されましたか?

Dim strDir As String
Dim strProc As String

strDir = "'C:\Documents and Settings\First-Last\" & _
     "My Documents\excel\Book2.xls'"
strProc = "!TEST"
x = Application.Run(strDir & strProc)

【61853】Re:Application.Run で他のブックのfunc...
発言  tsgross  - 09/6/9(火) 14:16 -

引用なし
パスワード
   コメントありがとうございます。

▼Yuki さん:
>▼tsgross さん:
>
>こんにちは。
>イブXさんの
>シングルコーテーション付きは試されましたか?
>
>Dim strDir As String
>Dim strProc As String
>
>strDir = "'C:\Documents and Settings\First-Last\" & _
>     "My Documents\excel\Book2.xls'"
>strProc = "!TEST"
>x = Application.Run(strDir & strProc)

先ほど試してみました。結果は同じで、マクロが見つからないと言われます。

ひょっとしてセキュリティが!とか思って「マクロ>セキュリティ」を「低」にしてみましたが、結果は変わらず……orz。

【61857】自己解決しました:Re:Application.Run ...
お礼  tsgross  - 09/6/9(火) 14:34 -

引用なし
パスワード
   自己解決しましたので報告させていただきます。

■間違っていたところ
マクロのモジュールを「標準モジュール」だと思っていたが、実際にはSheet1上に存在していた。このため、呼び出しマクロ名は Book2.xls!Testではなく、Book2.xls!Sheet1.Testが正しかった。

■間違えた理由
マクロのモジュール名の確認方法を誤っていた。

Microsoft Visual Basic のマクロエディタ画面で関数にカーソルを合わせてみて、画面左上部に表示される枠に現れる文字でそのマクロのモジュール名を確認しようとしていましたが、これは誤りで、エディタ画面上部のプルダウン・メニュー「ツール>マクロ」で確認するべきでした。

■お礼(と、お詫び)
お忙しいなか、初歩的なミスにつき合わせてしまい、申し訳ありませんでした。お知恵をお貸しいただいたイブXさん、つんさん、Yukiさん、どうもありがとうございました。

3496 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free