お世話になります。
現在、Accessにてツールを作成しておりますが、VBAより
特定のパスにあるExcelファイルのシート名を取得する必要が
あります。
※当該ツールはRuntime環境にて利用するため、CreateObject
が利用できません。
取得はDAO.Tabledefs を使って取得できましたが、GetObjectを
使って取得する方法をご教授頂けると幸いです。
シート名を取得するExcelファイルが、 C:\test\テスト.xlsxの場合
どのような記述になりますでしょうか。
勉強不足で大変恐縮ですが、ご教授のほど宜しくお願い致します。
No.7ベストアンサー
- 回答日時:
Access VBAよりExcelのシート名を取得
http://oshiete.goo.ne.jp/qa/8772873.html
ここでの OpenSchema を使用したものは不評だったでしょうか
というのは置いといて
関数を用意しました
いろんなパターンでテストはしていないので・・・
(完成形ではないので不具合等は修正してください)
GetExcelSheet に、Excelファイルのフルパスを与えると
シート名の配列が Variant で得られます。
内部でエラーがあったら、最後のエラー番号を返します。
内部の動きとして、GetObject で対象の Excel ファイルを開きます。
GetObject で初めて開かれた場合、そのファイルの Visible は False
False なら後始末としてそのファイルを閉じ、
結果 Excel で開いているファイルが無ければ、Excel を終了します。
つまり、既に開いていたものについては閉じる事はしません。
この関数の使い方は、後半の Samp1 を例としてください。
Public Function GetExcelSheet(sPath As String) As Variant
Dim oApp As Object, oBook As Object
Dim vA() As Variant, v As Variant
Dim i As Long
On Error Resume Next
i = 0
Set oBook = GetObject(sPath)
If (Not oBook Is Nothing) Then
For Each v In oBook.Worksheets
ReDim Preserve vA(i)
vA(i) = v.Name
i = i + 1
Next
Set oApp = oBook.Application
For Each v In oApp.Windows
If (v.Caption = oBook.Name) Then
If (Not v.Visible) Then
oBook.Close SaveChanges:=False
End If
Exit For
End If
Next
Set oBook = Nothing
If (oApp.Workbooks.Count = 0) Then oApp.Quit
Set oApp = Nothing
End If
GetExcelSheet = vA
If (Err <> 0) Then GetExcelSheet = Err.Number
End Function
Public Sub Samp1()
Dim v As Variant
Dim sS As String
Dim i As Long
' v = GetExcelSheet(CurrentProject.Path & "\test.xlsm")
v = GetExcelSheet("C:\test\テスト.xlsx")
If (IsArray(v)) Then
sS = "> シート数 = " & UBound(v) + 1 & vbCrLf
For i = 0 To UBound(v)
sS = sS & v(i) & vbCrLf
Next
MsgBox sS
End If
End Sub
余談)
piroin654 さんのは
> With appObj
> For Each appObj In .Sheets
部分の、For Each 用の変数を変更すれば良いと思います。
また、Shell で起動しておくことは不要と思います。
(/Runtime オプション付きで起動した中での確認なので?)
30246kiku様
いつもご回答ありがとうございます。
教えて頂いた方法でうまくいきました。
GetExcelSheet ありがとうございます!今回に限らず使わせて
いただきます!
というか、そのままコピーしただけです。。
内容はまだ理解しておりません。
当該ツールは、ご回答頂いていた「抽出結果をExcelへ出力」
と同じもので、出力前に該当のシートが存在するか否かのチェックを
行う為、シート名の取得が必要となりました。
大変助かりました。ありがとうございました。
No.6
- 回答日時:
たびたび、すみません。
うっかりが・・・。もう一つ、
If StrComp(Right$(strFile1, 3), "xlsx", 1) = 0 Then
の、
Right$(strFile1, 3)
で、3を4にしてください。つまり、
If StrComp(Right$(strFile1, 4), "xlsx", 1) = 0 Then
回答には、ファイルが既に起動されている場合のエラー処理を
していません。必要ですかね。探せます?
piroin654様
度々のご回答ありがとうございます。
本来であれば、ご回答頂いた内容をちゃんと理解しつつ
作り込まなければならないのですが。。なかなか時間をとれず
結局教えて頂いたものをコピペし若干加工する程度です。
30246kiku様の方で関数を作って頂いたので、今回は
こちらを採用させて頂きたいと思います。
いつもご回答頂き感謝です。
No.5
- 回答日時:
Shell(strFile2 & strFile3, vbHide)
のvbHideはプロセスが残るので、vbNormalFocusか、
vbNormalNoFocusにしてファイルを見えるように
しておいたほうがいいかもしれません。
No.4
- 回答日時:
うっかりしていました。
起動していない場合はエラーが・・・。やはり、Shellを用いてファイルを起動しておかないと
いけないですね。
方法はいろいろあるのですが、環境によってエラーが
でるかもしれませんが。わかりやすいところで以下のような
方法があります。
http://hanatyan.sakura.ne.jp/vbhlp/tap_kanren.htm
(やっていることは、No3の以下と同じですが。)
http://support2.microsoft.com/default.aspx?scid= …
この中の一部を使って、
Sub test()
Dim strFile1 As String
Dim strFile2 As String
Dim strFile3 As String
Dim ret As Long
Dim appObj As Object
strFile1 = "C:\test\テスト.xlsx"
If StrComp(Right$(strFile1, 3), "xlsx", 1) = 0 Then
strFile2 = "C:\Program Files\Microsoft Office\Office\Excel.exe "
strFile3 = Chr$(34) & strFile1 & Chr$(34)
ret = Shell(strFile2 & strFile3, vbHide)
End If
Set appObj = GetObject(strFile1)
With appObj
For Each appObj In .Sheets
MsgBox appObj.Name
Next
End With
Set appObj = Nothing
End Sub
なお、Shellの引数で、vbHideを使っています。引数は
いろいろあるので確認してみてください。
No.2
- 回答日時:
No1です。
ランタイム環境がないので確認はしていませんが、ランタイムでの実行については、以下の Run-Time Version of Microsoft Access
にあります。これはレポートを開く方法ですが、接続方法については
Shellを使ってExcelに接続することになると思われます。
No.1
- 回答日時:
GetObjectを使ってならば、普通には、
Sub test()
Dim appObj As Object
Dim strFile As String
strFile = "C:\test\テスト.xlsx"
Set appObj = GetObject(strFile)
With appObj
For Each appObj In .Sheets
MsgBox appObj
Next
End With
Set appObj = Nothing
End Sub
piroin654さま
いつもご回答ありがとうございます。
教えて頂いた内容のファイルのパスの箇所を修正しました。
path = CurrentProject.path
strFile = path & "\テスト.xlsx"
実行してみたところ、
>MsgBox appObj
の箇所で、「実行時エラー438 オブジェクトは、このプロパティまたは
メソッドをサポートしていません。」とのエラーが表示されました。
どのようなことが考えられますでしょうか。
度々申し訳ございませんが、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- その他(パソコン・スマホ・電化製品) EXCELのSUMPRODUCT関数について 2 2022/09/21 17:30
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) Excel VBA ファイル取得について フォルダの中に、ファイル名“会議“を含むファイルが1つまた 9 2022/10/12 01:18
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
Access VBAよりExcelのシート名を取得
その他(データベース)
-
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
accessへエクセルの複数のシートのインポートの仕方
Access(アクセス)
-
-
4
Access エクセルシート名変更
その他(プログラミング・Web制作)
-
5
ACCESSでのエクセルインポート時のシート有無の判定について
その他(データベース)
-
6
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
7
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
8
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
9
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
10
エクセルからアクセスにインポートする際のエラーについて
Access(アクセス)
-
11
ACCESS側からEXCELの書式を設定するには?
Visual Basic(VBA)
-
12
ACCESSのVBAにてExcelのシートをコピーしたい
その他(データベース)
-
13
アクセスでフォームビューがみれません?
Access(アクセス)
-
14
Access サブフォームでの選択行の取得
その他(データベース)
-
15
ACCESSのVBで、エクセルファイルの最終行を取得
Excel(エクセル)
-
16
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
17
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
18
(Access)複数条件の重複データを削除する方法
その他(ビジネス・キャリア)
-
19
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
20
AccessVBAでExcelを起動し、罫線を引きたいのですが、Exc
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBA Application visibleの...
-
exeファイルが実行中かどうか、...
-
AccessのMDBファイルを自動で最...
-
EXE間で同期をとりながらデータ...
-
system.mdwを見つけることが出...
-
*.asp の拡張子名がついたht...
-
HTMLファイルを自動で起動...
-
Access VBAよりシート名を取得...
-
起動中の全てのアプリ名の取得...
-
VBAで作成したマクロをデスクト...
-
HTMLファイルからexeファイルを...
-
Eclipseで、プロジェクト名のと...
-
classファイルについて
-
Eclipse(JAVA)のデバッグで他...
-
split関数で区切り文字がない場合
-
Eclipseのアンインストールの仕方
-
JSPのクラスをコンパイルできな...
-
eclipseで1ファイルの警告を100...
-
vs codeはオフラインでも使用で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBA Application visibleの...
-
jspのエラーが修正できません。
-
Access VBAよりシート名を取得...
-
HTMLファイルからexeファイルを...
-
VBAで作成したマクロをデスクト...
-
*.asp の拡張子名がついたht...
-
別のAccessファイルのフォーム...
-
system.mdwを見つけることが出...
-
量子化学計算ソフト GAMESS の...
-
VB5が起動しない
-
エラー この変数は宣言されて...
-
RPA(PowerAutomate)の実装について
-
vb.netでフォルダをcab圧縮する...
-
exeファイルが実行中かどうか、...
-
VistaのIISで動作するASPのExce...
-
java 17 を環境変数まで設定...
-
VB6.0 Shellによる終了監視に...
-
GUIアプリをコマンドラインで使...
-
AccessのMDBファイルを自動で最...
おすすめ情報