- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望在 VBA 脚本开始修改内容之前提示用户保存工作簿。当“另存为”对话框出现时,如果用户单击“取消”,我会引发自定义错误并停止脚本。如果他们单击“保存”并且文件名已存在,我希望询问他们是否覆盖。
这是我的代码:
Function SaveCurrentWorkbook(wkbSource As Workbook, strNewFileName As String) As Variant
If Not bolDebug Then On Error GoTo errHandler
Dim varSaveName As Variant
SaveAsDialog:
varSaveName = Application.GetSaveAsFilename(InitialFileName:=strNewFileName, FileFilter:="Excel Files (*.xls), *.xls")
If varSaveName <> False Then
wkbSource.SaveAs Filename:=varSaveName, ConflictResolution:=True, Addtomru:=True
Set SaveCurrentWorkbook = wkbSource
Else
SaveCurrentWorkbook = False
Err.Raise 11111, , "Save Canceled"
End If
exitProc:
Exit Function
errHandler:
Select Case Err.Number
Case 1004 'Clicked "No" or "Cancel" - can't differentiate
Resume SaveAsDialog
Case esle
MsgBox "File not saved. Stopping script.", vbOKOnly, Err.Description
Resume exitProc
End select
End Function
如果他们单击"is",则会覆盖它。如果他们单击“否”,我希望出现“另存为”对话框,以便他们可以选择新的文件名,但我收到了错误。如果他们单击“取消”,我希望发生错误并停止脚本。问题是我无法区分“否”和“取消”之间触发的错误。
有什么建议如何处理这个问题吗? (请原谅错误处理的任何不当使用 - 已经有一段时间了。)
附注该函数由另一个过程调用,因此如果用户在“另存为”对话框或“解决冲突”对话框中单击“取消”,我希望调用过程也停止。我想我可以通过检查 SaveCurrentWorkbook 返回的内容(Workbook 对象或 False)来做到这一点。
最佳答案
您可以简单地创建自己的“覆盖?”问题,如下所示:
Function SaveCurrentWorkbook(wkbSource As Workbook, strNewFileName As String) As Variant
If Not bolDebug Then On Error GoTo errHandler
Dim varSaveName As Variant
SaveAsDialog:
varSaveName = Application.GetSaveAsFilename(InitialFileName:=strNewFileName, FileFilter:="Excel Files (*.xls), *.xls")
If varSaveName <> False Then
If Len(Dir(varSaveName)) Then 'checks if the file already exists
Select Case MsgBox("A file named '" & varSaveName & "' already exists at this location. Do you want to replace it?", vbYesNoCancel + vbInformation)
Case vbYes
'want to overwrite
Application.DisplayAlerts = False
wkbSource.SaveAs varSaveName, ConflictResolution:=2, Addtomru:=True
Application.DisplayAlerts = True
Set SaveCurrentWorkbook = wkbSource
Case vbNo
GoTo SaveAsDialog
Case vbCancel
SaveCurrentWorkbook = False
Err.Raise 11111, , "Save Canceled"
End Select
Else
wkbSource.SaveAs varSaveName, ConflictResolution:=True, Addtomru:=True
Set SaveCurrentWorkbook = wkbSource
End If
Else
SaveCurrentWorkbook = False
Err.Raise 11111, , "Save Canceled"
End If
exitProc:
Exit Function
errHandler:
Select Case Err.Number
Case 1004 'Clicked "No" or "Cancel" - can't differentiate
Resume SaveAsDialog
Case Else
MsgBox "File not saved. Stopping script.", vbOKOnly, Err.Description
Resume exitProc
End Select
End Function
正如您所注意到的,“否”和“取消”之间没有区别(对于应用程序来说,因为它不会停止保存本身)。 Excel 只是对自己撒谎说:“我无法在此处保存”,并且在这两种情况下都会弹出相同的错误...因此唯一真正的解决方案是创建您自己的 msgbox :(
关于vba - 如何处理 Workbook.SaveAs 覆盖确认上的 'No' 或 'Cancel'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386511/
如何引用我的主要工作簿和通过此子过程打开的第二个工作簿?我尝试做workbooks.("client_path").activate因为我使用此宏的目标是打开一个单独的工作簿,该工作簿分配给变量 cl
看到这篇文章Detail AttributeError: 'module' object has no attribute 'workbook'对于同样的错误,有一个拼写错误。“W”对于工作簿来说是大
我创建了一个文件并将其引用为 GlobalFile . 然后我将它保存为“Glo”,然后保存为“Ume”。然后我重新打开保存的文件,以在两个不同的 Workbook 对象中以两个不同的名称打开两个不同
我无法将数据从一个工作簿复制到另一个工作簿。但在同一工作簿中它的工作原理。运行宏程序后,目标工作表为空。我有2个代码。两者都不工作。我的源文件是.xlsx格式,目标文件是.xlsm格式。有没有错误?
我在一个文件夹中有许多相同结构的 excel 文件(Test01、Test02、Test03)。 我在同一个文件夹中创建了另一个 excel 文件,需要从其他 excel 文件(结果)中提取信息。 每
我正在尝试将整个工作表从一个 Excel 文件复制到另一个 Excel 文件中的工作表。以下是我编写的代码,但不起作用。请提出更改建议。 Sub copyallwos() Dim wkbSource
各位,我正在尝试设置 WorkbookSaveAsArgs 的 TextCodepage 属性,用作 Workbook 方法 SaveAs 的参数。它用于将 .xls 文件转换为 .csv 文件。但是
我目前正在使用 Workbooks.Open 来处理目录中包含的大量文件。但是打开和关闭这些文件会使文件出现在任务栏中,我想避免不断闪烁。 我收到一条建议,我可以使用 CreateObject 创建一
我在 Oracle Linux 6.6 中运行我的 Python 程序时遇到以下异常。我使用的是 Python 2.6 版。 Exception('Exception caught in workbo
我正在尝试将一堆 CSV 文件放入一个工作簿中,这是我的代码: import csv import glob import openpyxl import os, sys import pandas
我有一个大型 Microsoft Excel 文件,在办公室的用户之间共享。该文件有一个宏和一组数据验证。该文件每三个月的最后两周使用一次。该文件在圣诞节之前工作得很好,但是,我们在三月份遇到了错误。
我感觉我错误地使用了“onLoad”回调。基本上我要做的是在我的自定义功能区加载后立即在 VBA 中运行一些代码(位于我创建的加载项上)。 这是 XML 代码: 这是 VBA 代码: 这是一个全局声
当我在 VBA 中调用 Thisworkbook.Protect 时,工作簿的保护实际上会切换当前工作簿的保护状态,而不仅仅是保护工作簿。 Thisworkbook.Unprotect 但不会执行此操
我得到了一个由前同事创建的 Excel 文件。 Excel文件有数据连接链接到一些提取数据的位置,如何知道源的实际路径?我只看到它链接到 Data Source=Workbook; 工作簿的实际路径是
我正在尝试在 Microsoft Excel VBA 2010 中使用 Workbooks.Open 方法,但我收到一个编译错误,指出它需要“=”。我打错代码了吗? Workbooks.Open (
我有这段代码,它使用 workbook.open 打开 Excel 文件的下载链接。 Set wkbWebWorkbook = Workbooks.Open("sample") 在我的机器上,这总是有
我正在尝试复制打开一个工作簿,复制一个范围并将其粘贴到另一个工作簿中。打开工作簿并选择宏停止的范围后。 如果我稍后在代码中使用 Workbook.close,宏会在同一点停止,但工作簿甚至没有打开。
我正在编写一些将在按下按钮时运行的代码,打开一个 .csv 文件(从另一个程序导出),复制一些信息,然后将其粘贴到第一个文件中。有时(并且只有某些时候)它实际上会粘贴来自不同文件的信息。它似乎在打开另
我正在尝试将 .xls 文件转换为 .xlxs 我尝试了此代码的许多变体,但每次我遇到此错误消息时: Exception lors de l'appel de « SaveAs » avec « 2
我在尝试使用 VBA 读取两个 .CSV 文件的内容时遇到问题。这两个文件的结构如下: 当我使用 Workbooks.Open(
我是一名优秀的程序员,十分优秀!