ファイルが存在するのに存在しないとエラーが発生する・特定の条件のときは処理をスキップしたい
受付中
回答 2
投稿
- 評価
- クリップ 0
- VIEW 45K+
Set WB = Workbooks.Open(Filename:=filefolder & "まとめ.xlsx")でファイルが存在しませんとエラーが発生します。確かにこのフォルダーに存在するファイルなのですが。。。スペルミスも確認しましたが見当たりません。
またもう一点、Dirで返すファイル名の条件分けは変換する前のファイル名に数字は入っていないのでIf InStr(openname, "1234567890") というコードに変更して実行しました。結果コードは問題なく実行されましたが、私が欲しかったファイル名を変更したものではコードを実行しないという条件が満たされませんでした。
どなたかコードで改善点が見当たる方、またエラー解決への手順を教えてくださる方がいれば嬉しいです。よろしくお願いします。
Sub north_snow()
Dim Mstr As String
Dim filefolder As String
Dim openname As String
Dim orgShCnt As Long, iCnt As Long
filefolder = "\\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\"
Set WB = Workbooks.Open(Filename:=filefolder & "まとめ.xlsx")
openname = Dir(filefolder & "*.xls?")
Do Until openname = ""
If InStr(openname, "_") <> 0 Then
openname = Dir()
Else
If openname <> ThisWorkbook.Name And openname <> "まとめ.xlsx" And openname Like "*-*" Then
Set CB = Workbooks.Open(Filename:=filefolder & openname)
CB.Worksheets(CB.Worksheets.Count).Copy after:=WB.Worksheets(WB.Worksheets.Count)
CB.Close savechanges:=False
Mstr = Replace(openname, ".xlsx", "")
Mstr = Format(DateValue(Mid(Mstr, InStr(Mstr, "-") + 1, 3) & "/1"), "yyyy_mm") & openname
Name filefolder & openname As filefolder & Mstr
End If
End If
openname = Dir()
Loop
Application.DisplayAlerts = False
WB.Sheets(1).Delete
Application.DisplayAlerts = True
WB.Save
WB.Close
Set CB = Nothing
Set WB = Nothing
End Sub
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
指定しているパスがネットワークドライブだからじゃないでしょうか。
エクスプローラーでそのファイルが見えている状態ではエラーが起きないなら、該当するかと。
その場合は、net useコマンドで、ネットワーク接続を確立してから行えば、解消するんじゃないかな。
こちらの「ネットワーク上の共有ドライブに接続するサンプルプログラム」が参考になるかと。
もう1点の方は、やりたいことと、やっていることが良く理解できませんでした。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
ネットワークドライブだから、という回答がついていますが、私の環境で試したところ、ネットワークドライブでも問題なくオープンすることができました。
アクセス権の問題でしょうかねぇ。
あとはパスが本当に正しいか再確認してください。
filefolder
とまとめ.xlsx
を連結した文字列(\\rfs\EC_INTL\Common\IEC\DATA\TB\01_RDC\まとめ.xlsx)をコピーして、エクスプローラーの上部にあるエリアに貼り付けて開けるか試してみてください。
もしくはファイル名を指定して実行でも可。
こういう場合は目視で確認するよりも上記のように確実な方法で行ったほうが良いでしょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.11%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/09/25 13:26
また2点目ではIf構文以下のエラーについての相談です。If構文でファイル名の変更をかけました。しかし何度もこのプログラムを使うとその処理が実行した回数分行われてしまいます。(当たり前なのですが...)そこで1度処理をしてファイル名が変更になったものは、再度処理を実行しないという風にしたいです。今最初のIf構文で変更後のファイル名のみが含む(_)の時はDir()にして処理を中止しようとしましたが、うまくいきませんでした。考える原因何かありますでしょうか?
お返事いただけたら嬉しいです。よろしくお願いします。
2017/09/25 13:52
dir()は実行の度に取得しますからね。
dir()のままでいくなら、編集用のフォルダを作っておいてそちらに出力して、終わったら正規の場所に移動する方法もありかと。
FileSystemObjectを使用したループなら取得時点で内容は固定されるはずなので、大丈夫じゃないかと。
詳細は時間が取れた時に、追記してみます。
2017/09/25 14:57
私の知識の範囲では想像もつかないようなやり方ばかりで、とても’勉強になります。ご丁寧な返信とても分かりやすく参考になります。ありがとうございます。
2017/09/25 19:05
使用しているPCが共有にドメインで参加しているのかワークグループで参加しているのかによっても指定の方法が変わります。
net useで行う事を(ネットワークドライブの割り当て)によって手動で行う事も可能ですけれど、seinaさんの実行されようとする環境はどのようなものですか?
2点目については、FileSystemObjectを使用したサンプルの案内は出来ますが、再帰呼出を使用するなど手間が掛かるかもしれません。
なので、今ファイル名での除外条件を確認した方が良さそうですね。
ぱっと見では最初の「If InStr(openname, "_") <> 0 Then」のopenname = Dir()は不要ですね。
これがあると、次のファイルは読むだけになってしまいます。
ロジックからは処理後リネームしたものには"_"があり、未処理のものは"_"が無いという条件が満たされれば、この部分だけで良さそうに見えます。