ActiveX滚动条慢

时间:2017-04-28 00:58:17

标签: excel vba excel-vba activex

我正在整理一个电子表格,动态绘制大型时间序列中的子集数据。这个想法是允许用户指定所绘制数据的开始时间。这是使用ActiveX文本框完成的。另外,我想允许用户滚动时间序列。这是通过包含ActiveX滚动条来实现的。为了使事物保持同步,文本框和滚动条都引用相同的单元格(称为“基准”的命名范围)。

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

-One通过参考原点来更新图表的时间轴。

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

- 当用户在文本框中输入新值时,它会修改数据。

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

-One在滚动条更改时调用轴重新缩放。

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

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

这对我来说有点难题,从朋友那里借一个类比,就好像excel运行速度快3英里.2。ActiveX滚动条在用户交互时会有多少开销吗?我附上了一个例子。

提前感谢您的任何指导。

0 个答案:

没有答案