• ベストアンサー

EXCEL VBAのDir関数について

ファイルサーバー上にあるEXCELファイルのVBAで 新規にファイルを作成する際にDIR関数で 同名ファイルの有無チェックを作成したいと考えています。 しかし以下のような処理で行うとチェックするフォルダが My documentsになってしまいファイルの有無チェックが うまくいきません。どのように書けば良いのでしょうか? ご教授ください。よろしくお願いします。 (情報不足でしたらご指摘ください。補足いたします) ChDir "\\サーバー\フォルダ\サブフォルダ" If(""=Dir(ファイル名))then '同名ファイル無 ファイルを保存する処理 Else msgbox "同名ファイルがあります" Endif 環境: サーバー  :WinNT4.0 クライアント:Win98SE or WinNT4.0 EXCEL2000 LAN接続(同一ドメイン)

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 チェックするフォルダも込みのフルパスで指定する方がいいと思いますよ。 チェックするフォルダは、常に同じなら定数化しておき、変更の可能性があるなら変数に代入して使用すればいいでしょう。 変数(または定数)は標準モジュールにでも宣言しておけばいいでしょう。 *****標準モジュール***** Public FolderName As String *****実際の処理***** FolderName = "\\サーバー\フォルダ\サブフォルダ\" If Dir(FolderName & "ファイル名") = "" Then '同名ファイル無   'ファイルを保存する処理 Else   MsgBox "同名ファイルがあります" End If

Fat01ton
質問者

お礼

ご回答ありがとうございます。 なるほど、フォルダを変数に代入しておけば それの変更があった場合でも便利ですね。 勉強になりました。 ありがとうございます。

その他の回答 (1)

  • tamazo-
  • ベストアンサー率60% (35/58)
回答No.1

ChDirとDir関数が調べるフォルダは関係ないと思います。 If(""=Dir("\\サーバー\フォルダ\サブフォルダ\ファイル名"))then  など、Dir関数の引数にパスとファイル名を直接書けばよいのではないでしょうか。 そのように使ったことがあります。

Fat01ton
質問者

お礼

ご回答ありがとうございます。 ご指摘の方法にしたらできました。 Dir関数でパスとファイル名を 直接書けばいいとは気づきませんでした。 勉強になりました。

関連するQ&A

  • EXCELのVBAでWORDが開いてあるかチェック

    EXCELのVBAで特定のWORDが開いてあるかチェックしたいのですが、 あるフォルダにWORD文章があるかチェック      set appWord=GetObject(,"Word.Application")      Msgbox appWord.Documents.count なければエラー処理で終了 そのWORD文章の名前を取得      docFile=....    (仮にABC.docxという名前だとしますと) そのWORD文章が誰かが使っている(開いているか)チェックしたいのですが.. 1.使われているなら、-$ABC.docxが作られているはずだから    dir(-$ABC.docx)として、あれば使われていると判断したいのですが、    実験するとdir(-$ABC.docx)は、使われて実際にそのファイルがあっても    falseになってしまいます。dir関数でなくてもいいので、このファイルの    有無を調べる方法はないでしょうか? 2.その他、読み取り属性とかをみて判断する方法はないでしょうか?    ただし、使われている場合は、10秒ごとにチェックをいれて、    使われていない場合に、初めて開くので、エラー処理で逃げるのは    ダメなのですが。

  • ExcelVBAのDir関数について。

    下記の処理の流れで、「dir_check = Dir(f_name2)」の処理があります。ここで、Excelのファイル名を取得して変数として登録し、 きちんとファイル名が取得出来ていれば、結果抽出の処理を呼び出す 流れに持って行きたいのですが、値を代入できません。 ファイル名は、Excelの施設ファイル名シートのC列から取得して、 同じものを「f_name2」で取得したパスから探し出す仕組みです。 ファイルの有無は、文字数をカウントして結果が0以上ならファイルありの処理です。上手く流す処理の仕方を教えてください。 ご教示頂けますようお願い致します。 For nendo = 1 To 2 path = Worksheets("スタート").Cells(11, 4) path = path & Worksheets("スタート").Cells(8 + nendo - 1, 4) & "\" For shisetsu = 1 To 188 f_name1 = Worksheets("施設ファイル名").Cells(shisetsu + 1, 3) f_name2 = path & Worksheets("施設ファイル名").Cells(shisetsu + 1, 1) & "\" & f_name1 dir_check = Dir(f_name2) If Len(dir_check) > 0 Then dir_err(shisetsu, nendo) = 1 Workbooks.Open Filename:=f_name2 Call 結果抽出 Workbooks(f_name1).Close End If Next shisetsu Next nendo

  • 複数のパソコン間のDir関数について

    Visual Basic を用いてネットワーク上の他のパソコンのディスク上にあるファイルの有無をチェックするのにDir関数を用いています。 If Dir("\\192.168.24.50\共有データ\aaa.csv") <> "" Then 指定したIPアドレスのパソコンと繋がっていればDir関数はすぐに終了するのですが、繋がっていなければDir関数は約30秒終了しません。 指定したIPアドレスのパソコンと繋がっていなくてもDir関数をすぐに終了したいのですが、何か方法はないでしょうか。 下記方法が可能であれば、ファイルの有無チェックが即座にできそうに思えますが、小生には方法がわかりません。 ・Dir関数の前に繋がっているかを即座に判断できる方法。 ・Dir関数のタイムアウト設定を行う方法。 ・Dir関数を用いずにファイルの有無チェックが即座にできる方法(関数) 何か良い解決案があれば教えて下さい。お願いします。

  • DIR関数

    VB6で、あるフォルダ(A)に存在するCSVファイル(複数ファイル)が、別のフォルダ(B)に存在しているかチェックを行いたいのでうが、DIR関数を2重に使用すると、フォルダAの次への読み込み時にエラーになってしまいます。 何か別の方法はあるのでしょうか?

  • Excel for mac 2011でDir関数?

    Excel for mac 2011でDir関数を使用したファイルサーチが出来ません。なぜなのでしょうか? 使用環境は、Excel for mac 2011 ver. 14.1.0, MacOS X 10.6.7, MacBook Airです。 働いている研究室がMac onlyのため、Mac版のExcelにvbaを移植しようと考えているのですが、以下のプログラムが上手く動きません。 ------------------vbaプログラム Private Sub CommandButton1_Click() Dim strPATHNAME As String ' 指定フォルダ名 Dim strFILENAME As String ' 検出したファイル名 Dim ExistFILE As Boolean ' "*.TXT"ファイルの判定 ' 「フォルダの参照」よりフォルダ名の取得 strPATHNAME = MacScript("choose folder") strPATHNAME = Mid(strPATHNAME, 7) 'aliasを削る If strPATHNAME = "" Then Exit Sub ' 指定フォルダ内のTEXTのファイル名を参照する strFILENAME = Dir(strPATHNAME, vbNormal) '<------ここでファイルを検出しない。 ExistFILE = strFILENAME Like "*.TXT" If strFILENAME = "" Then MsgBox "このフォルダにはTXTファイルは存在しません。" Exit Sub End If End Sub ------------------ 上記プログラムは、コマンドボタンを押すとフォルダを指定して、その中の”.TXT”という拡張子のついたファイルを見つけるプログラムです。(実際には何もしないダミープログラムですが) しかしこれを実行すると、Dir関数の所で何も検出してくれません。 ローカル変数を追って、フォルダまでのパスにカタカナが入ったらダメだとか、”alias”が邪魔だとかは解決したのですが、肝心のDir関数が上手く動いていないことに気づきました。 どなたか詳しい方にお願い致します。 どうすれば、指定したフォルダ中の拡張子”.TXT”がついたファイルを見つけることが出来るのか?教えて頂ければ幸いです。

  • VBAのDIR関数でファイル名「0005」などが「5」だけにならない様にするには?

    あるフォルダ内に有るファイル郡の名称をDir関数で取得してExcelのシートのA列に並べるマクロなんですが、0で始まる数字のファイル名の場合、セルには0が省かれて入ってしまいます。 0011なら0011とそのままセルに入れるには(文字列として入れるには?)、マクロはどう書けばいいんでしょうか? 

  • EXCEL マクロでファイルサーバーを指定する

    現在、Cドライブ内でファイルを選択していますが、共有のファイルサーバー上のフォルダー内のファイルを選択できるようにしたいと考えています。色々とネット等で検索してみましたが、自分に合ったものが見つからず質問させて頂いた次第です。 下記をどの様に直したら良いのでしょうか? 宜しくお願い致します。 因みに ファイルサーバーのパスは Y: ¥¥fileserver¥AN¥IT¥91_Users¥700_Create¥その他業務¥Excelファイル類 です。 MsgBox "挿入する「ファイル」を選択してください" Dim OpenFileName As Variant ChDir "C:" OpenFileName = Application.GetOpenFilename("挿入ファイル,*.*") If VarType(OpenFileName) = vbBoolean Then MsgBox "キャンセルされました" Else MsgBox OpenFileName & " が選択されました" End If

  • DIR関数を使ったファイル名の取得

    おはようございます。 txtファイル名とdocファイル名を取得したく、以下のコードを作成してみました。 DIR関数を使って、ファイルリストボックスのPatternプロバディのように、複数の形式のファイル名を同時に取得する方法はあるのでしょうか? 是非、教えてください。よろしくお願いします。 ----------------------------- Private Sub Form_Load() Dim MyName MyName = Dir("C:\My Documents\*.txt") Do While MyName <> "" MsgBox MyName MyName = Dir Loop MyName = Dir("C:\My Documents\*.doc") Do While MyName <> "" MsgBox MyName MyName = Dir Loop End End Sub -------------------------------------

  • Excel2003VBA Dir関数について

    Excel2003VBAを勉強中の者です。早速ですが質問させて頂きます。 C:\Documents and Settings\All Users\Documents\親フォルダ\の中に複数のフォルダと標準ファイルが混在しており、 フォーム上のコマンドボタンを押す事で、リストボックスにフォルダだけを表示させたく下のコードを作成しました。 動作としては一旦FileDateという配列に、取得したフォルダ名をセットし、それをリストボックスに出力する事としました。 配列FileDateはDir関数でフォルダ名をひとつ取得する度に、1つずつ要素数を増やしております。 自分のフォルダを表す記号”.”と一つ上のフォルダを表す記号”..”は省きます。 このコードを実行してみた結果、”.”と”..”は省く事ができました。 しかし次に標準のフォルダが変数bufに入った状態からエラーが発生してしまいます。 ■エラー発生■の部分で「実行エラー53 ファイルが見つかりません。」と出てしまうのです。 Dir関数が正しく使えていないのだと思います。 ローカルウィンドウで確認しましたが、変数bufにはフォルダ名がちゃんとセットされている事からファイルそのものは認識してくれている様に思えます。 自分なりにかなり調べ、色々と試してみましたがどうにも手に負えませんでした。 エラーの発生原因と対策をご教示頂きたく、どなたかご助力をお願い致します。 Private Sub CommandButton1_Click() Dim buf As String Dim i As Long i = 1 Dim FileDate() As Variant ReDim FileDate(1 To i) As Variant buf = Dir("C:\Documents and Settings\All Users\Documents\親フォルダ\", vbDirectory) Do If GetAttr(buf) And vbDirectory Then '■エラー発生■ If buf <> "" And buf <> "." And buf <> ".." Then FileDate(i) = buf i = i + 1 ReDim Preserve FileDate(1 To i) End If End If buf = Dir() Loop While buf <> "" ListBox1.List = FileDate End Sub

  • Excelでの Dir

    excel VBAにて Dir関数を用いて、フォルダに存在するファイルを つかむのに、下記のスクリプトがあります。(渡辺ひかる氏のサンプル集)。 質問は、このスクリプトで引っ張り出されるファイルの順番です。本を色々調べたのですが、順番は、「不明」とあります。 しかし、現実は、アルファベット順? に並んでいるように思われます。 本当のところは、どうなんでしょう? 「不明」なのか、それとも「順番が成立している」のか? よろしくお願いします。 ---------------------------------------- Option Explicit Sub P_Sample003() Dim myPath As String Dim myFileName As String Dim i As Long myPath = ThisWorkbook.Path & "\" '任意のフォルダ myFileName = Dir(myPath, 0) Do While Len(myFileName) > 0 Debug.Print myPath & myFileName myFileName = Dir() Loop End Sub

専門家に質問してみよう