オフィス2007です。
//////////////////////////////////////////////////////////
‘Excel側の標準モジュール
//////////////////////////////////////////////////////////
Sub Excelのプロシージャー()
MsgBox "Excelです"
End Sub
//////////////////////////////////////////////////////////
‘Access側の標準モジュール
//////////////////////////////////////////////////////////
Sub Accessのプロシージャー()
Dim xlsWB As Object
Dim MyFileName As String
MyFileName = "D:\Accessからプロシージャーの実行テスト用ファイル.xlsm"
Set xlsWB = GetObject(MyFileName)
xlsWB.Application.Run xlsWB.Name & "!Excelのプロシージャー"
Set xlsWB = Nothing
End Sub
の状態で、アクセス側から Accessのプロシージャー実行すると、
//////////////////////////////////////////////////////////
マクロ'Accessからプロシージャーの実行テスト用ファイル.xlsm!Excelのプロシージャー'
を実行できません。
このブックでマクロが使用できないか、
またはすべてのマクロが無効になっている可能性があります。
//////////////////////////////////////////////////////////
となります。
エクセル側は、「すべてのマクロを有効にする」にしているし、エクセルファイルを単独で開き、
Excelのプロシージャーを実行すると問題なく動きます。
同じ条件で、2003で検証すると問題なく動きます。(拡張子は適宜変えてます)
エクセルのパスが間違ってるのかな?と思い、適当なパスに変えたところ、
「オートメーション操作中にファイル名またはクラス名を見つけられませんでした。(Error 432)」
というエラーがでたので、パスは合ってます。
原因がわかる方、ご回答よろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
ご質問を何度か読みなおしてみて、はっきりしない部分がいくつかありました。今は、回答に足るだけの情報を持ちあわせていません。
不明な点は、
・One PC に、2つのバージョンが入っているかどうか。
・Access 2007 から、Excel 2003 と Excel2007 を使いわけようとしているのか。
・Access 2003 - Excel 2003 が成功して、Access 2007 - Excel 2007が不成功なのか。
どうやら、最初のOne PCに、2つのバージョンが入っているのではなさそうだ、ということだけは、検証の上分かりました。
あくまでも、オートメーションということで考えてみました。
Access 2007 - Excel 2007 ×(失敗)
Access 2003 - Excel 2003 ?(2 Versionsの中で、これは難しい)
Access 2007 - Excel 2003 ?(2 Versionsの中で、これも難しいはずです)
[難しいというのは簡単ではないというだけで、可能です。しかし、そのようなことは、ほぼありえない。]
PCによって違うなら、
Access 2003 - Excel 2003 ○(成功)
ご質問から、以上の推論を立ててみました。
ご質問のコードは、Accessユーザー独特(MS側のサンプルがそうです)のコードのようです。
>Set xlsWB = GetObject(MyFileName) 'Excelファイル名指し
これで、問題はないはずですが、私自身は、Office 2007で、このようなことはしたことがありません。このコードは、特定のインスタンスの開いていることが条件で、そのインスタンスに接続しているのですから、Excelが起動できない状態だったら、成立しません。だから、Excel VBAやVBプログラマでは、このようなダイレクトにファイル名の名指しはしていません。それは、エラーを想定してコードを組むからです。
こういう場合は、一旦、CreateObject("Excel.Application") で、Excelのオートメーション・オブジェクトを作ってしまえば、セキュリティは通るはずです。
Set xlsWB = CreateObject("Excel.Application")
xlsWB.Run xlsWB.Name & "!Excelのプロシージャー"
Set xlsWB = Nothing
元の質問を読み違えていたら、この回答は、すべて無意味です。その場合は、どうか、ご質問内容を、もう一度検証した上で、こちらの回答は、お見捨てください。
説明不足で申し訳ございません。
一つのPCに対してオフィスは1つです。
会社のPCと自宅のPCで検証してました。
バージョンを跨いで使おうとはしていません。
会社のPCではacces2003からexcel2003へ
自宅のPCでは、access2007からExcel2007へ
行なおうとしてました。
>・Access 2003 - Excel 2003 が成功して、Access 2007 - Excel 2007が不成功なのか。
そうなんです。
仰る通りAccess 2003 - Excel 2003 は成功します。ご明察です。
GetObjectをCreateObjectに変更したらうまくいきました!
GetObjectが原因のようですね。
ありがとうございました。大変参考になりました。
No.1
- 回答日時:
あまり参考にならないかもしれませんが、
渡辺ひかる の「ExcelVBA 実用サンプルコレクション(ISBN4-7973-2087-7)]
Office連携 P589 にExcelからAccessを起動し、reportを印刷する。
と言うサンプルがあります。
ExcelにてAccessのObjectを設定し、そのObjectを操作することで、
実態としてのAccess(Acessのマクロ等)を動かすというものです。
dim myAcApp as Access.Application
Set myAcApp = CreateObject("Access.Application")
With myAcApp
--
--
End With
Set myAcApp = noyhing
アクセスからエクセルのプロシージャーを実行させたいので逆にして実行してみましたが、
ピボットテーブルの操作なども含まれている為、
エクセル側で作成したsubプロシージャーを実行したいのです。
ちなみにアクセス側で、
Call Excelのプロシージャー
を追加してみたところ、コンパイルエラーになってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
エクセルファイル名に更新日時...
-
Wordで差込印刷した後に別々の...
-
EXCEL 検索時の設定
-
ExcelブックをGoogleスプレッド...
-
エクセル UserForm 呼び出しで...
-
パワーポイントの自動開始方法
-
Excel csv保存 列数が異なる場...
-
複数のexcelのファイルを一括で...
-
VBAでパワーシェルを実行したい...
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
カンマ区切りのCSVファイルから...
-
Windows10でコマンドプロンプト...
-
エクセルで複数のコメントのサ...
-
SaveAsの保存先について
-
バッチファイル 別ファイルにリ...
-
バッチファイル XCOPYで上書き...
-
【VB.NET】App.configにファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
ExcelブックをGoogleスプレッド...
-
Wordで差込印刷した後に別々の...
-
Excel csv保存 列数が異なる場...
-
エクセルファイル名に更新日時...
-
エクセル UserForm 呼び出しで...
-
サブフォルダから部分一致のエ...
-
実行時エラー52
-
エクセルでcsvファイルを開いて...
-
マクロ実行後、表示がおかしくなる
-
VBAでマクロを使って、マクロ無...
-
複数のexcelのファイルを一括で...
-
PowerPoint 2002でファイル名を...
-
エクセルのマクロで行と列の削...
-
大量のCSVファイルをExcel形式...
-
EXCEL 検索時の設定
-
For~Nextルーチンで最初の1回...
-
処理速度にムラがあり過ぎる
-
エクセルで、フィルタかけたま...
おすすめ情報