5

想要使用旋转按钮(ActiveX 控件)来显示上一张或下一张工作表。单击按钮时,事件成功触发并激活所需的工作表,但它包含原始工作表中的一些元素(命令、图表等),并将这些元素显示为附加图片。

错误加载的工作表 带有旋转按钮的初始工作表(右) 向下按钮事件的示例代码:

Private Sub SpinButton_JumpToWeek_SpinDown()

Dim sh_num As String
Dim tmp_num As Integer

  Application.ScreenUpdating = False
  Application.EnableEvents = False

  SpinButton_JumpToWeek.Value = Range("B27").Value - 1
  tmp_num = SpinButton_JumpToWeek.Value

   ' Activate desired KTx sheet
  sh_num = "KT" & tmp_num

  Range("F27").Value = ""   'reset to blank

  Sheets(sh_num).Activate

  Application.ScreenUpdating = True
  Application.EnableEvents = True

End Sub

要覆盖此效果,我必须手动选择(激活)另一个工作表,然后再次选择所需的工作表。我还尝试使用宏自动化此解决方法,但不幸的是它不起作用。

有趣的是,如果我在调试模式下执行代码(使用断点和逐行单步执行),则不会出现此问题。

令人惊讶的是,如果我尝试通过将值(工作表名称索引)写入定义的单元格(即使用 Worksheet_Change 事件)来显示上一个/下一个工作表,我没有这样的问题。所需页面已正确显示。见照片。

在此处输入图像描述

此事件的示例代码在此处输入图像描述:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim sh_num As String

  Application.ScreenUpdating = False
  Application.EnableEvents = False

  If Range("F27").Value > 0 Then
 ' Activate desired KTx sheet
   sh_num = "KT" & Range("F27").Value
   Range("F27").Value = ""   'reset to blank

   Sheets(sh_num).Activate
  End If


  Application.ScreenUpdating = True
  Application.EnableEvents = True

End Sub

我需要使用 Spin 按钮,因为它更快并且允许我跳过一些工作表(例如,如果这些工作表没有数据)。该问题出现在 32 位和 64 位 Excel 中。

有人知道为什么会出现这个问题以及解决方法吗?我是否必须更改 Excel 中的某些设置或系统属性?任何帮助将不胜感激。

@mehow 由于字数过多,我在此处附加了我的评论。

  1. 我按照您的建议尝试了插入活动控件“Microsoft Office 电子表格”的用户窗体示例。我发现这对我的情况来说不是一个好的解决方案,因为当用户将值插入单元格时,这种工作表的响应相对较慢(即使在像我这样的快速 PC 上也是如此)。此外,这会使我相当简单的 *.xlsm 工作簿变得非常复杂,它有 50 多张(每周 1 张,这些表格的内容然后链接到主工作表),并且完全满足我的基本需求(带有当然这个旋转按钮除外)。

在我看来,可能有必要操纵某种系统属性(例如 Application.ScreenUpdating 技巧),但我没有足够的 VBA 知识来找到它。

  1. 为了清楚地解释我的问题,我需要分享我的示例工作簿,但我不知道如何将它上传到这个论坛。不幸的是,我无法在这个论坛上成功上传/显示图片(由于我的评分低),这也很有帮助。

顺便说一句,我也看不到这个论坛其他问题的图片。. 这个问题是否会由于网络浏览器中缺少插件而发生?

4

1 回答 1

1

您可以使用一个简单的技巧......在“Application.screenupdating = true”之前,您可以插入两行:

ActiveWindow.SmallScroll Down:=-100
ActiveWindow.SmallScroll Up:=100

于 2013-09-13T13:17:05.643 回答