我目前正在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_Activate
到Worksheet_Change
...
还要注意,只有我的机器似乎可以正确运行此代码。我能够在平板电脑和其他笔记本电脑上进行复制。所以,显然是我所有。
p
正在位于模块下的文件中初始化。但是,没有在任何地方实例化它。
Public p As New Projects
答案 0 :(得分:0)
在平板电脑上,我遇到了一个错误on error goto
。该错误与使用和实例化HTMLDocument
时实例化其他浏览器有关。
我的机器:
compatMode: BackCompat
documentMode: 11
其他机器:
compatMode: BackCompat
documentMode: 5
我最终使用了InternetExplorer
对象而不是MSHTML
。