0

セルA1に含まれている名前に基づいて名前を変更する必要があるファイルをダウンロードします。ファイルはすでに現在のディレクトリに保存されているので、私が求めているのは、呼び出しA1のファイル名と拡張子「.xls」を使用して現在のディレクトリに保存することだけです。

このコードを試しました:

Sub SaveToRelativePath()
    Dim relativePath As String, sname As String
    sname = ActiveWorkbook.Worksheets(1).Range("A1") & ".xls"
    relativePath = Application.ActiveWorkbook.Path & "\" & sname
    ActiveWorkbook.SaveAs Filename:=relativePath
End Sub

ただし、デバッガーは最後の行にエラーを報告します:ActiveWorkbook.SaveAs Filename:= relativePath

これをどのように行うことができるかについての手がかりはありますか?

4

1 に答える 1

0

エラーは特定されていませんが、表示される場合:

マクロフリー WB 保存警告

上記のコードを使用してワークブックを「XLS」として保存しようとすることを意味します (実際には、正確ではありませんが、以下を参照してください)。これは、マクロのない形式を意味します。Excel は、コードが失われることを警告します。

もう1つの問題-コードの拡張子に関係なく、使用するExcelバージョンのデフォルト形式としてブックを保存します(これはXLSXまたはxlOpenXMLWorkbook2007で、おそらく将来のバージョンでは2007です)。その結果、保存されたファイルを開いて次のようになります。

不正な形式

ソリューション:

  1. 最初の警告を回避するには、マクロを実行する前に、最初のワークブック (つまり、VBA コードを保持しているワークブック) をマクロ有効として保存します。
  2. 適切な形式の説明を Save メソッドに追加します - あなたの場合はそうなりますFileFormat:=xlExcel8- したがって、真の XLS が得られます。
  3. もう1つ-ファイルをXLSとして保存するときに互換性に関するアラートを回避するには、.CheckCompatibility = False保存する前に を追加します。結果のコードは次のようになります。

    Sub SaveToRelativePath()
        Dim relativePath As String, sname As String
        sname = ActiveWorkbook.Worksheets(1).Range("A1") & ".xls"
        relativePath = Application.ActiveWorkbook.Path & "\" & sname
        Application.DisplayAlerts = False
        ActiveWorkbook.CheckCompatibility = False
        ActiveWorkbook.SaveAs Filename:=relativePath, FileFormat:=xlExcel8
        Application.DisplayAlerts = True
    End Sub
    

ただし、注意してください。このような構成は、既存のファイルを黙って上書きします。それが何らかの形で役に立ったことを願っています。

于 2013-02-01T12:43:37.633 に答える