0

此 VBA 代码适用于对同一 Excel 2010 工作簿中的两个工作表进行并排比较的应用程序。该代码实现了它的目的,但有一些奇怪的副作用:

  • 如果没有 Activate 和 Select 语句,该ScrollWorkbookTabs函数执行时不会出错,但实际上不会打开下一个工作簿选项卡window(1)

  • 当我包含 Activate 和 Select 语句时,该ScrollWorkbookTabs函数正确执行并在 window(1) 中打开下一个选项卡,但 window(1) 中的光标在从一个单元格移动到另一个单元格时未正确擦除和重绘。

我需要使ScrollWorkbookTabs功能正常工作并且光标才能正确重绘。

ScrollWorkbookTabs有没有不能像宣传的那样工作的情况?是否有可能影响光标如何被窗口重绘?

图片

   'xlt.Activate
   'xlt.Range("K558").Select
   xlb.Windows(1).Caption = xlt.Name
   xlb.Windows(1).ScrollWorkbookTabs Sheets:=1
   xlb.Windows(1).ScrollIntoView 1, 1, 10, 10
   If xlb.Windows.Count < 2 Then
      xlb.Windows(1).NewWindow ' New window is automatically the active one
      xlb.Windows(1).Caption = xls.Name
      xlb.Windows(1).ScrollIntoView 1, 1, 10, 10
   End If
   xlb.Windows.CompareSideBySideWith (xlt.Name)
   xlb.Windows.SyncScrollingSideBySide = True
4

1 回答 1

0

问题似乎是 Excel 认为光标在实际不可见时是可见的。在这种状态下,切换光标会导致它在该窗口中始终处于错误状态,即 Excel 认为它在不可见时是可见的,而在可见时是不可见的。按此顺序激活工作表似乎已经解决了这个问题。

xlt.Activate
xls.Activate
xlb.Windows(1).Caption = xlt.Name
xlb.Windows(1).ScrollIntoView 1, 1, 10, 10
If xlb.Windows.Count < 2 Then
   xlb.Windows(1).NewWindow ' New window is automatically the active one
   xlb.Windows(1).Caption = xls.Name
   xlb.Windows(1).ScrollIntoView 1, 1, 10, 10
End If
xlb.Windows.CompareSideBySideWith (xlt.Name)
xlb.Windows.SyncScrollingSideBySide = True
于 2013-05-08T08:34:52.747 回答