我有一个主工作簿,它从其他工作簿工作表中提取数据,然后关闭修改后的工作簿,并取消保存选项。other_wb.关闭Savechanges = False但是,当运行宏或在调试模式下单步执行此函数调用时,它仍然保存文件。是否有其他方法可以在不保存的情况下关闭?对这种行为有什么解释吗?如果需要,我可以提供更多信息。
4ioopgfo1#
Savechanges是未定义的变量。因此,它是Empty; Empty是falsy,所以表达式Savechanges = False的计算结果是True,所以调用变成了other_wb.Close True,它保存了文件。您缺少冒号:
Savechanges
Empty
Savechanges = False
True
other_wb.Close True
other_wb.Close Savechanges:= False
将Option Explicit放在所有代码模块的顶部,这样就不必处理此类问题。
Option Explicit
30byixjq2#
在进行更改之前使用other_wb.AutoSaveOn = False。
6ljaweal3#
我的Excel版本中似乎确实存在一个错误- Microsoft® Excel® for Microsoft 365 MSO(Version 2202 Build 16.0.14931.20128)64位特别是,无法识别工作簿关闭的SaveChanges参数。例如:
DataWorkbook.Close savechanges:=True
这不仅在执行时不起作用--工作簿没有保存就被关闭了--代码编辑器/解析器甚至不能识别SaveChanges参数。其证明是,它不会将上述语句中的“savechanges”更改为“SaveChanges”。所以,在没有解决方法的情况下,我很想看到,我已经切换到以下内容:
DataWorkbook.Save DataWorkbook.Close
唯一潜在的缺点是,如果没有任何更改,那么我相信保存功能仍然可以保存。因此,如果不必要的保存存在资源问题,或者在保存的文件上具有精确正确的时间戳很重要,则可能存在问题。除此之外,它似乎很好。
3条答案
按热度按时间4ioopgfo1#
Savechanges
是未定义的变量。因此,它是Empty
;Empty
是falsy,所以表达式Savechanges = False
的计算结果是True
,所以调用变成了other_wb.Close True
,它保存了文件。您缺少冒号:
将
Option Explicit
放在所有代码模块的顶部,这样就不必处理此类问题。30byixjq2#
在进行更改之前使用other_wb.AutoSaveOn = False。
6ljaweal3#
我的Excel版本中似乎确实存在一个错误- Microsoft® Excel® for Microsoft 365 MSO(Version 2202 Build 16.0.14931.20128)64位
特别是,无法识别工作簿关闭的SaveChanges参数。例如:
这不仅在执行时不起作用--工作簿没有保存就被关闭了--代码编辑器/解析器甚至不能识别SaveChanges参数。其证明是,它不会将上述语句中的“savechanges”更改为“SaveChanges”。
所以,在没有解决方法的情况下,我很想看到,我已经切换到以下内容:
唯一潜在的缺点是,如果没有任何更改,那么我相信保存功能仍然可以保存。因此,如果不必要的保存存在资源问题,或者在保存的文件上具有精确正确的时间戳很重要,则可能存在问题。除此之外,它似乎很好。