首页 > 解决方案 > GetSaveAsFilename 使用单元格值作为文件标题

问题描述

请帮忙!我正在使用“GetSaveAsFilname”函数使用特定单元格的值作为标题来保存我的文件,这是由公式创建的。我不是唯一一个使用该文件的人,因此用户选择的保存路径最多。大多数时候它可以工作,但有时标题是空白的,用户需要从零开始写下来。在我的代码下面:

Sub SaveTool()

Dim Name As String
Dim sFileSaveName As Variant

Name = ActiveWorkbook.Sheets("Analisis").Range("G1")
sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Name, FileFilter:="Excel Files (*.xlsm), *.xlsm")

If sFileSaveName <> False Then
    ActiveWorkbook.SaveAs sFileSaveName
End If

End Sub

标签: excelvbasave-as

解决方案


如果建议的名称为空,则问题在于InitialFileNamewhich 设置为Name。所以问题是Name有时是空白的。NameActiveWorkbook.Sheets("Analisis").Range("G1").

其中两个不可靠的部分是:

  1. ActiveWorkbook而不是ThisWorkbookor Application.Workbooks(index)。如果用户在执行宏之前单击其他工作簿,则ActiveWorkbook可能指向不相关的工作簿。
  2. Sheets("Analisis").Range("G1")对用户编辑开放。如果工作表没有受到保护,则用户可能无意中删除了该单元格中包含的文本。

我建议使用一行来检查是否为空白,并在它确实为空白的情况下Name提供默认值。Name

Sub SaveTool()

Dim Name As String
Dim sFileSaveName As Variant

Name = ActiveWorkbook.Sheets("Analisis").Range("G1")

If Trim(Name) = "" Then Name = "DefaultFileName"

sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Name, FileFilter:="Excel Files (*.xlsm), *.xlsm")

If sFileSaveName <> False Then
    ActiveWorkbook.SaveAs sFileSaveName
End If

End Sub

我添加了一个测试,也许可以帮助您调试为什么这似乎对您和您的文件不起作用:

打开一个空白工作簿并尝试此代码 - 在弹出窗口上按保存而不输入任何内容:

Sub test()
    With ThisWorkbook.Sheets.Add
        .Name = "Analisis"
        .Range("G1").Value = "Test_File_Name"
    End With
    
    Dim Name As String
    Dim sFileSaveName As Variant
    
    Name = "Test_File_Name"
    Debug.Print "1a - " & Name
    sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Name, FileFilter:="Excel Files (*.xlsm), *.xlsm")
    Debug.Print "1b - " & sFileSaveName
    
    Name = ThisWorkbook.Sheets("Analisis").Range("G1").Value
    Debug.Print "2a - " & Name
    sFileSaveName = Application.GetSaveAsFilename(InitialFileName:=Name, FileFilter:="Excel Files (*.xlsm), *.xlsm")
    Debug.Print "2b - " & sFileSaveName
End Sub

输出应该是:

'1a - Test_File_Name
'1b - C:\Users\Username\Documents\Test_File_Name.xlsm
'2a - Test_File_Name
'2b - C:\Users\Username\Documents\Test_File_Name.xlsm

现在With从测试中删除块并将代码放入您的项目文件中。输出的差异应该可以帮助您缩小问题的原因。


推荐阅读