• ベストアンサー

VBScriptでフォルダ参照ダイアログを表示したい

HTMLファイルの中にVBScriptを記述しています。 内容はボタンが押されたら、フォルダ参照のダイアログ ボックスを表示したいのです。 開発環境は windows2000 IE6.02 スクリプトのところは以下のように記述しています。 Function Getfolder() Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) if objFolder is Nothing then  Msgbox("フォルダを選択してください") else  Msgbox(objFolder.Items.Item.Path) end if End Function で、Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) のところで「書き込みできません」のエラーが表示されてしまいます。 どのようにすればフォルダ参照のダイアログボックスを表示できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nota55
  • ベストアンサー率37% (138/366)
回答No.1

ん?普通に動きますが? なんかよく分かりませんが,Getfolder()を呼び出している ところでミスがあるとか。 環境:Windows2000Pro IE6.02 動作確認コード:以下を参照 -------ここから------- <HTML> <HEAD> <TITLE>ボタン イベントのテスト</TITLE> <SCRIPT LANGUAGE="VBScript"> <!-- Function Getfolder() Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) if objFolder is Nothing then Msgbox("フォルダを選択してください") else Msgbox(objFolder.Items.Item.Path) end if End Function --> </SCRIPT> </HEAD> <BODY> <FORM NAME="Form1"> <INPUT TYPE="Button" NAME="Button1" VALUE="Click"> <SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript"> call Getfolder() </SCRIPT> </FORM> </BODY> </HTML> -------ここまで-------

rabu_chihaha
質問者

補足

同じように書いて実行するのですが、やはりだめです。 ネットを調べてみると、環境がWin2000とIE6.0だと エラーになる。Win2000とIE5.Xなら平気だと書かれていたのですが、どのような環境でしょうか?

その他の回答 (4)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.5

#4です。 訂正っつ~か削除依頼です。 IEのウインドウハンドルって取得できないため、 スクリプトデバッガ-などでないと、 この方法は使えませんでした。 というわけで、 #3の方が正しいというわけでした。

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.4

Set objFolder = Shell.BrowseForFolder(this.hWnd, "フォルダを選択してね!", 1) でやったら大丈夫でしたよ。 ウインドウハンドル=0って タスクバーとか、デスクトップとかが使用してるはずだから、 書き込みできないってことだと思います。

  • potedora
  • ベストアンサー率47% (66/140)
回答No.3

確認ですが、 実行方法は、通常のフォルダにあるhtmlファイルを ダブルクリックする感じですか? それともIIS等のWWWサーバーから起動してますか? 後者であれば、エラーが出るのが正常です。 通常は<input type="file"> を使います。 とりあえず前者の方法で試してください。 ソース自体は間違ってないです。 外していたらごめんなさい。

rabu_chihaha
質問者

補足

ありがとうございます。 最初は<input type="file"> を使ったのですが これはファイルしか選択できませんよね。 フォルダの選択がしたいのです。 実行方法はhtmlファイルを直接ダブルクリックしています。

  • nota55
  • ベストアンサー率37% (138/366)
回答No.2

環境は  Windows2000Pro SP4  IE 6.0.2800.1106 です。

rabu_chihaha
質問者

補足

ありがとうございます。 まったくおなじ環境です。 教えていただいたHTMLをそのままコピーして使っても やはりエラーになり、ダイアログが表示されません。 「ページでエラーが発生しました。」とステータスバーに 表示され、詳細を見ると ライン:8 文字:1 エラー:書き込みできません。 コード:0 URL:file://d:\a.html と、書かれています。 いったい何が原因なのでしょうか? WindowsXPでも試してみましたが、だめでした。

関連するQ&A

  • VBScriptでのフォルダ指定ダイアログについて

    VBSciptでの「フォルダ指定ダイアログ」について教えてください。 「フォルダ指定ダイアログ」を利用して、保存元のフォルダと保存先の フォルダを選択し、特定ファイル(*.jpg)のコピーをするツールを作っています。 下記のプログラムで、「フォルダ指定ダイアログ」が表示されるのは 確認できたのですが、選択したフォルダの階層をテキストフォームに 表示させる方法を教えてください。(書き込みできませんのエラーになります。) --------------------------------------------------------- Dim objShell Dim objFolder ' オブジェクトの生成 Set objShell = CreateObject("Shell.Application") ' フォルダ選択ダイアログを表示 Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", 0) Set objShell = Nothing --------------------------------------------------------- 以上、宜しくお願い致します。

  • perlでdialogのフォルダ指定

    perl勉強中のものです。 perlにてプログラムを作成中ですが、フォルダを ダイアログを使って指定したいです。 参考ページを調べvbsにて以下のプログラムを作ってみました。 ****************************************************************** Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1, "c:\\") if objFolder is Nothing then Msgbox("ちゃんと選んで頂戴!") else Msgbox(objFolder.Items.Item.Path) end if ****************************************************************** 理解しきれていないのですが、vbsをperlに埋め込む?(変換?)ことができるようで モジュールを使って、上記のプログラムから参考を調べ、見よう見まねでperlで 作ってみましたが、何も表示せず、動作しません。 どこに問題があるか教えていただけないでしょうか? ****************************************************************** use Win32::OLE; my $Shell = Win32::OLE->CreateObject("WScript.Shell"); my $objFolder = $Shell->BrowseForFolder(0,'フォルダを選択してね', 1, 'c:\\' ); unless ($objFolder) { $Shell->MsgBox('ちゃんと選んで頂戴!',undef,'フォルダ選択',1); } else { $Shell->MsgBox("$objFolder->$Items->$Item->$Path"); } ******************************************************************* とんちんかんなプログラムを作っているかもしれませんが、 ご指導よろしくお願いします。

    • ベストアンサー
    • Perl
  • 「フォルダの参照」ダイアログを「常に手前」に表示

    下記サンプルを使ってフォルダを指定させています。 Sub Sample2() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub 上記プログラムで働くダイアログを 常に手前に表示させるか、 モーダルにするか、 他の所がアクティブになっても、すぐに手前に表示させるかしたいのです。 ちなみにプログラムは http://officetanaka.net/excel/vba/tips/tips39.htm を参考にさせてもらっています。 (ちなみに「1.FileDialogオブジェクトを使う方法」はエクセル2002以降の機能らしく実行できませんでした。これを使えるのが一番いいのですが・・・) エクセル 2000を使っています よろしくおねがいします

  • フォルダ指定ダイアログ(Excel97VBA)

    とあるサイトで、下記のようにして、フォルダを指定するダイアログを表示させるコードを見つけました。 Set objKng = CreateObject("Shell.Application") Set dirKng = objKng.BrowseForFolder(0, "フォルダを選択してください。", 0) 上記2行についてどなたか解説して頂けないでしょうか? 特に、("Shell.Application")の""内の意味・他に何ができるのか、(0,"・・・",0)のゼロが分かりません。 また、このダイアログで、IF文を使って条件分岐させるにはどうすればいいのでしょうか? 以下のような感じで作りたいのですが。 If キャンセル押下時 then Exit Sub Else 実行 End If 宜しくお願いします。

  • フォルダ選択と取得したパスの表示

    どうしてもわからないのでご教授お願いします。 コマンドボタンを使用して、フォルダの選択のダイアログを表示し、選択したフォルダのパスを取得することはできたのですが、そこから取得したパスを任意のセルに表示させたいです。 どうすれば表示させることができるでしょうか。 Private Sub commandbutton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub ご教授宜しくお願いします。

  • VBScriptでのファイルコピー

    こんにちは いつもお世話になります。 現在、「ファイルの指定ダイアログ」で選択されたファイルの中身(ファイル名) と「フォルダ指定ダイアログ(参照先)」で選択されたフォルダ(サブフォルダ含む) 内のファイルの名前を比較して、一致しているファイルを「フォルダ指定ダイアログ (保存先)」にコピーし、一致しないファイル名を同じく「フォルダ指定ダイアログ (保存先)」に出力するというツールを作成しています。 以下を実行させても、ファイルのコピーも出力もされないのですが、教えていただけます でしょうか。 宜しくお願い致します。 ---------------------------------------------------------------------- <html><head> <script language="VBScript"> 'Call Window.ResizeTo(500,200) Set objFso = CreateObject("Scripting.FileSystemObject") 'テキストファイル吐き出し場所 Const LIST_FILE = "C:\Documents and Settings\All Users\デスクトップ\NonFile.txt" '色々宣言 Dim objFso Dim inFolderName Dim outFolderName Dim inFileName Dim objTxIn Dim ListFile Dim CurrentFileName '色々定数 Const TristateTrue = -1 Const TristateFalse = 0 Const TristateUseDefault = -2 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 '参照フォルダをテキストに表示 '------------------------------------------------------------ sub inFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ifd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '保存先フォルダの選択 '------------------------------------------------------------ sub outFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then 'MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ofd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '------------------------------------------------------------ Sub btn_onClick 'ファイルの有無チェック txOut="" inFileName = inFile.Value outFolderName = ofd.value If objFso.FileExists(inFileName) = True Then Set ListFile = objFso.OpenTextFile(inFileName,ForReading,false,TristateTrue) 'ファイルが無いとき Else MsgBox("ファイルが選択されていません。") End If Call iFolder(inFolderName) MsgBox("完了") End Sub 'サブフォルダ内ファイル検査→有 コピー/無 テキスト出力 '------------------------------------------------------------ Sub iFolder(inFolderName) CurrentFileName="" 'フォルダオブジェクト取得 outFolderName = ofd.value If inFolderName ="" then inFolderName = ifd.value Set fsoFolder = objFso.GetFolder(inFolderName) On Error Resume Next CurrentFileName = ListFile.ReadLine For Each fsoFile In fsoFolder.Files If fsoFile.Name = CurrentFileName Then fsoFile.Copy outFolderName,CurrentFileName,false Else set NoFile = objFso.CreateTextFile(LIST_FILE,True) NoFile.WriteLine(CurrentFileName) NoFile.Close End If fsoFile.Close Set fsoFile = Nothing Next For Each fsoSubFolder In fsoFolder.SubFolders Call iFolder(fsoSubFolder) Next End Sub </script> </head>

  • フォルダ参照のダイアログについて

    フォルダ参照のダイアログ(フォルダだけを選択できるように)を表示したいのですが、 毎回違うダイアログボックスが表示されて困っております。 具体的には「フォルダの参照」や「コンピュータの参照」、「プリンタの参照」といった ダイアログがランダムに表示されています。 BrowseInfo構造体の ulFlags に BIF_RETURNONLYFSDIRS を指定して 呼び出しているのですが、記述の仕方がまずいのでしょうか? 毎回違うものが表示されるのが何故かわからないので 何か参考になるようなホームページなどを教えて頂けると助かります。

  • エクセルのデータからフォルダを作成

    エクセル選択・読み込み→フォルダ作成先指定・処理 →作成した空のフォルダを表示 という手順のプログラムです。 コモンダイアログで選んだエクセルのデータを元に、 新しいフォルダを作成したいと思っています。 エクセルには番号(一列目)、氏名(二列目)などが入っており 一人分の情報が一行目に、二人目の情報が二行目・・・という風に一行ずつに入っています。 指定した作成先に、そのエクセルで読み込んだ人数分だけ 空のフォルダを作成し、なおかつ一列目に入っていた番号を フォルダ名にしたいのですが、どうすればいいでしょうか。 途中まで作ってみましたが後が続きません。 よろしくお願いします。 Private Const BIF_RETURNONLYFSDIRS As Long = &H1 Dim objShell As New Shell Dim objFolder As Folder Private Sub Command1_Click() Set objShell = New Shell Set objFolder = objShell.BrowseForFolder(Me.hWnd, "フォルダを選択してください", BIF_RETURNONLYFSDIRS) If objFolder Is Nothing Then MsgBox "ファイルを開く作業をキャンセルします" Else End If Set objShell = Nothing End Sub

  • VBAでフォルダの選択時のパスを指定するには?

    VBAでフォルダの選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function

  • エクセルVBA、フォルダ選択時のパスを指定するには?

    VBAでフォルダを選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function

専門家に質問してみよう