通过“旋转”button启动不同的工作表

想要使用“旋转”button(ActiveX控件)来显示上一张或下一张。 点击button后,事件被成功触发,所需表单被激活,但是它保存了原始表单中的一些元素(命令,graphics等),并将其显示为附加图片。

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

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 

要覆盖这种效果,我必须手动select(激活)另一张纸,然后再次select所需的纸张。 我也尝试用macros自动化这个解决方法,但不幸的是它不工作。

有趣的是,如果我在debugging模式下执行代码(使用断点和逐行执行),则不会发生此问题。

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

在这里输入图像说明

示例代码这个evententer图像说明在这里:

 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 

我需要使用“旋转”button,因为速度更快,并允许我跳过一些表格(例如,如果这些表格没有数据)。 在32位和64位Excel中都会出现该问题。

做一个人的想法为什么这个问题正在发生和解决方法? 我必须在Excel中更改一些设置或系统属性吗? 任何帮助将不胜感激。

@我由于大量的文字而在这里附上了我的意见。

  1. 我按照你的build议,并试图插入主动控制“Microsoft Office电子表格”UserForm的示例。 我发现这对我来说不是一个好的解决scheme,因为当用户将值插入到单元格中时,这种表单的响应速度相对较慢(即使在像我这样的快速PC上)。 此外,这将使我相当简单的* .xlsm工作手册变得复杂化,它有超过50张(每周1张,这些工作表内容连接到主表),完全符合我的基本需求当然这个旋钮除外)。

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

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

顺便说一句,我也看不到在这个论坛上的其他问题的图像。 。 由于在浏览器中缺less插件,是否会发生这个问题?

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

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