Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Re:特殊文字をListBoxにそのまま表示 (2)shimoichimabuさんへ
投稿日時: 20/03/15 00:57:53
投稿者: MMYS

shimoichimabuさんの
https://www.moug.net/faq/viewtopic.php?t=79228
に対する返信です。
 

shimoichimabu さんの引用:

しかし、下記コードにて、このファイル名修正しようとすると、下記エラーが出ます。
実行時エラー;53  ファイルが見つかりません。

エラーの原因は前回、20/03/14 15:15:00 で指摘しているとおり、
https://www.moug.net/faq/viewtopic.php?t=79227
NameステートメントがUnicode非対応です。
NameステートメントではUnicodeのファイル名を見つけられないため、
ファイルが無いと判定されてしまいます。
 
解決方法はコピーして元ファイルを削除って方法もありますが、
無駄があります。ファイル名変更が王道です。
 
 
FSOでファイル操作は
・FileSystemObjectを使う方法
・Fileオブジェクトを使う方法
の2つがあります。
 
FileSystemObjectを使う方法
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm
 
こちらにファイル名変更って有りませんよね。
つまり、FileSystemObjectを使う方法ではファイル名変更は出来ません。
 
 
もう一つの方法を説明します。Fileオブジェクトを使う方法です。
実はFileSystemObjectの配下に
・Driveオブジェクト
・Folderオブジェクト
・Fileオブジェクト
・TextStreamオブジェクト
があります。
 
つまり、生成したFSOを使ってさらに
Fileオブジェクトを生成するのです。
そして生成したFileオブジェクトに対して、
新しい名前を設定します。
 
Sub test3()
    Dim FSO As Object
    Dim FI  As Object

    'FileSystemObjectを生成
    Set FSO = CreateObject("Scripting.FileSystemObject")

    'Fileオブジェクトを生成
    Set FI = FSO.GetFile("D:\新しいフォルダー\test.txt")

    '現在のファイル名を表示
    MsgBox FI.Name

    'ファイル名を設定(変更)
    FI.Name = "NEW.txt"

    Set FI = Nothing
    Set FSO = Nothing
End Sub

ところで、名前の変更だけなら
    FI.Name = "NEW.txt"
だけです。つまり、変数FIは生成後、すぐ開放してます。
ならWith句でこんな書き方出来ます。
 
    With FSO.GetFile("D:\新しいフォルダー\test.txt")
        .Name = "NEW.txt"
    End With

このやり方、前回の 20/03/14 15:15:00 に投稿済です。
https://www.moug.net/faq/viewtopic.php?t=79227
 
エラー原因も記載してます。
 
 
プロパティやメソッドは下記がわかりやすいと思います。
http://officetanaka.net/excel/vba/filesystemobject/
 

回答
投稿日時: 20/03/15 11:28:21
投稿者: WinArrow
投稿者のウェブサイトに移動

MMYS さんへ
 
ファイル名変更について
FSOには、ReNameメソッドがないと思っていました。
勉強になりました。
ありがとうございました。

回答
投稿日時: 20/03/17 12:29:50
投稿者: shimoichimabu

先日は貴重なご助言いただき、ありがとうございました。
 
提案された通り、行いました所、下記コードの中の .Name = "NEW.txt" で、「実行時エラー;70 書き込みできません。」というエラーが出ました。"C:\AA.txt"はCドライブに存在していることを確認スミ。
私のコードの書き方がおかしい?
 
Sub Macro1()
 
Dim FSO As Object
 
  Set FSO = CreateObject("Scripting.FileSystemObject")
 
  With FSO.GetFile("C:\AA.txt")
      .Name = "NEW.txt"  ← エラー
  End With
 
  Set FSO = Nothing
 
End Sub

回答
投稿日時: 20/03/17 13:19:02
投稿者: radames1000

コードは問題ないと思います。
デスクトップに作成してテキストファイルで試すとうまくいきました。
Cドライブ直下ですと管理者権限が必要になりますので、
shimoichimabuさんと同じエラーが発生しました。
 
実際に使われる場所(Dドライブ?)などほかの場所で試してみられるのはいかがでしょうか。

回答
投稿日時: 20/03/17 14:31:42
投稿者: shimoichimabu

MMYSさんのご提示いただいたコード、大変感謝しております。
 
また、radames1000さんのご指摘の通り、C\ドライブ以外のところで実行したら、エラーも発生せず、うまくいきました。ありがとうございました。

投稿日時: 20/03/19 20:04:32
投稿者: MMYS

Cトライブのルートや
特殊フォルダ(C:\Program Filesなど)
はセキュリティ制限されてます。
 
Cトライブでも上記以外は制限ありません。
フォルダ作成やそのフォルダ内のファイル操作など
 
例えば
"C:\新しいフォルダー\test.txt"
 
など。