对于那些精通Excel对象编程的人来说,这似乎是微不足道的,但这让我很吃惊。
过去,我在Excel的vba中完成了以下操作,以在退出子例程之前还原活动表。
sub foo()
dim cursheet
cursheet = ActiveSheet
someOtherSheet.activate
....
cursheet.activate
end sub
很好 我尝试使用对象做类似的事情,并通过几种不同的方法,在一个新的Problem类中编写了以下内容...
''''''''''''''''''''''
' sheet property
''''''''''''''''''''''
Public Property Get sheet() As Worksheet
Set sheet = psheet
End Property
Public Property Let sheet(Value As Worksheet)
Set psheet = Value
End Property
Public Sub saveCursheet()
Me.sheet = ActiveSheet
End Sub
Public Sub activateSheet()
Me.sheet.Activate
End Sub
在我的代码中,我以这种方式调用方法...
Sub TallyQuizScore()
Dim curStudent As Problem
Set curStudent = New Problem
curStudent.saveCursheet
Worksheets("QuizTallies").Activate
...
curStudent.activateSheet
End Sub
当我尝试执行curStudent.activateSheet时,出现一条错误消息,提示我需要一个对象。因此,我重新运行了调用代码,并逐步执行了saveCursheet方法。我看到了活动工作表已存储,但是请注意,当我点击设置器的end属性行时,工作表对象就会消失。我不知道这是调试器的人工产物,还是当我碰到end属性行时表单确实被扔掉了,但是不管它是什么,当我尝试在完成后重新激活它时,该对象都消失了。
令人沮丧的是,我真正想在调用方中编写的内容是curStudent.sheet = Activesheet
和curStudent.sheet.Activate
通过某种方式继承了内置的工作表方法,但是当我尝试使其工作时,这导致了兔子的代码大战。
所以三个问题:
在代码执行其他操作时,您需要一个模块级变量来存储值。请注意,它是私人的。
另外,正如ja72所捕获的,对于对象而言,它Set
不是Let
:
未测试:
Private m_Sheet as Worksheet
Public Property Get Sheet() As Worksheet
Set sheet = m_Sheet
End Property
Public Property Set Sheet(Value As Worksheet)
Set m_Sheet = Value
End Property
Public Sub saveCursheet()
Me.Sheet = ActiveSheet
End Sub
Public Sub activateSheet()
Me.m_Sheet.Activate
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句