Vba 检查属性是否可以设置为其他值或为只读

Vba 检查属性是否可以设置为其他值或为只读,vba,Vba,有没有办法在VBA中确定对象的属性是否可以设置为不同的值 与检查属性是可写还是非只读类似?检查属性最简单的方法是在VBA编辑器中高亮显示该属性并使用光标,然后按Shift+F2。这将在对象浏览器中显示其定义,并在那里告诉您它是否为只读 以下屏幕截图是工作簿.worksheets.count属性的屏幕截图 您可以通过暂停尝试设置属性的错误,然后检查属性来在代码中检查只读。即 iCountCheck = ThisWorkbook.Worksheets.Count On Error Resume N

有没有办法在VBA中确定对象的属性是否可以设置为不同的值


与检查属性是可写还是非只读类似?

检查属性最简单的方法是在VBA编辑器中高亮显示该属性并使用光标,然后按Shift+F2。这将在对象浏览器中显示其定义,并在那里告诉您它是否为只读

以下屏幕截图是
工作簿.worksheets.count
属性的屏幕截图

您可以通过暂停尝试设置属性的错误,然后检查属性来在代码中检查只读。即

iCountCheck = ThisWorkbook.Worksheets.Count
On Error Resume Next
ThisWorkbook.Worksheets.Count = 123   'Something that doesn't already equal iCountCheck
On Error Goto 0

If iCountCheck <> 123
   MsgBox "This is not read only"
Else
   MsgBox "This is read only"
End If 
iCountCheck=thishworkbook.Worksheets.Count
出错时继续下一步
ThisWorkbook.Worksheets.Count=123'已不等于iCountCheck的内容
错误转到0
如果是,请检查123
MsgBox“这不是只读的”
其他的
MsgBox“这是只读的”
如果结束

这正是我所需要的。我在MS Access中工作,后台有一个宏,用于在每次对象关闭时重置特定属性。问题是,当一个对象被半开并在没有打开的情况下终止时,该属性是不可写的。我想如果我签入来测试这个,我可以防止错误。但您的解决方案是在错误发生时捕获它。我将进一步了解这一点。我不确定你所说的“半开”是什么意思,你是否对对象进行了一些初始化,如果它提前终止,它不会重置初始值?你想检查一下这是否发生了?属性要么是只读的,要么不是只读的。它不应该根据代码而改变。你能提供更多的细节吗?很抱歉,我花了一段时间才回来。我有一个报告使用了一个带有开放参数的过滤器。因为我广泛使用过滤器,过滤器会被覆盖。我想在每次关闭时将过滤器重置回原始过滤器,因此我在VBA中重置了它。每次打开报告时,MS Access都会提示输入参数。如果在提示下单击escape,则会出现一个错误,说明筛选器属性是只读的。我甚至在那里加了一个复选框,只有在有变化的情况下才重写过滤器,但这并不意味着什么。最好结束这个问题,然后用问题的细节开始一个新的问题。我对MS Access不太熟悉,您的问题似乎有更多的问题。