gpt4 book ai didi

excel - 使用 Option Explicit 在未设置对象上跳过错误 'Variable not defined'

转载 作者:行者123 更新时间:2023-12-04 21:13:56 25 4
gpt4 key购买 nike

我写了一个 Excel 应用程序,我们称它为 MasterWb,其中包含一些工作表,例如(代号):wsFirst、wsSecond、wsThird。

1. 我要达到的目标

我想要第二个工作簿 - MasterWb 的副本,但没有工作表 wsThird。我们称之为ClientWb。

2.我现在如何实现目标

只是我的应用程序有一个宏 prepareClientsWb :
- 使用 SaveCopyAs 方法创建 MasterWb 的副本 (ClientWb)
- 打开 ClientWb 并删除 wsThird 表并用保存关闭它

3.问题是什么

我在我的应用程序中使用 Workbook_Open 事件来准备工作表在打开时的可见性

 Private Sub Workbook_Open()

' xlSheetVisible
wsFirst.Visible = xlSheetVisible

' xlSheetHidden
wsSecond.Visible = xlSheetHidden

' xlSheetVeryHidden
wsThird.Visible = xlSheetVeryHidden

End Sub

问题是我不能同时使用 Option Explicit 和工作表代号:当然,当我运行生成的 clientWb 时发生错误变量未定义(“wsThird”无法识别)。目前我不使用 Option Explicit 并且我使用 On Error Resume Next 语句。有什么更优雅的解决方案来处理我的问题?我想这可能真的很容易,但我不知道什么是最好的做法......

我不能使用名称或索引来代替代号,因为它可以更改很多。
我不会使用模板,因为该应用程序仍在开发中,对我来说在两个工作簿中进行更改是很成问题的。
我不会将部分代码存储在另一个模块中并在创建 clientWb 时删除此模块——这对我来说似乎很困难,并且可能需要对 VBA 项目对象模型的信任访问,如果可能的话我会避免这样做。或者...

4.也许使用条件编译?

...但它不是用大锤敲碎坚果吗:-)

例如,使用 A1 范围内的 bool 值(0 masterWb,1 clientWb)创建额外的工作表 wsConditionalConst 或检查 wsThird 是否存在或以其他方式确定我们是否在 masterWb 或 ClientWb 中,并将此信息存储在 isMasterWorkbook bool 变量中。我不知道我们是否可以使用条件变量而不是 consts - 只是一个想法。
 Private Sub Workbook_Open()

' xlSheetVisible
wsFirst.Visible = xlSheetVisible

' xlSheetHidden
wsSecond.Visible = xlSheetHidden

' xlSheetVeryHidden
#If isMasterWorkbook = True Then
wsThird.Visible = xlSheetVeryHidden
#End If

End Sub

也许有一种简单的方法可以通过 VBA 代码更改/添加条件编译参数,而不是在项目属性中手动更改它?不知道有没有可能,没试过。

在我的真实案例中,我的应用程序非常复杂(大约 2k 行登录代码,大量工作表准备工作,例如关闭网格线、标题等,以确保应用程序尽可能可读),我有更多工作表MasterWb 比上面的例子(大约 15 张),我在创建 ClientWb 时删除了其中的一些。

我很抱歉标题 - 我不知道如何用英语简短的简单方式解释它。

最佳答案

我会更改您的工作簿开放代码:

Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet

For Each ws In Worksheets
Select Case ws.CodeName
Case "wsFirst"
ws.Visible = xlSheetVisible
Case "wsSecond"
ws.Visible = xlSheetHidden
Case "wsThird"
ws.Visible = xlSheetVeryHidden
End Select
Next ws

End Sub


关于excel - 使用 Option Explicit 在未设置对象上跳过错误 'Variable not defined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61140264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com