Excel VBA質問箱 IV

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

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


12961 / 13646 ツリー ←次へ | 前へ→

【7716】フォルダ選択ダイアログについて kei 03/9/16(火) 13:00 質問
【7719】環境のせい? つん 03/9/16(火) 13:23 発言
【7720】Re: INA 03/9/16(火) 13:24 回答
【7727】Re: kei 03/9/16(火) 14:22 質問
【7728】Re: INA 03/9/16(火) 14:30 回答
【7729】Re: kei 03/9/16(火) 14:37 質問
【7732】Re: INA 03/9/16(火) 15:13 回答
【7754】Re:IEを再インストールしました。 kei 03/9/17(水) 11:19 お礼
【7722】Re:フォルダ選択ダイアログについて Jaka 03/9/16(火) 13:45 回答
【7726】Re:フォルダ選択ダイアログについて INA 03/9/16(火) 14:01 回答
【7742】Re:フォルダ選択ダイアログについて Jaka 03/9/16(火) 17:22 発言
【7755】Re:フォルダ選択ダイアログについて kei 03/9/17(水) 11:27 お礼
【7746】Re:フォルダ選択ダイアログについて Kein 03/9/17(水) 3:09 発言
【7760】Re:フォルダ選択ダイアログについて kei 03/9/17(水) 11:39 お礼

【7716】フォルダ選択ダイアログについて
質問  kei  - 03/9/16(火) 13:00 -

引用なし
パスワード
   こんにちわ。初めて投稿させていただきます。
VBAを始めてまだ間もない初心者ですがどうぞ宜しくお願いいたします。

EXCEL97で
シート上にボタンを作成し、そのボタンが押されたら
フォルダ選択のダイアログを表示→フォルダ選択→選択したフォルダ名取得
といったことをしたいのですが、

過去ログで調べて実行してみたところ
Set Folder = CreateObject("Shell.Application"). _
のところで
【ActiveXコンポーネントはオブジェクトを作成できません】とメッセージ
が出てしまいます。
以下のプログラムで何かオブジェクトを参照する
必要があるのでしょうか?
どうぞご教授ください。お願いします。
=====================
Private Sub CommandButton1_Click()
Dim Folder As Object

  Set Folder = CreateObject("Shell.Application"). _
   BrowseForFolder(0, "フォルダを選択してください", 0)
  If Not Folder Is Nothing Then
    MsgBox Folder.Self.Path
  End If

  Set Folder = Nothing
End Sub

【7719】環境のせい?
発言  つん E-MAIL  - 03/9/16(火) 13:23 -

引用なし
パスワード
   kei さん、こんにちは

>Set Folder = CreateObject("Shell.Application"). _
>のところで
>【ActiveXコンポーネントはオブジェクトを作成できません】とメッセージ
>が出てしまいます。

えっと、このやり方は、WSHっての利用したやり方で、
これは、すべての環境で利用できるとは限らないようです。
IE5.0以上導入のEXCEL97以上環境で、動作するみたいですね。
もしかしたら、Keiさんとこの環境に原因があるのかも?

どうでしょうか?
全然違ってたらすんません。

【7720】Re:
回答  INA  - 03/9/16(火) 13:24 -

引用なし
パスワード
   これを実行するには、Shell32.dllがversion 4.71以上でないとダメなようです。

VBEの参照設定で、
 Microsoft Shell Controls And Automation
が見えてれば、使えるはずです。(チェックは不要)

【7722】Re:フォルダ選択ダイアログについて
回答  Jaka  - 03/9/16(火) 13:45 -

引用なし
パスワード
   こんにちは。

Dim fld As Object

'デスクトップ
Set fld = CreateObject("Shell.Application"). _
      browseforfolder(0, "フォルダを選択してください", 0)
MsgBox fld.Items.Item.Path

'マイコンピュータ(Win2000&ExL2000でも同じ)
Set fld = CreateObject("Shell.Application"). _
      browseforfolder(0, "フォルダを選択してください", 0, "")
MsgBox fld.Items.Item.Path

'C(Win2000&ExL2000でも同じ)
Set fld = CreateObject("Shell.Application"). _
      browseforfolder(0, "フォルダを選択してください", 0, "C:\")
MsgBox fld.Items.Item.Path

Set fld = Nothing

【7726】Re:フォルダ選択ダイアログについて
回答  INA  - 03/9/16(火) 14:01 -

引用なし
パスワード
   ▼Jaka さん 
の回答はどのような意味なのですか?
質問者のkeiさん がエラーになると言っているコードと同じだと思いますが?

【7727】Re:
質問  kei  - 03/9/16(火) 14:22 -

引用なし
パスワード
   つんさま、INA さま、Jakaさま:
早速のご回答ありがとうございます。

>これを実行するには、Shell32.dllがversion 4.71以上でないとダメなようです。
>
>VBEの参照設定で、
> Microsoft Shell Controls And Automation
>が見えてれば、使えるはずです。(チェックは不要)

参照設定で
【Microsoft Shell Controls And Automation】
がなかったです。
Shell32.dllのversionを上げるにはどうしたら良いのでしょうか?
初心者ゆえに術がわかりません。
ご指導お願いできないでしょうか?
宜しくお願いいたします。


【7728】Re:
回答  INA  - 03/9/16(火) 14:30 -

引用なし
パスワード
   まずは、OS と ie と Shell32.dll のバージョンを教えて下さい。    

【7729】Re:
質問  kei  - 03/9/16(火) 14:37 -

引用なし
パスワード
   >まずは、OS と ie と Shell32.dll のバージョンを教えて下さい。    

OS:【Windows NT6.0a】
IE:【Ver 6.0】
Shell32.dll:【Ver 4.0】
になります。
お手数をおかけいたしますがどうぞ宜しくお願いいたします

【7732】Re:
回答  INA  - 03/9/16(火) 15:13 -

引用なし
パスワード
   すこしネットで調べてみましたが、
バージョンアップするには Internet Explorer 4.0(以降のバージョンでは?)で
統合というオプションを選択してインストールすることで
Ver.4.71 以降に更新されるようです。
ただし、一歩間違えるとOSを再インストールする羽目になるようですので、
注意が必要です。

Shell.Application は使わないで、別の方法で検討した方が安全かもしれません。

以下に代替案を掲載しておきます。
フォルダでなくファイルを選択しなくては、いけないのでボツかもしれませんが
ご参考までに・・・

Private Sub CommandButton1_Click()
Dim FileName As Variant
Dim i As Integer
Dim WrkString As String
Dim FilePath As String
    
  '対象ファイルをダイアログで選択。
  FileName = Application.GetOpenFilename
 
 i = 0
 FilePath = ""
 
 If InStr(FileName, "\") > 0 Then
  Do
   i = i + 1
   WrkString = Mid(FileName, Len(FileName) - i)
  Loop Until Left(WrkString, 1) = "\"
  FilePath = Left(FileName, Len(FileName) - Len(WrkString) + 1)
 Else
  FilePath = ""
 End If

  MsgBox FilePath
  
End Sub

【7742】Re:フォルダ選択ダイアログについて
発言  Jaka  - 03/9/16(火) 17:22 -

引用なし
パスワード
   Shell32.dllに関しては、あなたさまが御調べになられた様にIE4.0以上をインストールすると、勝手にアップしてくれると、前にどこかで読んだ事がありまして、Win95を新規にインストールしなおしたままの状態で使っているとは、思えませんでした。
それに、Shell32.dllがアップされても、下記コードでのままでは、エラーになると思いコードだけ載せました。

MsgBox Folder.Self.Path

上記コードは、Win98se & Excel97SR2ではエラーになったもので...。
(NTのことは全くわかりませんが。)

【7746】Re:フォルダ選択ダイアログについて
発言  Kein  - 03/9/17(水) 3:09 -

引用なし
パスワード
   WSH はIEのバージョン云々と関係無く、Microsoftのサイトから DL できます。
↓こちらから入って下さい。
http://wwwroy.hi-ho.ne.jp/mutaguchi/wsh/install.htm
リファレンスファイルも DL 出来ますから、必ずインストールして下さい。
おそらくその点が、デフォルトのままのWSHと大きく違うメリットと言えるでしょう。
ワケが分からんまま使っていても、プログラミング能力は向上しないからです。
DL するとスタートアップに Microsoft Windows Script という見だしが出来る
はずですから、それを開いて概略を勉強されると良いでしょう。VBAコードの中で
使えるのは VBScript, WSH, FileSystemObject です。JScriptはWeb用と
考えていいと思います。Excelのマクロには通常は使いません。
なお↑でリンクを張ったサイトは、WSHに関して国内で最も充実したサイトと
言えます。管理人のむたぐちさんは、WSHの権威のような方です。私も指導して
もらったことがあります。分からないことは掲示板で質問できますが、その前に
いろいろあるコンテンツを良く見て下さい。フォルダーを開くダイアログを出す
スクリプトも、どこかに掲載されていますよ。

【7754】Re:IEを再インストールしました。
お礼  kei  - 03/9/17(水) 11:19 -

引用なし
パスワード
   >すこしネットで調べてみましたが、
貴重なお時間、ありがとうございました。

>バージョンアップするには Internet Explorer 4.0(以降のバージョンでは?)で
>統合というオプションを選択してインストールすることで
>Ver.4.71 以降に更新されるようです。
>ただし、一歩間違えるとOSを再インストールする羽目になるようですので、
>注意が必要です。
現在のIEを削除してIE4.0をインストールし、またIE6.0へ…
をやってみたところ…
【Microsoft Shell Controls And Automation】が入りました!!
お蔭様でサンプルソースも動きました。
ありがとうございました。

【7755】Re:フォルダ選択ダイアログについて
お礼  kei  - 03/9/17(水) 11:27 -

引用なし
パスワード
   Shell32.dllはIE4.0をインストールで
バージョンアップすることができました。
しかし、Jakaさまのご指摘通り、下記コードでエラーになって
しまいました。

>MsgBox Folder.Self.Path

教えていただいた
MsgBox fld.Items.Item.Path
で正常に動作いたしました。

早急な回答とご指導をありがとうございました。

【7760】Re:フォルダ選択ダイアログについて
お礼  kei  - 03/9/17(水) 11:39 -

引用なし
パスワード
   ご指導いただきありがとうございます。
とても参考になるサイトです。
勉強させていただきます。
ありがとうございました。

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