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") 有时会出现一个空白对话框 的相关文章

  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 VBA 中按键对字典进行排序

    我使用 VBA 创建了一个字典CreateObject Scripting Dictionary 将源单词映射到要在某些文本中替换的目标单词 这实际上是为了混淆 不幸的是 当我按照下面的代码进行实际替换时 它将按照源单词添加到字典中的顺序替
  • 如何禁用 openpyxl 表中的自动过滤器?

    当我使用 openpyxl 创建表时 它默认在所有列上添加自动过滤器 使用中提供的示例可以重现该行为文档 https openpyxl readthedocs io en stable worksheet tables html 我想显示没
  • 如何在不滚动的情况下截取整个电子邮件正文?

    我正在使用 OL2010 想要制作整个电子邮件的屏幕截图 不仅仅是 屏幕 可以用VBA或者外部程序来完成吗 有一个类似的问题 https stackoverflow com questions 4176340关于如何使用 C 实现这一点 注
  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • 无法将 Excel 值的类型“double”转换为“string”

    我正在加载 Excel 文件 如网络上许多地方所示 OpenFileDialog chooseFile new OpenFileDialog chooseFile Filter Excel files xls xlsl xls xlsx i
  • 如何在 Azure 逻辑应用中解析 Excel 电子表格

    我需要使用 Azure 逻辑应用从 Excel 电子表格中解析和提取列信息 我已经为我的逻辑应用程序设置了从 Outlook 检索最新未读电子邮件的功能 此外 我的逻辑应用程序执行 FOR EACH 来读取所有附件 来自未读电子邮件 并确保
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 文件夹.文件的相对路径

    我有一个 Excel 文件 在同一文件夹中还有一个包含我想要包含的 CSV 文件的文件夹 使用 来自文件夹 查询 第一步将给出以下查询 Folder Files D OneDrive Documents Health Concept2 现在
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • 将匹配的行复制到另一张纸中

    我有两张表 sheet1 和sheet 2 我正在查看工作表 1 的 T 列 如果工作表 2 中 T 包含 1 则粘贴完整行 该代码运行良好 但它将sheet2 中的结果粘贴到sheet1 的同一行中 这会导致行之间出现空白 任何人都可以建
  • 在二维范围内查找匹配的公式

    我需要一个公式来查找二维范围内的值并返回匹配单元格的坐标或单元格地址 例如 R A B C 1 John Matt Pete 2 Sara Bret Chad 3 Lila Maya Cami 我想搜索范围A1 C3 for Chad并返回
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati

随机推荐

  • 如何在 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