我目前正在Core i7笔记本电脑上开发Excel工作簿。我已将Excel文件发送给MS Surface平板电脑上的同事。这些同事在表面上有不同的行为。
步骤是:打开Excel文件,切换到一个选项卡,并向我发送一个用%appdata%
编写的日志文件。
有问题的选项卡有以下代码:
Option Explicit
Private Sub Worksheet_Activate()
If p Is Nothing Then Set p = New Projects
p.validateSheet
End Sub
Private Sub Worksheet_Change(ByVal target As Excel.Range)
If p Is Nothing Then Set p = New Projects
p.updateSheet target
End Sub
从本质上讲,从我的日志文件来看,当笔记本电脑切换到它调用的选项卡Worksheet_Activate
时。但是,曲面会为工作表中的每一行和单元格调用Worksheet_Change
。
我已经确认,Office版本在两种情况下都是相同的。
你知道为什么会这样吗?
编辑#1
返回的日志的一部分。注意";启动";以及";结束";updateSheet的,并且范围正在改变。
2020-10-13 9:53:08 AM: Starting updateSheet.
2020-10-13 9:53:08 AM: Range: $D$2
2020-10-13 9:53:08 AM: 0001
2020-10-13 9:53:08 AM: Reset credentialWindowCancelled.
2020-10-13 9:53:08 AM: Ending updateSheet.
2020-10-13 9:53:08 AM: Starting updateSheet.
2020-10-13 9:53:08 AM: Range: $E$2
2020-10-13 9:53:08 AM: 0001
2020-10-13 9:53:08 AM: Reset credentialWindowCancelled.
2020-10-13 9:53:08 AM: Ending updateSheet.
2020-10-13 9:53:08 AM: Starting updateSheet.
2020-10-13 9:53:08 AM: Range: $F$2
2020-10-13 9:53:08 AM: 0001
2020-10-13 9:53:08 AM: Reset credentialWindowCancelled.
2020-10-13 9:53:08 AM: Ending updateSheet.
2020-10-13 9:53:08 AM: Starting updateSheet.
2020-10-13 9:53:08 AM: Range: $G$2
2020-10-13 9:53:08 AM: 0001
2020-10-13 9:53:08 AM: Reset credentialWindowCancelled.
2020-10-13 9:53:08 AM: Ending updateSheet.
2020-10-13 9:53:08 AM: Starting updateSheet.
2020-10-13 9:53:08 AM: Range: $H$2
2020-10-13 9:53:08 AM: 0001
2020-10-13 9:53:08 AM: Reset credentialWindowCancelled.
2020-10-13 9:53:08 AM: Ending updateSheet.
编辑#2
p
如何在ThisWorkbook
代码中初始化:
Private Sub Workbook_Open()
...
Set p = New Projects
...
End Sub
更新#1
以下代码在我同事的平板电脑上运行,一直显示Worksheet_Activate。。。
Option Explicit
Private Sub Worksheet_Activate()
Debug.Print Now() & ": " & "Worksheet_Activate"
End Sub
Private Sub Worksheet_Change(ByVal target As Excel.Range)
Debug.Print Now() & ": " & "Worksheet_Change"
End Sub
我回到我的日志,发现了这个(为了说明我的观点而被截断(
2020-10-13 12:51:06 PM: Starting validateSheet.
2020-10-13 12:51:06 PM: Starting FetchIdentification
2020-10-13 12:51:06 PM: Starting sendBitsRequest
...
2020-10-13 12:51:21 PM: Ending sendBitsRequest
2020-10-13 12:51:22 PM: Starting updateSheet.
...
2020-10-13 12:51:35 PM: Ending validateSheet.
注意";启动validateSheet">从CCD_ 6调用;正在启动updateSheet"从Worksheet_Change
调用。否";结束validateSheet";附近也有。
似乎有一个从Worksheet_Activate
到Worksheet_Change
的转变。。。
还要注意的是,似乎只有我的机器才能正确运行这些代码。我能够在平板电脑和其他笔记本电脑上复制。所以,一切显然都在我身上。
p
正在模块下的一个文件中进行初始化。然而,它并没有在任何地方被实例化:
Public p As New Projects
在平板电脑上,我有on error goto
,它正在捕捉一个错误。该错误与使用和实例化HTMLDocument
时实例化的不同浏览器有关。
我的机器:
compatMode: BackCompat
documentMode: 11
其他机器:
compatMode: BackCompat
documentMode: 5
我最终使用了InternetExplorer
对象而不是MSHTML
。
此处的解决方案:使用MSHTML.HTMLDocument 时强制使用documentMode