Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5567 / 13645 ツリー ←次へ | 前へ→

【49960】保存してあるxlsファイルのシート名は? ベナジザ 07/6/30(土) 20:12 質問[未読]
【49961】Re:保存してあるxlsファイルのシート名は? ichinose 07/6/30(土) 22:27 発言[未読]
【50113】Re:保存してあるxlsファイルのシート名は? ベナジザ 07/7/9(月) 22:53 質問[未読]
【50114】Re:保存してあるxlsファイルのシート名は? かみちゃん 07/7/9(月) 23:11 発言[未読]
【50116】Re:保存してあるxlsファイルのシート名は? ベナジザ 07/7/10(火) 0:38 質問[未読]

【49960】保存してあるxlsファイルのシート名は?
質問  ベナジザ  - 07/6/30(土) 20:12 -

引用なし
パスワード
   いつもお世話になっております。

保存してあるxlsシート名を把握する方法を教えてください。

現在は保存してあるファイル名を把握した後、開きシート名を把握するというコードで処理していますが、より処理を早めるため、”把握したファイルを開く”を実施したくないのです。

以上 よろしく おねがいします。

【49961】Re:保存してあるxlsファイルのシート名は...
発言  ichinose  - 07/6/30(土) 22:27 -

引用なし
パスワード
   ▼ベナジザ さん:
こんばんは。

>
>保存してあるxlsシート名を把握する方法を教えてください。
>
>現在は保存してあるファイル名を把握した後、開きシート名を把握するというコードで処理していますが、より処理を早めるため、”把握したファイルを開く”を実施したくないのです。

ファイルはオープンしていますよ!!
ただ、Excelがブックとして、開かないだけです。

処理が速いか否かは、試してみてください。

標準モジュールに
'==========================================================
Sub test()
  Dim ans As Variant
  Dim nm As Variant
  ans = get_shtnm("D:\My Documents\sample.xls")
'          ↑シート名を取得したいxlsファイルのフルパス   
  For Each nm In ans
    MsgBox nm
    Next
End Sub
'==========================================================
Function get_shtnm(ex_path As String) As Variant
  On Error Resume Next
  Dim cnt As Long
  Dim mcnt As Long
  Dim g0 As Long
  Dim g1 As Long
  Dim cat As Object
  Dim tbl As Object
  Set cat = CreateObject("ADOX.Catalog")
  cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  "Data Source=" & ex_path & ";Extended Properties=Excel 8.0"
  ReDim shtnm(1 To cat.Tables.Count)
  g1 = 0
  For Each tbl In cat.Tables
   mcnt = UBound(Split(tbl.Name, "$"))
   cnt = 0
   For g0 = 1 To Len(tbl.Name)
     If Mid(tbl.Name, g0, 1) = "$" Then
      cnt = cnt + 1
      If cnt <> mcnt Then
        shtnm(g1 + 1) = shtnm(g1 + 1) & Mid(tbl.Name, g0, 1)
        End If
     Else
      shtnm(g1 + 1) = shtnm(g1 + 1) & Mid(tbl.Name, g0, 1)
      End If
     Next
   g1 = g1 + 1
   Next
  Set cat = Nothing
  Set tbl = Nothing
  get_shtnm = shtnm()
  Erase shtnm()
  On Error GoTo 0
End Function

【50113】Re:保存してあるxlsファイルのシート名は...
質問  ベナジザ  - 07/7/9(月) 22:53 -

引用なし
パスワード
   ichinose さん:
回答ありがとうございます。
(当方の返信が遅れてスイマセン)

早速、紹介してもらったコードをトライしたところ
"Split"でのコンパイラーエラー(SubまたはFunctionが定義されていません)が発生しました。これはもしかすると、Excelのバージョンが古い(97)ためでしょうか?


▼ichinose さん:
>▼ベナジザ さん:
>こんばんは。
>
>>
>>保存してあるxlsシート名を把握する方法を教えてください。
>>
>>現在は保存してあるファイル名を把握した後、開きシート名を把握するというコードで処理していますが、より処理を早めるため、”把握したファイルを開く”を実施したくないのです。
>
>ファイルはオープンしていますよ!!
>ただ、Excelがブックとして、開かないだけです。
>
>処理が速いか否かは、試してみてください。
>
>標準モジュールに
>'==========================================================
>Sub test()
>  Dim ans As Variant
>  Dim nm As Variant
>  ans = get_shtnm("D:\My Documents\sample.xls")
>'          ↑シート名を取得したいxlsファイルのフルパス   
>  For Each nm In ans
>    MsgBox nm
>    Next
>End Sub
>'==========================================================
>Function get_shtnm(ex_path As String) As Variant
>  On Error Resume Next
>  Dim cnt As Long
>  Dim mcnt As Long
>  Dim g0 As Long
>  Dim g1 As Long
>  Dim cat As Object
>  Dim tbl As Object
>  Set cat = CreateObject("ADOX.Catalog")
>  cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
>  "Data Source=" & ex_path & ";Extended Properties=Excel 8.0"
>  ReDim shtnm(1 To cat.Tables.Count)
>  g1 = 0
>  For Each tbl In cat.Tables
>   mcnt = UBound(Split(tbl.Name, "$"))
>   cnt = 0
>   For g0 = 1 To Len(tbl.Name)
>     If Mid(tbl.Name, g0, 1) = "$" Then
>      cnt = cnt + 1
>      If cnt <> mcnt Then
>        shtnm(g1 + 1) = shtnm(g1 + 1) & Mid(tbl.Name, g0, 1)
>        End If
>     Else
>      shtnm(g1 + 1) = shtnm(g1 + 1) & Mid(tbl.Name, g0, 1)
>      End If
>     Next
>   g1 = g1 + 1
>   Next
>  Set cat = Nothing
>  Set tbl = Nothing
>  get_shtnm = shtnm()
>  Erase shtnm()
>  On Error GoTo 0
>End Function

【50114】Re:保存してあるxlsファイルのシート名は...
発言  かみちゃん  - 07/7/9(月) 23:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

横から失礼します。

>"Split"でのコンパイラーエラー(SubまたはFunctionが定義されていません)が発生しました。これはもしかすると、Excelのバージョンが古い(97)ためでしょうか?

そうです。古いと感じるならば、バージョンを明記して質問するようにしましょう。

Replace関数、InStrRev関数、Split関数などは、Excel200以降対応になります。
代替関数は、以下が参考になると思います。
http://www.moug.net/tech/exvba/0100010.htm
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html

【50116】Re:保存してあるxlsファイルのシート名は...
質問  ベナジザ  - 07/7/10(火) 0:38 -

引用なし
パスワード
   ▼かみちゃん さん:

アドバイス有難うございます。目的の対応OKです。
今回の一番の目的は?
100個近くあるファイルからデータを読み込み1つのファイルデータ作成するためのVBAを作成しました。ところが、100個中2〜3個のデータが Excel97でOpen動作させるとエラー発生するのです。このエラー発生するファイルをExcel2007で開くとOKなので、Open動作することなく、データを読み込むための第一歩として、本質問しました。シート名把握OKでしたので、更に Open動作なしにデータ読み込むコードをアドバイスして戴けませんでしょうか?(小生の知識では、Openしたファイルを読み込む知識しかなく恐縮ですが、よろしく おねがいします)

5567 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free