[[20191223190154]] 『パス名が無効ですと表示される』(真っ黒) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『パス名が無効ですと表示される』(真っ黒)

お世話になります。
ファイル名を一括でリネームしたいと思い、ネット見つけたサンプルコードを試してみたのですが、パス名が無効ですと表示されます。

マクロを保存している「変換」ファイルをフォルダに入れ、同じフォルダ内に春、夏、秋、冬のファイルを入れています。

シートのA列(1行目は見出し)の変換前のファイル名は、以下のコード(test1)で表示できました。

     A            B
 1 変換前	 変換後
 2 冬.xlsx	ふゆ.xlsx
 3 変換.xlsm	変換.xlsm
 4 夏.xlsx	なつ.xlsx
 5 春.xlsx	はる.xlsx
 6 秋.xlsx	あき.xlsx

 Option Explicit
 Sub test1()
     Dim str1 As String, str2 As String
     Dim cnt As Long

     str1 = ThisWorkbook.Path & "\"
     str2 = Dir(str1 & "*.*")

     cnt = 2

     Do Until str2 = ""
         Range("A" & cnt).Value = str2
         cnt = cnt + 1
         str2 = Dir()
     Loop
 End Sub

 ファイル名をB列の名前にしたいのですが、test2を実行すると、パス名が無効ですとNameステートメントの部分で止まってしまいます。

 Sub test2()
     Dim i As Long
     Dim Last As Long
     Dim str As String

     Last = Cells(Rows.Count, 1).End(xlUp).Row
     str = ThisWorkbook.Path & "\"

     For i = 2 To Last
         Name str & Cells(i, 1).Value As str & Cells(i, 2).Value
     Next

 End Sub

test1で取得したファイル名とtest2のパスが違うのかと思いましたが、ローカルウィンドウで見比べても同じに見えます。
また、変換ファイルを名前を付けて保存し、別の名前にして実行すると、一度だけ変換がうまくいったりします。

自分で組んだコードではないのでうまくいかないのは当たり前ですが、アドバイスいただければ幸いです。
もう1点、test1でファイル名を表示する際、変換ファイルはシートA列に表示しない方法はありますか?

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows10 >



自フックをリネームしようとしてエラーとなるのでは?

(マナ) 2019/12/23(月) 19:41


 さきほどあったコメントが消えてますね・・・
 >自分で組んだコードではないのでうまくいかないのは当たり前ですが、
 自分のほうがうまく作れる、という意味ではないです。不快にさせて申し訳ありません。

 改めて調べたところ、変換ファイル名が変換対象にはいっているせいでうまくいかないことがわかりました。
 つまり開いているファイルの名前は変更できない、ということなんでしょうか。
 test1で出したファイル名から、変換シート名を消したところ、希望通り動きました。
 変換ファイル名を除いてシートに出す方法は自分で考えてみます。
 ありがとうございました。

 衝突。マナさん、その通りでした。当たり前のことでしたね。ありがとうございます。
(真っ黒) 2019/12/23(月) 19:47

できました。もっと自分で考えるようにします。
お騒がせしました。

Sub test1()

    Dim str1 As String, str2 As String
    Dim cnt As Long

    str1 = ThisWorkbook.Path & "\"
    str2 = Dir(str1 & "*.*")

    cnt = 2

    Do Until str2 = ""
        If str2 = "変換.xlsm" Then
            Exit Do
        Else
            Range("A" & cnt).Value = str2
            cnt = cnt + 1
            str2 = Dir()
        End If
    Loop
End Sub
(真っ黒) 2019/12/23(月) 19:52

>Exit Do

これはだめでしょう。

(マナ) 2019/12/23(月) 20:00


はい、だめでした。
テストした時、偶然変換ファイルが一番下にあったため、勘違いしてしましました。
ただ、ループを終了したらダメですよね。
重ね重ね、指摘ありがとうございます。
(真っ黒) 2019/12/23(月) 20:30

こうですかね。Do Loop ステートメントは何となく避けてましたが、これを機に勉強してみます。
ありがとうございました。

Sub test1()

    Dim str1 As String, str2 As String
    Dim cnt As Long

    str1 = ThisWorkbook.Path & "\"
    str2 = Dir(str1 & "*.*")

    cnt = 2

    Do Until str2 = ""
        If str2 = "変換.xlsm" Then
            str2 = Dir()
        Else
            Range("A" & cnt).Value = str2
            cnt = cnt + 1
            str2 = Dir()
        End If
    Loop
End Sub
(真っ黒) 2019/12/23(月) 20:49

こんな感じでもよいです。
        If str2 <> ThisWorkbook.Name Then
            Range("A" & cnt).Value = str2
            cnt = cnt + 1
        End If
        str2 = Dir()

あるいは、拡張子を指定するだけでもよいかもしれません。

 str2 = Dir(str1 & "*.*")
   ↓
 str2 = Dir(str1 & "*.xlsx")

(マナ) 2019/12/23(月) 21:22


 >If str2 <> ThisWorkbook.Name Then
マクロを実行してるブックを指定できるのですね。用途に合ってます。
エクセルファイル以外にも使うので、拡張子は指定しないつもりです。
アドバイスありがとうございます。
(真っ黒) 2019/12/23(月) 21:38

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.