与笔记本电脑相比,在Surface平板电脑上运行时会获得不同的结果



我目前正在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_ActivateWorksheet_Change的转变。。。

还要注意的是,似乎只有我的机器才能正确运行这些代码。我能够在平板电脑和其他笔记本电脑上复制。所以,一切显然都在我身上。

p正在模块下的一个文件中进行初始化。然而,它并没有在任何地方被实例化:

Public p As New Projects

在平板电脑上,我有on error goto,它正在捕捉一个错误。该错误与使用和实例化HTMLDocument时实例化的不同浏览器有关。

我的机器:

compatMode: BackCompat
documentMode: 11

其他机器:

compatMode: BackCompat
documentMode: 5

我最终使用了InternetExplorer对象而不是MSHTML

此处的解决方案:使用MSHTML.HTMLDocument 时强制使用documentMode

最新更新