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

时间:2020-10-13 14:44:17

标签: excel vba

我目前正在Core i7笔记本电脑上开发Excel工作簿。我已将Excel文件发送给MS Surface平板电脑上的同事。这些同事在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.
Worksheet_Activate调用

通​​知“正在启动validateSheet” ,从Worksheet_Change调用“正在启动updateSheet” 。附近也没有“ Ending validateSheet”。

似乎从Worksheet_ActivateWorksheet_Change ...

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

p正在位于模块下的文件中初始化。但是,没有在任何地方实例化它。

Public p As New Projects

1 个答案:

答案 0 :(得分:0)

在平板电脑上,我遇到了一个错误on error goto。该错误与使用和实例化HTMLDocument时实例化其他浏览器有关。

我的机器:

compatMode: BackCompat
documentMode: 11

其他机器:

compatMode: BackCompat
documentMode: 5

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

此处的解决方案:Forcing documentMode when using MSHTML.HTMLDocument