Application.GetSaveAsFilename(InitialFileName:=Range("O26") 有时会出现一个空白对话框

2024-04-09

我有一个子程序将我的文档保存为二进制工作簿。 (来自堆栈溢出。)

我尝试从单元格中获取值用作文件名。

通常它工作得很好,我不明白为什么有时不能。

我在单元格 O26 中的数据始终是文本字符串。

Dim fname As Variant
Dim FileFormatValue As Long

fname = Application.GetSaveAsFilename(InitialFileName:=Range("O26"), filefilter:= _
  " Excel Macro Free Workbook (*.xlsx), *.xlsx," & _
  " Excel Macro Enabled Workbook (*.xlsm), *.xlsm," & _
  " Excel 2000-2003 Workbook (*.xls), *.xls," & _
  " Excel Binary Workbook (*.xlsb), *.xlsb", _
  FilterIndex:=4, Title:="Save as xlsb")
'Find the correct FileFormat that match the choice in the "Save as type" list
Select Case LCase(Right(fname, Len(fname) - InStrRev(fname, ".", , 1)))
    Case "xls": FileFormatValue = 56
    Case "xlsx": FileFormatValue = 51
    Case "xlsm": FileFormatValue = 52
    Case "xlsb": FileFormatValue = 50
    Case Else: FileFormatValue = 0
End Select

If fname = isblank Then
    MsgBox "Project Not Saved!"
    Exit Sub
End If
         
ActiveWorkbook.SaveAs fname, FileFormat:= _
  FileFormatValue, CreateBackup:=False

获取另存为文件名

  • 你的代码的明星是Application.GetSaveAsFilename 方法 (Excel)|微软 文档 https://learn.microsoft.com/en-us/office/vba/api/excel.application.getsaveasfilename.

三句话

  • 显示标准Save As对话框并从中获取文件名 用户无需实际保存任何文件。

  • (该方法返回选择的文件名或输入的名称 用户。返回的名称可能包括路径规范)。 退货False如果用户取消对话框。

  • When InitialFilename用来带扩展名 and a 过滤器是 应用, 该扩展名必须与过滤器扩展名匹配, 否则有效InitialFilename显示在对话框中 box 将是一个空字符串。

问题

  • 无需在点上区分大小写(.):
    Not InStrRev(fName, ".", , 1), but InStrRev(fName, ".").
  • 没有isblank在VBA中(无论如何都是小写)。ISBLANK是一个 Excel 函数。第二句话解决了这个问题(False).

  • 第三句话基本上是说你必须使用 不带扩展名或具有指定扩展名的文件名FilterIndex这是xlsb在你的情况下。如果您需要有一个 具有另一个扩展名的文件,那么您可以使用以下组合Left和新创建的getExtension获取不带文件名的文件名 扩大。

The Code

Option Explicit

' Gets the extension (the string behind the last dot) of a filename.
Function getExtension(ByVal fName As String) As String
    getExtension = LCase(Right(fName, Len(fName) - InStrRev(fName, ".")))
End Function

' DisplayAlerts Version
Sub getSaveFileDA()

    Dim fName As Variant
    Dim FileFormatValue As Long

    With Application
        fName = .GetSaveAsFilename( _
                InitialFileName:=Range("O26").Value, FileFilter:= _
                " Excel Macro Free Workbook (*.xlsx), *.xlsx," & _
                " Excel Macro Enabled Workbook (*.xlsm), *.xlsm," & _
                " Excel 2000-2003 Workbook (*.xls), *.xls," & _
                " Excel Binary Workbook (*.xlsb), *.xlsb", _
                FilterIndex:=4, Title:="Save as .xlsb")
    End With

    ' Find the correct FileFormat that matches the choice
    ' in the "Save as type" list.
    Select Case getExtension(fName)
        Case "xls": FileFormatValue = 56
        Case "xlsx": FileFormatValue = 51
        Case "xlsm": FileFormatValue = 52
        Case "xlsb": FileFormatValue = 50
        Case Else: FileFormatValue = 0
    End Select

    If fName = False Then         ' When user selects Cancel.
        MsgBox "Project Not Saved!"
        Exit Sub
    End If

    ' If fName exists then Excel will complain about it and when you
    ' press No or Cancel, an error will occur. To prevent this you can
    ' use Application.DisplayAlerts but keep in mind that then the file
    ' will be overwritten without the confirmation dialog popping up.
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs fName, FileFormat:= _
                          FileFormatValue, CreateBackup:=False
    Application.DisplayAlerts = True

    MsgBox "Project successfully saved.", vbInformation

End Sub

' On Error Resume Next Version
Sub getSaveFileOE()

    Dim fName As Variant
    Dim FileFormatValue As Long

    With Application
        fName = .GetSaveAsFilename( _
                InitialFileName:=Range("O26").Value, FileFilter:= _
                " Excel Macro Free Workbook (*.xlsx), *.xlsx," & _
                " Excel Macro Enabled Workbook (*.xlsm), *.xlsm," & _
                " Excel 2000-2003 Workbook (*.xls), *.xls," & _
                " Excel Binary Workbook (*.xlsb), *.xlsb", _
                FilterIndex:=4, Title:="Save as .xlsb")
    End With

    ' Find the correct FileFormat that matches the choice
    ' in the "Save as type" list.
    Select Case getExtension(fName)
        Case "xls": FileFormatValue = 56
        Case "xlsx": FileFormatValue = 51
        Case "xlsm": FileFormatValue = 52
        Case "xlsb": FileFormatValue = 50
        Case Else: FileFormatValue = 0
    End Select

    If fName = False Then GoTo NotSaved ' When user selects Cancel.

    On Error Resume Next
    ActiveWorkbook.SaveAs fName, FileFormat:= _
                          FileFormatValue, CreateBackup:=False

    If Err.Number <> 0 Then
        On Error GoTo 0
        GoTo NotSaved
    Else
        On Error GoTo 0
        MsgBox "Project successfully saved.", vbInformation
    End If

    Exit Sub

NotSaved:
    MsgBox "Project Not Saved!", vbExclamation

End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Application.GetSaveAsFilename(InitialFileName:=Range("O26") 有时会出现一个空白对话框 的相关文章

  • VBA中如何四舍五入到小数点后两位?

    在单元格 B2 中 在进行计算之前 我的变量值为 297 123 在 VBA 中 我想将其四舍五入为 297 12 请参阅下面的代码了解我的尝试 两者都将燃油评估为 297 我做错了什么 Dim fuel As Integer Dim li
  • 使用@@Identity

    我想知道如何从另一个数据库的表中获取最近生成的自动编号值 目前我正在这样做 Do Until rsA EOF Inserts new row here works Set rs New ADODB Recordset rs Open SEL
  • Interop.Excel 和 Tools.Excel 之间的区别?

    我目前正在开发 Microsoft Excel 的插件 但我对某些事情有点困惑 两者有什么区别Interop Excel and Tools Excel 例如 之间Interop Excel Workbook and Tools Excel
  • 将图表导出为图像有时会生成空文件

    I m doing a macro that exports all the charts in the sheet and then opens Outlook and attaches them However I ve noticed
  • 使用 xlwings 排序(pywin32)

    我需要使用 python 按给定行对 Excel 电子表格进行排序 为了进行测试 我使用以下数据 在名为 xlwings sorting xlsx 的文件中 Numbers Letters Letters 2 7 A L 6 B K 5 C
  • VBA - 填充自定义功能区下拉列表/列表框

    我无法填充下拉列表 列表框 原始代码来自 https exceloffthegrid com inserting a dynamic drop down in ribbon https exceloffthegrid com inserti
  • 根据当前工作簿中的匹配值编辑主工作簿中的单元格

    这里的目标是比较两个工作簿之间 A 列中的值 当前工作簿是 xlsm 目标工作簿是 xlsx 如果找到任何匹配项 匹配值同一行的 E 列中的值在目标工作簿中发生更改 在这种情况下 必须将工作簿分开 我决定通过选择当前工作簿 A2 中的第一个
  • Excel - 确定排列的奇偶性

    我正在处理一个 Excel 工作表 需要确定大小数字的垂直数组的奇偶校验N 该数组包含来自的每个数字1 to N每一次正好一次 在这种情况下 奇偶校验被定义为将加扰数组转换为从小到大排序的数组所需的交换次数 例如 数组 3 1 2 4 具有
  • 更改列标签?例如:将“A”列更改为“名称”列

    谁能告诉我如何更改列标签 例如 我想将列 A 更改为列 名称 Excel Excel 的版本是什么 一般来说 您无法更改列字母 它们是 Excel 系统的一部分 您可以使用工作表中的一行来输入您正在使用的表格的标题 表标题可以是描述性列名称
  • 导出到 Excel 时如何避免“数字存储为文本”

    当我将表格从 Access 导出到 Excel 时 所有数字都显示为文本 并且单元格上有绿色箭头 有没有办法自动修复此错误 或者有另一种导出方法可以解决该错误 作为参考 这是我导出的方式 DoCmd TransferSpreadsheet
  • 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

    我必须将 Javascript 图表 HighCharts 导出到 Excel 文件中 图表在div中呈现 但excel不呈现javascript生成的html css内容 仅呈现没有样式的文本 一个解决方案是将图表渲染为图像 jpeg 但
  • 使用 R Shiny 从 XLConnect 下载 Excel 文件

    有没有人尝试过使用 R Shiny 中的下载处理程序通过 XLConnect 下载新创建的 Excel 文件 在 ui R 中有一行不起眼的行 downloadButton downloadData Download 在 server R
  • Perforce Excel 文件差异

    我有一堆 excel 文件放在 perforce 上 我想对这些 excel 文件进行 diff 类似于我在 perforce 中对其他文件 如 java cs 等 所做的操作 我尝试寻找一个插件 发现 P4OFC 只适合对 word 文件
  • 将范围内的每个值乘以常数,但跳过空白单元格

    我需要一个简单快速的解决方案 用于将范围内的所有值乘以 VBA 代码中的数值 我知道这个解决方案 将整个范围乘以值 https stackoverflow com questions 18990541 multiply entire ran
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • xlwings: 删除一个列 | Excel 中的行

    如何删除 Excel 中的一行 wb xw Book Shipment xlsx wb sheets Page1 1 range 1 1 clear clear 用于删除内容 我想删除该行 我很惊讶 clear 函数有效 但 delete
  • excel 2010刷新BackgroundQuery中运行时错误1004

    我正在尝试用 vba 编写一个脚本 用于将多个文本文件导入 Excel 一张纸 然后将它们绘制在一张图表上 我面临一个问题刷新后台查询命令并出现 1004 运行时错误 我怎样才能解决它 谢谢 埃亚勒 这是我的代码 Sub fring1 Di
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • 如何在 Excel 中对一组数据进行排序以匹配另一组数据?

    我有一个不按字母或数字顺序排列的数据列表 我想对同一日期的第二个列表进行排序以匹配第一个列表 我无法更改数据的顺序 我的目标是将第二组中的附加数据粘贴回第一个数据集中 DATA SET A DATA SET B 22350 BH160 10

随机推荐

  • 如何在 Asp.Net-MVC 中添加自定义 HTTP 标头

    我创建了一个自定义处理程序 如下所示 public class SitHandler DelegatingHandler protected override async Task
  • facebook php,如何使用结果分页?

    您好 我正在使用 Facebook PHP SDK v 3 1 1 我不明白如何使用结果分页 url 我想获取我所有朋友的列表 这是我的代码 friends fb gt api me friends friend Array data gt
  • Invalid Uri : uri 方案无效

    我正在尝试通过 WebRequest 登录网站 我此时遇到异常 WebRequest req WebRequest Create formUrl Trim string url string username string password
  • iOS 6 中使用 AudioFileServices 进行粒度合成

    我对我正在开发的声音合成应用程序有疑问 我正在尝试读取音频文件 使用创建随机 颗粒 颗粒合成技术 http en wikipedia org wiki Granular synthesis 将它们放入输出缓冲区 然后能够使用 OpenAL
  • 带有 ASP.NET 的 Google 日历 API

    我对使用 Google Calendar API 在 ASP NET Webforms C 中添加 修改事件感到困惑 我不确定我是否需要 oAuth 或者什么 我的应用程序位于我自己的服务器上 访问我自己的域和我自己的日历 我不需要其他用户
  • R:将矩阵重新排列为三列

    我在 R 中有一个矩阵 每个条目i j是分数 rownames 和 colnames 是 id 我只想要一个 3 列矩阵 而不是矩阵 i j score 现在我正在使用嵌套 for 循环 喜欢 for i in rownames g pri
  • 关于PE的魔数

    0x10b PE32 executable 0 107 ROM image 0x20b PE32 64 bit executable 是什么ROM image 有趣的问题 我涉足过操作 PE 文件 但从未注意到这一点 我认为它们的用途如下
  • 修改 tar 存档中嵌套的文件

    我正在尝试做一个grep然后一个sed搜索文件内的特定字符串 这些文件位于多个 tar 内 全部位于一个主 tar 存档内 现在 我通过以下方式修改文件 首先解压主 tar 存档 然后将里面的焦油全部提取出来 然后进行递归grep进而sed
  • JavaScript 正则表达式排除某些单词/短语?

    如何编写正则表达式模式来测试字符串是否包含多个具有以下结构的子字符串 cake xxx xxx 是哪里任何但不是 奶酪 或 牛奶 或 黄油 例如 I have a cake honey and cake egg 应该返回true but I
  • 防止 WPF 窗口最小化(主要是 Winkey + D)

    我有一个应该像 Windows Vista 小工具一样运行的窗口 它应该保留在桌面上 而不是出现在任务栏和 alt tab 菜单上 但最重要的是 不要最小化 这是它的标题 由于其样式设置为 None 因此它没有控制按钮 最小化 关闭等 但仍
  • Jenkins 向错误的提交 ID 发送通知

    我有几个 Jenkins 管道 所有管道都从 Bitbucket 导入共享库以实现某些实用方法 并且我想将构建状态通知发送到每个项目自己的 Bitbucket 存储库 我安装了Bitbucket 构建状态通知器 https plugins
  • 如何在Spring-MVC方法中绑定抽象类的子类?

    给定 Spring MVC 控制器中的 保存 方法 RequestMapping value save public void save ModelAttribute MY KEY final MyModel myModel 拥有位于myM
  • xdebug、PhpStorm 和 Laravel 3 / mod_rewrite 未命中断点

    我非常绝望并且没有想法 我已经为 Laravel 3 项目配置了 xdebug 和 PhpStorm 在 Mac OS X Apache 上本地运行该项目 因此 PhpStorm 和 Web 应用程序在同一台计算机上运行 配置虚拟主机 使
  • 从迭代器中删除 N 个值的 Pythonic 解决方案

    有没有一个Pythonic解决方案可以删除n来自迭代器的值 你可以通过丢弃来做到这一点n值如下 def drop it n for in xrange n it next 但在我看来 这并不像 Python 代码应有的那么优雅 我在这里缺少
  • 如何使用 cPanel 重新启动 NodeJS

    我需要知道从基于 cPanel 的服务器的根端使用什么来重新启动 NodeJS 应用程序 例如 如果进程由于某种原因现在终止 NodeJS 应用程序将不会启动 直到我手动启动它 如果服务器重新启动 我需要手动重新启动它 此外 这是服务器上多
  • Material-UI:更改 TextField 中的自动填充背景颜色

    目前 我有一个样式化的文本字段 当我开始在电子邮件字段中输入时 会出现自动填充选项 如果我选择自动填充选项之一 文本字段的背景将变为白色并带有黑色文本 我想改变这些风格 我试过这个 import withStyles from materi
  • IntelliJ 在整个文件中应用检查修复

    In IntelliJ I have the inspection that checks for variables that can be made final turned on so that IntelliJ will highl
  • MiniCssExtractPlugin 公共路径不起作用

    我在用MiniCssExtractPlugin在我的 React 应用程序中延迟加载 CSS 文件 我给了publicPath选项MiniCssExtractPlugin但它并没有采用这个选项值 而是采用output publicPath
  • 在 R 中运行时获取用户的整数输入

    我想在运行时获取 R 代码中整数变量的输入 我主要用 C 编写代码 想知道是否有类似的函数scanf在 R 中可以用来读取用户的输入 正如上面的评论所说 你可以使用readlines 然后转换为整数as integer 我还提供一个替代方案
  • Application.GetSaveAsFilename(InitialFileName:=Range("O26") 有时会出现一个空白对话框

    我有一个子程序将我的文档保存为二进制工作簿 来自堆栈溢出 我尝试从单元格中获取值用作文件名 通常它工作得很好 我不明白为什么有时不能 我在单元格 O26 中的数据始终是文本字符串 Dim fname As Variant Dim FileF