アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

下記にてローカルクエリの抽出結果を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件)

非常にこころもとない回答ですが、ちょっと調べてみました。



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 は無くてもなぜ成功するのか?
ヘルプ見ても謎は深まるばかり。。。
    • good
    • 0

#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 を追ってみれば、どこを指している・・・わかると思います。
    • good
    • 0

未検証なので嘘かもしれません



> 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 内を探す事してました
 遠回りだったかも・・・
    • good
    • 0
この回答へのお礼

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ファイルを開くと、その閉じていたファイルも
   一緒に開きます。。どういうことでしょうか?


度々申し訳ございませんが、よろしくお願い致します。

お礼日時:2014/10/24 20:04

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

関連するカテゴリからQ&Aを探す