
お世話になります。
下記にてローカルクエリの抽出結果をExcelへ出力しております。
Dim obj As Object
Dim MyDB As DAO.Database
Dim MyRs As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim out_path as String
Dim sheet_name as String
out_path = "出力先ファイルのフルパス(ファイル名含む)"
sheet_name = "出力先シート名"
Set MyDB = CurrentDb
Set obj = GetObject(out_path, "Excel.Sheet")
obj.Application.Visible = False
obj.Parent.Windows(1).Visible = True
Set qdf = MyDB.QueryDefs("ローカルクエリ名")
With qdf
.Parameters("[forms]![test]![id]") = Forms!test!id
Set MyRs = .OpenRecordset
.Close
End With
obj.Worksheets(sheet_name).Select ← (注)
obj.Application.Cells(24, 1).CopyFromRecordset MyRs
※ローカルクエリの抽出条件としてフォーム上のテキストボックスを
参照しているため、Parametersを使ってます。
とりえあず上記で抽出結果は出力されます。
但し、適当なExcelファイルを開いた状態で実行すると、(注)の箇所で
「実行時エラー1004 WorksheetクラスのSelectメソッドが失敗
しました」となってしまいます。
なお、Selectの箇所をActiveにすると「実行時エラー438 オブジェクトは
このプロパティまたはメソッドをサポートしていません。」と表示されます。
また、obj.Application.Visible = False の箇所で開いていた
Excelファイルが閉じてしまうのですが、そういうものなのでしょうか。
勉強不足で大変恐縮ですが、ご教授の程、宜しくお願い足します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
非常にこころもとない回答ですが、ちょっと調べてみました。
Dim XL As Object
Dim BK As Object
Dim SH As Object
Set BK = GetObject("d:\DATA\123.xlsm", "Excel.sheet")
Stop
として止めておいてイミディエイトウィンドウで
bk.worksheets(3).select
はオートメーションエラーで失敗しました。
でも、
?bk.worksheets(3).name や
?bk.worksheets("Sheet1").cells(1,1).value
bk.worksheets(2).cells(1,1) = "ABC" と代入
は成功しました。
なので、この場合の BK はシートの集合体なのだろうと思います。
クラスには、Excel.Chart というのもあるので
図?に関しては別の扱いのような・・・???なので
BK はブックの一部の様です。
bk.worksheets(3).select を成功させるためには
Set XL = BK.Parent.Application
XL.Windows(BK.Name).Visible = True
bk.worksheets(3).select
と2行追加で OK っぽい?です。?
確認するためには、Xl.Visible = true
としてみました。
Excelの大元の『親』が必要のようです。
しかし、
bk.worksheets(3).activate は無くてもなぜ成功するのか?
ヘルプ見ても謎は深まるばかり。。。
No.2
- 回答日時:
#1です
私も手詰まり状態になりつつありますが
> >また、"Excel.Sheet" を指定しないとどうなりますか?
> ⇒ obj.Worksheets(sheet_name).Select の箇所で、「実行時エラー1004
> WorksheetクラスのSelectメソッドが失敗しました」となりました。
これって、見出しがどうの・・・っていう質問での、私の Select エラーと同じ?
Select する時って、表示している状態・・・これが絡むのでしょうか?
Activate に変更してみてどうなりますか?
GetObject(パス)、GetObject(,"Excel.Application") の様な使い方しかやっていなかった。
(だったら回答するなって・・・申し訳ございません)
> 但し、その適当に開いていたファイルはobj.Application.Visible = False
> の箇所で閉じてしまいます。
これは閉じているのではなく、表示上見えないだけ?だと思います。
Excel(obj.Applicaion)を非表示っていう指定ですよね。
タスクマネージャで見て、EXCEL.EXE が立ち上がっていませんか?
> >> 適当なExcelファイルを開いた状態で
> には、sheet_name に設定したシート名はある?
> ⇒ 適当に開いたExcelファイルに同じシート名は存在しません。
これなら、無いものを指定したのでエラーになって当然かと・・・
デバッグで、GetObject の次の行で止めて、
ウォッチウインドウで obj を追ってみれば、どこを指している・・・わかると思います。
No.1
- 回答日時:
未検証なので嘘かもしれません
> Set obj = GetObject(out_path, "Excel.Sheet")
ここの Excel.Sheet を Excel.Workbook ?にしてみてどうなりますか?
また、"Excel.Sheet" を指定しないとどうなりますか?
指定するファイル名の拡張子は Excel のものですか?
> obj.Application.Visible = False
Vista+2007 では、GetObject で初めて Excel が起動された場合は
Visible = False 状態だったかと・・・
後半の記述を見ると obj はブック扱いでしょうか?
であれば、obj.Parent は Application になるので
> obj.Parent.Windows(1).Visible = True
の、1 固定は危ないかも
既に Excel を起動していたら、ブックとして追加される?ので
1 のところを obj.Application.Workbooks.Count
としておいた方が良いかも・・・バージョンによって違う?
obj がシート扱いならそのままでも・・・
でも
> obj.Worksheets(sheet_name).Select
だと・・・?
> 適当なExcelファイルを開いた状態で
には、sheet_name に設定したシート名はある?
obj がブック扱いなら以下でも
obj.Windows(1).Visible = True
※ 前の回答では oApp を Set して、Windows 内を探す事してました
遠回りだったかも・・・
30246kiku様
いつもご回答ありがとうございます。
>ここの Excel.Sheet を Excel.Workbook ?にしてみてどうなりますか?
⇒ 変更した箇所で「実行時エラー429 ActiveXコンポーネントはオブジェクトを
作成できません」となりました。
>また、"Excel.Sheet" を指定しないとどうなりますか?
⇒ obj.Worksheets(sheet_name).Select の箇所で、「実行時エラー1004
WorksheetクラスのSelectメソッドが失敗しました」となりました。
>指定するファイル名の拡張子は Excel のものですか?
⇒ Excelのものです(.xlsx)。
>後半の記述を見ると obj はブック扱いでしょうか?
⇒ 自分で書いておきながらいまいち分かっていないのですが、
「Set obj = GetObject(out_path, "Excel.Sheet")」ってことは
シート扱い?になるのでしょうか。。
>> 適当なExcelファイルを開いた状態で
には、sheet_name に設定したシート名はある?
⇒ 適当に開いたExcelファイルに同じシート名は存在しません。
**************
>の、1 固定は危ないかも
⇒ GetObjectの後に、n = obj.Application.Workbooks.Count
とし、obj.Parent.Windows(n).Visible = True
としたら、適当なファイルを開いていてもエラーが出なくなりました。
・・・ということは、結局objはブック扱いってことになるのでしょうか?
但し、その適当に開いていたファイルはobj.Application.Visible = False
の箇所で閉じてしまいます。
処理が完了し、出力先のExcelファイルを開くと、その閉じていたファイルも
一緒に開きます。。どういうことでしょうか?
度々申し訳ございませんが、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
【お題】甲子園での思い出の残し方
【お題】「球場の砂を持って帰る」はもう古いと思った高校球児が、甲子園で負けた際に、思い出に残そうと思って行ったこと
-
人生で一番思い出に残ってる靴
皆さんの人生で一番思い入れのある靴の話を伺ってみたいです。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
あなたが好きな本屋さんを教えてください
どのくらいの規模間で、どのような本が並んでいるか、どのような雰囲気なのかなどなど...
-
レコードセットの中身を配列に、そしてワークシートに。
Visual Basic(VBA)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BCPコマンドのリダイレクト値が...
-
ACCESS2000ディスクまたはネッ...
-
複数の表の外部結合について
-
SQLのエラー(~付近に不適切な...
-
クエリの存在チェック
-
エクセルマクロで指定範囲内の...
-
Oracle 8i コンマ(,)を含むデ...
-
PostgreSqlでFunctionの作成に...
-
GROUP BYでエラーが発生
-
Access2000環境に対応するMid関...
-
全ストアドを対象に文字列を置...
-
何も表示されない実行時エラー...
-
助けてください~~><
-
ACCESS ADOでupdateが効かない
-
エクセルのグループボックス枠...
-
SQL ServerのSQL実行時のエラー...
-
ACCESSで作成したアプリケーシ...
-
レポートが開けない。
-
エクセルからSQLサーバー ...
-
SQLサーバーのジョブでのexeフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
PostgreSqlでFunctionの作成に...
-
GROUP BYでエラーが発生
-
ACCESS ADOでupdateが効かない
-
ACCESS2000ディスクまたはネッ...
-
バッチファイルからのBCP起動に...
-
エクセルマクロで指定範囲内の...
-
全ストアドを対象に文字列を置...
-
エクセルのグループボックス枠...
-
オブジェクト名 '<table>' が無...
-
エクセルからSQLサーバー ...
-
sqlで文字列を最後に追加したい
-
oo4oのMovePreviousnメソッドに...
-
Access2000環境に対応するMid関...
-
ストアドの戻り値(配列)について
-
エラー:823 重大度:24 状態...
-
ACCESSで作成したアプリケーシ...
-
何も表示されない実行時エラー...
-
クエリの存在チェック
おすすめ情報