excel - 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
解决方案
如果建议的名称为空,则问题在于InitialFileName
which 设置为Name
。所以问题是Name
有时是空白的。Name
从ActiveWorkbook.Sheets("Analisis").Range("G1")
.
其中两个不可靠的部分是:
ActiveWorkbook
而不是ThisWorkbook
orApplication.Workbooks(index)
。如果用户在执行宏之前单击其他工作簿,则ActiveWorkbook
可能指向不相关的工作簿。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
从测试中删除块并将代码放入您的项目文件中。输出的差异应该可以帮助您缩小问题的原因。
推荐阅读
- firebase - 异步 ifunction 不等待结果
- ios - UIView.animate() 无法为视图设置动画的各种原因有哪些?
- postgresql - 我如何针对以下查询 pgsql 进行优化。这里加入了两个表和结果基础实现了自动完成搜索
- javascript - 如何访问 forEach 中的外部变量?
- reactjs - PubSub 在客户端页面中不起作用,但在 Graphql 游乐场中起作用 - TypeError: data.getPosts is not iterable
- android - 我正在尝试使用这些代码行生成发布 sha1 证书指纹
- html - 通过 Django 上的基于类的视图将聚合总和传递给 Html 页面
- reactjs - 可转换为数字的字符串的 PropType?
- angular - Angular 订阅者 - 当组件销毁时自动取消订阅订阅者
- ruby-on-rails - Rails:跨两列连接