通过"旋转"按钮启动不同的工作表

mce*_*na2 5 excel vba spinner

想要使用旋转按钮(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
Run Code Online (Sandbox Code Playgroud)

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

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

令人惊讶的是,如果我尝试通过将值(工作表名称索引)写入定义的单元格(即使用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
Run Code Online (Sandbox Code Playgroud)

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

有人知道为什么会出现这个问题并找到解决方法吗?我是否必须在Excel中更改某些设置或系统属性?任何帮助将受到高度赞赏.

@mehow由于词汇量很大,我在这里附上了我的名字.

  1. 我按照你的建议,尝试了插入主动控件"Microsoft Office Spreadsheet"的UserForm示例.我发现这对我的情况来说不是一个好的解决方案,因为当用户将值插入单元格时,这种表单的响应相对较慢(即使在像我这样的快速PC上).此外,这将使我相当简单的*.xlsm工作簿变得非常复杂,该工作簿有超过50张(每周1张,这些纸张的内容然后链接到主页),完全符合我的基本必需品(与当然,除了这个旋转按钮).

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

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

顺便说一句,我也看不到这个论坛其他问题的图像..由于Web浏览器中缺少插件,是否会出现此问题?

小智 1

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

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