• ベストアンサー

アクセスからエクセルのマクロを実行したいのですが

Sub エクセルのVBA実行する() Dim xlsWB As Object Dim MyFileName As String MyFileName = "C:\test.xlsx" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!マクロ" Set xlsWB = Nothing End Sub と言うコードを作ったのですが エクセルファイルにはパスワードがかかっています。 パスワード付のエクセルファイルを開きマクロを実行するにはどうすればいいでしょうか?

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは マクロ付きなら拡張子はxlsxではなくてxlsmですよね? Sub エクセルのVBA実行する()   Dim xlsAP As Object   Dim xlsWB As Object   Dim MyFileName As String   MyFileName = "C:\temp\test.xlsm"   Set xlsAP = CreateObject("Excel.Application")   xlsAP.EnableEvents = False   Set xlsWB = xlsAP.Workbooks.Open(MyFileName, , True, , "1234")   xlsAP.Run xlsWB.Name & "!マクロ"   xlsAP.EnableEvents = True   xlsWB.Close False   Set xlsWB = Nothing End Sub 「C:\temp\test.xlsm」でパスワードは「1234」、マクロ名は「マクロ」としてます。

WIWJPCUHIABJ
質問者

お礼

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

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

エクセルで「Test.xlsx」というファイルに「1234」という読み取りパスワードのみを設定して、「D」ドライブに保存しました。 「Test.xlsx」のセルA1には「a」と入力してあります。 この状況で、アクセスのVBAから上記ファイルを開いて、画面に「a」と表示させてみました。 Sub Test() Set x = CreateObject("Excel.Application") Set y = x.Workbooks.Open(FileName:="D:\Test.xlsx", Password:="1234") Set z = y.Worksheets(1) MsgBox (z.Range("A1")) End Sub

WIWJPCUHIABJ
質問者

お礼

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

関連するQ&A

  • アクセスからエクセルのプロシージャーを実行させたい

    オフィス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)」 というエラーがでたので、パスは合ってます。 原因がわかる方、ご回答よろしくお願いします。

  • CreateObjectとGetObjectの違い

    当方エクセル2003です。 Sub test_CreateObject() Dim App As Excel.Application Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub --------------------------------------------------------- Sub test_GetObject() Dim App As Excel.Application Dim MyFileName As String Set App = GetObject(, "Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub この二つは何が違うのでしょうか? どちらも既存のエクセルファイルがが開きます。

  • アクセスからエクセルファイルが開けない

    Cドライブに、新規 Microsoft Office Excel ワークシート.xlsxと言うファイルを作成しました。 そのうえで、アクセスから ―――――――――――――――――――――――――――――――― Sub できない1() Dim xlsWB As Object Set xlsWB = CreateObject("C:\新規 Microsoft Office Excel ワークシート.xlsx") xlsWB.Application.Run xlsWB.Name Set xlsWB = Nothing End Sub ―――――――――――――――――――――――――――――――― をすると ------------------------ 実行時エラー '1004' マクロ'新規 Microsoft Office Excel ワークシート.xlsxを実行できません。 このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。 ------------------------ となります。 なので別の方法で開こうと、 ―――――――――――――――――――――――――――――――― Sub できない2() Dim xlApp As Excel.Application Dim xlBook As Excel.Application Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\新規 Microsoft Office Excel ワークシート.xlsx") xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ―――――――――――――――――――――――――――――――― にしたのですが、 実行時エラー’13’型が一致しません になります。 何がダメなのでしょう? マクロ付きファイルにしないとダメですか? もしくはファイル名に空白があるからエラーになるのでしょうか? そして、なぜ二つのコードのエラー内容がちがうのでしょう? それと、なぜか上記マクロを実行していると ~$新規 Microsoft Office Excel ワークシート.xlsx と言うファイルが出来上がります。(添付画像参照) でもファイルは開いていません。 この状態で、新規 Microsoft Office Excel ワークシート.xlsx をダブルクリックして開こうとすると、一瞬だけ画面に表れてすぐ消えます。 オフィスのバージョンは2007です。 ご回答よろしくお願いします。

  • アクセスからエクセルのプロシージャーを実行する際の

    アクセスからエクセルのプロシージャーを実行する際のエラーです。 おはようございます。長文ですがお許しください。 http://www.geocities.jp/cbc_vbnet/tips/excll.html(03.プロシージャの作成) を参考にアクセスからエクセルのプロシージャーを実行させてるのですがエラーになります。 エクセルファイルのパス→C:\Users\User\Desktop\a.xlsm エクセルファイルに入っているプロシージャ→test() *********************エクセルの標準モジュール********************* Sub test() MsgBox "" End Sub *********************アクセスのイベント********************* Private Sub 更新_Click() Dim App As Excel.Application ’参照設定済み Dim MyFileName As String Dim res As Variant MyFileName = "C:\Users\User\Desktop\a.xlsm" Set App = Excel.Application res = App.Application.Run(MyFileName & "!" & "test") End Sub このアクセスのイベントを実行すると、 「実行時エラー1004 マクロ'C:\Users\User\Desktop\a.xlsm!test'を実行できません。 このブックでマクロが使用できないか、また全てのマクロが無効になっている可能性があります。」 となります。 エクセルのマクロの設定は、「全てのマクロを有効にする」にしてあります。 a.xlsmはダブルクリックすれば普通に開けるし、testも問題なく実行できます。 そして、このアクセスのイベントを実行した後は、エクセルファイルが開けなくなります。 一瞬開くんですが、すぐ閉じてしまいます。 タスクマネージャーのプロセスからエクセルのアプリケーションを強制終了させると 再度開けるようになりますが、画像のように変なドキュメントの回復が出ます。 とりあえず、エクセルが開けなくなることは置いといて、 アクセスからエクセルのプロシージャーを実行する方法を教えてください。 当方オフィス2007です。ご回答よろしくお願いします。

  • Accessからoutlookのプロシージャー

    Accessからoutlookのプロシージャーを実行する方法は? AccessからExcelなら、エクセルに ************************ Sub エクセルマクロ() MsgBox "a" End Sub ************************ を作り、アクセス側で、 ************************ Private Sub AccessからExcel() Dim xlsWB As Object Set xlsWB = GetObject("D:\My Documents\up\エクセル.xls") xlsWB.Application.Run xlsWB.Name & "!エクセルマクロ" Set xlsWB = Nothing End Sub ************************ を実行すると、エクセル側のプロシージャーが実行されますが、 Accessからoutlookの場合は、どうすればいいでしょうか? Outlookの標準モジュールに、 ************************ Sub Outlookマクロ() MsgBox "a" End Sub を作っても、 アクセス側で、 Private Sub AccessからExcel() Dim xlsWB As Object Set xlsWB = GetObject("D:\My Documents\up\ ")‘ここをどうすればいいかわからない。 xlsWB.Application.Run xlsWB.Name & "! Outlookマクロ" Set xlsWB = Nothing End Sub ************************ と言うコードしか作れなくて、詰んでしまいます。 Accessからoutlookのプロシージャーを実行する方法をご教授ください。よろしくお願いします。

  • ややこしいですがご協力ください

    アクセスからエクセルを起動してエクセルで実行した変数をアクセスに持って帰りたいです。 【アクセス側】_ Sub エクセルの値を持ってくる() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim MyFileName As String Dim myStr As String Set xlApp = New Excel.Application MyFileName = "C:\Users\エクセル.xlsm" Set xlBook = xlApp.Workbooks.Open(MyFileName) xlApp.Visible = True xlApp.Run "'" & MyFileName & "'!" & "Excel_test" Set xlApp = Nothing MsgBox myStr ’★ End Sub 【エクセル側】 Sub Excel_test() Dim myStr As String myStr = "アクセスへ渡す" MsgBox myStr End Sub としたときに、アクセスの MsgBox myStr ★でも エクセルで実行させた変数を持って帰りたいのですが どこを修正すればよろしいでしょうか? ご教授よろしくお願いします。

  • エクセルからアクセスのプロシージャーを実行する

    エクセルからアクセスのプロシージャーを実行する方法を教えてください。 アクセスファイル名→ファイル1.accdb プロシージャー名→test1 なのですが、 エクセルで Sub ACCESSのプロシージャーを実行する() Dim OBJ As Object Set OBJ = GetObject("C:\Users\Desktop\ファイル1.accdb") OBJ.Application.Run OBJ.Name & "!test1" Set OBJ = Nothing End Sub としたら、 実行時エラー 2517 ’Microsoft Access!test1’プロシージャーが見つかりません。 になります。 test1は、アクセスの標準モジュール内に記載しています。 モジュール名も指定しないとだめなのでしょうか? その場合のコードの書き方がわからないので教授ください。 該当のアクセスファイルは既に起動しているときもあるし、してない時もあります。

  • 確実にエクセルをアクティブにする方法

    アクセスからエクセルを開いた時に エクセルがアクティブになったりならなかったり、 その時によって違うのですが 確実にエクセルをアクティブにする方法はありますか? AppActivateステートメントを使うという事がわかったのですが AppActivateをどうやって使えばいいでしょうか? ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sub test() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim MyFileName Dim MyFileFullName Dim プロシージャー名 MyFileName = "book.xlsm" MyFileFullName = CurrentProject.Path & "\" & MyFileName プロシージャー名 = "開く" Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Open(MyFileFullName) xlApp.Visible = True xlApp.Run "'" & MyFileFullName & "'!" & プロシージャー名 Set xlBook = Nothing Set xlApp = Nothing End Sub ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ で問題なくエクセルファイルを立ち上げられますが ここで確実にエクセルをアクティブ(手前に表示)にする方法を教えてください。

  • もし該当のアクセスファイルが開いているのなら開かな

    エクセルからアクセスを開く方法を教えてください。 そして、 「もし該当のアクセスファイルが開いているのなら開かない」 と言う条件も付け加えたいです。 Sub test1() Dim strAcName As String Dim accApp As Object strAcName = "D:\ アクセスファイル名.mdb " 「GetObject」「CreateObject」どちらにしても結果は同じ? Set accApp = GetObject(strAcName) Set accApp = CreateObject(strAcName) 既にAccessファイルを開いている場合は、Visible = Trueにしたらエラーになる。 If Not accApp Is Nothing Then accApp.Visible = True accApp.OpenCurrentDatabase (strAcName) End If Set accApp = Nothing End Sub だと、 OpenCurrentDatabase の部分で、実行時エラー7867 既にこのデータベースは開いています。 になります。 だからってこの部分をコメントアウトすると 前回と同じように Set accApp = Nothingを通り越すと 折角開いたアクセスファイルが閉じてしまいます。 エクセルからアクセスを開く時にもハイパーリンクで Sub test2() Dim strAcName As String strAcName = "D:\ アクセスファイル名.mdb " ThisWorkbook.FollowHyperlink strAcName End Sub で開けたのですが、 「もし該当のアクセスファイルが開いているのなら開かない」 が出来ないので、 「GetObject」か「CreateObject」を 使って開くのかな?と思っています。

  • 既に開いているエクセルを閉じるには?

    既に該当のファイルが開いているのなら閉じたいのですが xlBook.Quitだとエラーになります。 Sub test1() Dim xlApp As Excel.Application Dim xlBook As Workbook Dim FileName As String FileName = "C:\test.xlsm" Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安 Set xlBook = xlApp.Workbooks.Open(FileName) If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら MsgBox "既にファイルが開いているので閉じます。" xlBook.Quit 'エラー 438 End If xlApp.Quit 'これって何のために必要? Set xlBook = Nothing 'ココを通り過ぎるのにすごく時間がかかる。 Set xlApp = Nothing End Sub と言うコードを作りました。 xlBook.Quitがダメならどのコードを使えばいいでしょう? また、 GetObject("", "Excel.Application") と言う開き方でいいのでしょうか? あと、 xlApp.Quit は何のために必要なのでしょう? タスクマネージーのプロセスを見ると、 Set xlApp = GetObject("", "Excel.Application") を通る時に新しいEXCEL.EXEが作成され、 Set xlApp = Nothing を通り過ぎる時に、そのEXCEL.EXEが消えます。 だから xlApp.Quit は不要ですか?

専門家に質問してみよう