ActiveX滚动栏缓慢

我正在制作一个电子表格,可以从一个大型的时间序列dynamic地绘制子集数据。 这个想法是允许用户指定绘制数据的开始时间。 这是使用ActiveX文本框完成的。 此外,我想让用户滚动浏览时间系列。 这是通过包含一个ActiveX滚动条来完成的。 为了保持同步,文本框和滚动条都引用同一个单元格(一个名为'datum'的命名区域)。

这是事情变得有趣的地方。 我已经写了三个潜艇:

– 通过参考数据更新图表的时间轴。

Sub ReScaleChartAxis() Dim chtMin, chtMax As Long Dim grphSht, dtSht As Worksheet Dim minDepthCell As Range Set grphSht = Sheets("PlotSheet") Set dtSht = Sheets("Data") Set minDepthCell = dtSht.Range("datum") 'Optimize Application.ScreenUpdating = False Application.EnableEvents = False 'Determine Max/Min of time used in chart chtMin = Val(minDepthCell.Value) chtMax = chtMin + 500 'Update chart With grphSht.ChartObjects("Plot").Chart.Axes(xlCategory) .MaximumScale = chtMax .MinimumScale = chtMin End With 'Reset Optimization Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

– 在用户在文本框中input新值时修改数据。

 Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim datMin, datMax As Double If KeyCode = vbKeyReturn Then datMin = Sheets("Data").Range("dat_min").Value datMax = Sheets("Data").Range("dat_max").Value If Not IsNumeric(TextBox1.Value) Then TextBox1.Value = Sheets("Data").Range("datum") ElseIf Val(TextBox1.Value) <= datMin Then Sheets("Data").Range("datum") = datMin TextBox1.Value = datMin ElseIf Val(TextBox1.Value) >= (datMax - 450) Then Sheets("Data").Range("datum") = datMax - 500 TextBox1.Value = datMax - 500 Else Sheets("Data").Range("datum") = Val(TextBox1.Value) End If End If End Sub 

– 在滚动条更改时调用轴重新调整。

 Private Sub ScrollBar1_Change() Call ReScaleChartAxis TextBox1.Value = Sheets("Data").Range("datum") TextBox1.Select End Sub 

奇怪的是,如果滚动条被用户更改,它的事件被触发,图表更新,挂起约1-2秒后。 而如果用户在文本框中input一个新的值,则该条目通过validation,更新基准单元格,然后触发scrollbar_change事件,并立即完成。

对我来说,这是一个难题,借用一个朋友的类比,就好像excel可以运行3英里,比运行快2. ActiveX滚动条有用户交互的那么多的开销吗? 我附上一个例子。

提前感谢您的任何指导。