1

OK、指定した場所にあるファイルのファイル サイズをオフにして取得する非常に単純な VBA スクリプトを作成しました ( dscarrから更新コードを編集します)。

Public Function FileSize(path As String) As Variant 
    On Error GoTo Err_FileSize:
    Dim retVal As Variant 
    Dim filesys As Object 
    Dim file As Object 
    retVal = "" 
    Set filesys = CreateObject("Scripting.FileSystemObject") 
    Set file = filesys.GetFile(path) 
    retVal = file.Size 

    Exit_FileSize: On Error Resume Next 
    FileSize = retVal 
    Exit Function 

    Err_FileSize: retVal = "Error: " & Err.Description 
    Resume Exit_FileSize 
End Function

これを新しいブックにインポートする場合は、ドキュメントを「Excel マクロ有効ブック」として空のファイルと一緒に保存readme.txtし、A1 に「./readme.txt」、A2、A2 に「=FileSize(A1)」を配置します。はreadme.txt、0 バイトのファイル サイズに正しく評価されます。偉大な。その後、ドキュメントを保存して閉じてから再度開くと、マクロが無効になっているという警告が表示されます。それらを有効にすると、A2 の内容が変更され#VALUE!、何をしても機能が再び機能しなくなります。誰もこれを見たことがありますか?ここで私が犯している間違いを誰か指摘できますか?

編集:この問題は、相対パスを使用していることが原因のようです。なぜそれが新しいワークブックで機能するのか説明できませんが、一度保存して再度開くことはありませんが、絶対パスを使用すると問題が解決します.dscarrが特定したように、「ファイルが見つかりません」問題でした.

4

2 に答える 2

3

Excel 2007 マクロ有効ブックでコードを複製したところ、次の注意事項に従って問題なく動作することがわかりました

  1. ワークブックを開いたときに、値が自動的に更新されることはありません (FileSize 関数を実行するなど)。これは、ワークブックを計算する Workbook_Open イベント ハンドラーにコードを追加することで補正できます。

  2. 指定されたファイルが見つからない場合、#VALUE エラーが発生します。実際、ファイルが見つからないか、名前が間違っている場合、「Set file = filesys.GetFile(path)」という行でエラー番号 53「File Not Found」がスローされます。この場合、戻り値を設定するコード行が呼び出されないため、戻り値は設定されません。実際にファイル サイズを取得する前に、デフォルト値の「File Not Found」を設定してみてください。

于 2011-07-27T20:47:08.000 に答える
0

Excel 2010 では、[ファイル] -> [オプション] -> [セキュリティ センター] -> [マクロ設定] に移動し、[有効にする] オプション ボタンが選択されていることを確認します。

于 2011-07-27T20:36:47.490 に答える