如果建议的名称为空,则问题出在 InitialFileName 设置为 Name。所以问题是Name 有时是空白的。 Name 从 ActiveWorkbook.Sheets("Analisis").Range("G1") 获取它的值。
其中两个不可靠的部分是:
-
ActiveWorkbook 而不是 ThisWorkbook 或 Application.Workbooks(index)。如果用户在执行宏之前单击了其他工作簿,则 ActiveWorkbook 可能指向不相关的工作簿。
-
Sheets("Analisis").Range("G1") 对用户编辑开放。如果工作表没有受到保护,则用户可能无意中删除了该单元格中包含的文本。
我建议使用一行来检查Name 是否为空白,并在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 块并将代码放入您的项目文件中。输出的差异应该可以帮助您缩小问题的原因。