• ベストアンサー

VBでこんなことできますか?

お世話になります。 (1)FSO(FileSystemObject)を使用し、 ユーザーに任意でファイル(もしくはフォルダ)を選択して頂きます。(2つのボタンの内、一つはファイル選択用、もう一つはフォルダ選択用ボタンになっている) (2)選択されたフルパスが、テキストボックスに入ります。 ここまでは出来たのですが、この後、テキストのパスから ユーザーがファイルを選択したのか、フォルダを選択したのかを判断する事はできますか? つまり、 「C:\aaa\bbb\c.txt」がテキストボックスに入っていたら[ファイルが選択されたときの処理]へ、 「C:\aaa\bbb\ccc」なら[フォルダが選択されたときの処理]へ 飛びたいのですが、この判断ができません。なにか良い方法はないでしょうか? どなたかご教授願います。

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

  • ベストアンサー
回答No.1

できますよ。 FileSystemObject の FileExists, FolderExists で聞いてあげればいけると思います。 そういう話ではないと言うのでしたら補足いただければ。

kyo----
質問者

お礼

kinuyama1002さん。 お返事ありがとうございます! やはりこの方法しかないですかね~(^^;)? 初めはこれでやろうと思っていたのですが、 この方法だと、まずはFileExistsでチェック。 true = パスの中身はファイル false = パスの中身はフォルダかもしくは存在しない で一旦確認し、上記の処理がfalseの場合のみFolderExistsで確認。 true = パスの中身はフォルダ false = 存在しない で、二度手間になるので、一発で判断出来る方法は無いかな~と・・(^^;)。

その他の回答 (1)

回答No.2

さすがに一発で取るのは無理ですねぇ。 確かに二度手間ですが、トリッキーなことをすると後が面倒かと…(保守とかデバッグとか)。 #自作関数を作ってそれを呼ぶなら「一発」ですが、そういう話でもないかと。

kyo----
質問者

お礼

やっぱそうですよねー(^^;) 地道にがんばります! ありがとうございました!!

関連するQ&A

  • VB6・一括でファイル名の変更したいのですが

    VB6でファイルリネームツールを作成しています。 DriveListBox・DirListBox・FileListBox・TextBox*2・コマンドボタン*3を配置しています。 実行して、ドライブ・ディレクトリを選択して、FileListBoxに表示されいるファイルをコマンド2ボタンで全部Text2に表示させています。 そこで、text2からファイル名を直接編集して、コマンド3ボタンで編集したファイル名で保存したいのですが、どう記述すれば良いのでしょうか。 Text1とコマンド1の状態は、FileListboxでクリックしたファイルをText1に表示・編集して、コマンド1でファイル名変更できる状態です。 コマンド3のコードですと、 >Set fsofile = fso.GetFile(Dir1.Path & "\" & File1.FileName) の行が、実行エラー53、ファイルが見つかりません。となります。 宜しくお願いします。 現在のコードです。 Private Sub Command1_Click()   Dim fso As New FileSystemObject   Set fsofile = fso.GetFile(Dir1.Path & "\" & File1.FileName)   fsofile.Name = Text1.Text   File1.Refresh end sub Private Sub Command2_Click()   Text2.Text = Clear   Dim fso As New FileSystemObject   For Each myFile In fso.GetFolder(Dir1.Path & "\" & File1.FileName).Files     Text2.Text = Text2.Text & myFile.Name & vbCrLf   Next End Sub Private Sub Command3_Click()   Dim fso As New FileSystemObject   Set fsofile = fso.GetFile(Dir1.Path & "\" & File1.FileName)   fsofile.Name = Text2.Text   File1.Refresh End Sub Private Sub Dir1_Change()   File1.Path = Dir1.Path End Sub Private Sub Drive1_Change()   Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click()   Text1.SetFocus   Text1.Text = File1.FileName End Sub Private Sub Form_Load()   Text1.Text = ""   Text2.Text = ""   Dir1.Path = App.Path   Drive1.Drive = App.Path End Sub

  • VB6でFileSystemObjectで読込

    Visual BasicV6でFileSystemObjectを(もし必要ならTextStream オブジェクトも)使って、テキストファイルを変数に読み込む実例を作っていただけませんでしょうか。 UTF-8コードのテキストファイルを読み込みたいのですが、当方、VB.NETは使えないし、MS社などのFileSystemObjectの使い方についての下記説明を見ても、どこで変数に入っていることが分からないため、お願いいたします。 Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\testfile.txt", True) MyFile.WriteLine("This is a test.") MyFile.Close Visual BasicV6自体は十分使えますが、FileSystemObjectなどについては全く分かりません。よろしくお願いいたします。

  • 複数階層のフォルダを一度に作成する方法

    ASPでフォルダを作成したいのですが FileSystemObjectのCreateFolderだと 1階層分のフォルダしか作成できないので 一度に複数階層のフォルダを作成する方法がないかと悩んでいます。 「C:\aaa」というフォルダか元々あったとして その中に「bbb」というフォルダを作成したい場合は FileSystemObject.CreateFolder("C:\aaa\bbb") で作成できますが 「bbb」の中にさらに「ccc」というフォルダを作成したい場合は FileSystemObject.CreateFolder("C:\aaa\bbb\ccc") としてもbbbフォルダが存在しないためエラーになります。 FileSystemObject.CreateFolder("C:\aaa\bbb") FileSystemObject.CreateFolder("C:\aaa\bbb\ccc") と2回やればできるのですが 作成したいフォルダパスは階層も固定ではないので できれば1回で「bbb」フォルダも「ccc」フォルダも作成したいのです。 ループを回して上から順番にひとつひとつ作成するしかないのでしょうか? ASPで使用できる何かよい関数などご存知でしたら教えてくださいm(_ _)m

  • VBA:2つのCSVファイルを開きたいです。

    エクセル2010のVBAにてCSVファイルを開き結合させるプログラムを組もうとしているのですが、2つ目のCSVファイルを開こうとすると、何故かエラーが出てしまいます。 -------------------------------------------------------------------------------- 1つ目 Sub mobile_FileSearch(Path As String) 'test.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call mobile_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "test.csv" Then Workbooks.Open ("test.csv") End If Next File End Sub ---------------------------------------------------------------------------- 2つ目 Sub local_FileSearch(Path As String) 'bbb.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call local_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "bbb.csv" Then Workbooks.Open ("bbb.csv")'←ここでエラー End If Next File End Sub ------------------------------------------------------------------------ まったく同じプログラムで、csvファイル名だけ変えただけで実行時エラー1004が出てしまいます。 一体全体何が問題なのでしょうか?

  • VBでテキストファイルを作成して,また消したい

    VisualBasicでDLLファイルを呼び出して実行したいのですが, その際に,テキストに一度引数を入れたいと思っています. しかし,不要になれば,そのつどプログラムの中でテキストファイルを削除したいと思っています. テキスト作成は  Open App.Path + "\新規作成.txt" For Output Access Write As 1 mystring = "ByVal ImaFile As String" Print #1, mystring Close #1 でできたのですが, テキストを削除する方法を教えてください. HELPには Sub Manip_Files() Dim fso As New FileSystemObject, txtfile As TextStream, fil1 As File, fil2 As File Set txtfile = fso.CreateTextFile("c:\testfile.txt", True) MsgBox "ファイルを削除します。" ' 現在の位置でファイルのハンドルを取得します。 Set fil1 = fso.GetFile("c:\tmp\testfile.txt") Set fil2 = fso.GetFile("c:\temp\testfile.txt") ' ファイルを削除します。 fil1.Delete fil2.Delete MsgBox "完了しました。" End Sub という方法が載っているのですが, 最初のFileSystemObjectでひっかかります. 参照設定が足らないと思われるのですが, 何を加えたらいいのでしょうか. 教えてください.

  • VBSでテキストファイルを作成

    こんにちは。 set fso = createobject("Scripting.FileSystemObject") fso.createfolder("倉庫") を実行すると、実行したスクリプトが存在する場所に「倉庫」という名のフォルダが作成されます。 その倉庫というフォルダの中にテキストファイルを作成するにはどうすればよいでしょうか? set fso = createobject("Scripting.FileSystemObject") fso.createfolder("倉庫") set fo = fso.opentextfile(FILENAME) close.fo 相対的にファイルの場所を指定する方法がわかりません。 絶対パスでないとだめなのでしょうか?

  • MAC OS Xのファイル構成と操作

    MAC OS Xのファイル構成と操作について教えて下さい MACは3回ぐらいしか触った事がありません。 具体性のない質問ではアレですので、 例えば ルート直下に AAAというフォルダを作成し、 そこにBBB.Textというファイルを作成し、 それを参照する方法を教えてください。 ■ウインドウズの場合 エクスプローラで参照 新規作成→フォルダでディレクトリ作成 メモ帳などからc:\aaa\bbb.textを開いて編集可能 コマンドプロンプトを起動し > c: > cd \ > mkdir aaa > echo aaaaa > ■LINUXの場合 ホームフォルダなどでフォルダ作成 GNOMEテキスト・エディタなどで /AAA/BBB.Text を保存編集 GNOME端末などを起動し、 ] su - ] cd / ] mkdir AAA ] cd AAA ] vi BBB.Text などで作成 ■マックの場合 全く分かりません。 Finderというので『Machintosh HD』を開くとルートから見れるのかと思いましたが、システムやユーザ、ライブラリなどのフォルダが並んでいます。 この『システム』や『ユーザ』は、windowsにおける『マイ ピクチャ』や『マイ ミュージック』のようなもので、『マイ ピクチャ』が実際には『C:\Documents and Settings\user1\My Documents\My Pictures』となっているように、実際のパスが別途あるように思えます。 どうなのでしょうか? マックで/AAA/BBB.Textに相当するファイルを作成する手順をGUI的にCUI的に行う方法を教えていただけませんでしょうか?

  • MS Access と VB6

    現在、VB6とMSAccessを連動させたプログラムを作成し、 お客様のPCにて使っていただいているのですが、 VB6からAccessのテーブルに、 テキストファイルから取り込んだデータを書き込む際、 エラーコード3027と3343が起こったり、起こらなかったりとしています。 調べたところ、 3027は「データベースまたはオブジェクトは読み取り専用なので、更新できません。」 3343は「データベースの形式 <ファイル名> を認識できません。」 となっていたのですが、そのエラーは初めて書き込むときではなく、 テキストファイルからデータを読み込み、 何行か読み込んだ際に初めて出てきます。 テキストファイルは、外部ソフトからそのプログラムを使用して 取り込んでおり、取り込んですぐにデータベースに書き込んでいるのですが、 その際にエラーが起こることが多いようです。 ボタンにそのデータを取り込むだけの処理を入れ、 処理を走らせた場合はそのエラーは発生しません。 取り込み後、下記処理で書き込み処理へ向かっています。 ボタンに設置した処理は、下記処理で呼び出している AddUriageです。 Dim fso As New FileSystemObject If fso.FileExists(HtRecv & "Uriage.txt") Then     ErrMes = "Uriage"     Call AddUriage End If AddUriageだけ走らせればきちんと動くので、 AddUriageの処理は合っていると思います。 お客様のPCはWin XPです。 こうではないか、という曖昧な意見でもかまいません。 ご意見お待ちしております。

  • マクロを登録したボタンの表示を変更するマクロ

    かなり難易度が高いと思いますが、Excelのマクロでこんなことできませんか? Excelのボタン(表示名:ファイル取り込み)にあるマクロを登録し、このマクロを実行するとファイル選択ウインドウが開き、ここでフルパス指定(仮にc:\aaa\bbb.xls)であるファイルを選択する。 すると、ボタンの表示が”参照ファイル”に変わり、参照ファイルをクリックするとc:\aaa\bbb.xlsが別Windowオープンになる。

  • テキストファイルをエクセルに移すマクロのことで?

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String 'ここのアドレスをファイルが格納されているフォルダのパスに変えてください FolderPath = "C:\Users\・・・" Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub

専門家に質問してみよう