【发布时间】:2015-07-02 05:34:01
【问题描述】:
我希望有人可以帮助我查询。到目前为止,我有一个 excel 电子表格,您选择一个单元格,然后单击一个按钮,该按钮会打开一个带有滚动条的用户窗体,当您使用滚动条时,它会将单元格中的数字向上/向下编辑 +-1 到边界您在文本框中键入的内容。这会实时移动与每个单元格关联的图形。当我关闭用户窗体时,原始值会重新填充到单元格中。
我希望在使用电子表格时,人们最终能够选择多个单元格(随机数量的单元格,有时您可能会选择 2 或 7 或 10 个进行更改),并且用户表单将影响所有他们以与上面相同的方式但是我遇到了麻烦。这将使人们能够看到这些项目之间交互的影响。
为了使它适用于一个单元格,我已将变量定义为用户表单之外的公共变量,如下所示:
Public SelRange As Integer
那么在UserForm_Initialize内:
SelRange = Selection
然后是最大值、最小值、增量等代码,当使用滚动条时,该值通过代码存放在活动单元格中:
Selection = SelRange
但是,如果我选择大量单元格并尝试这样做,我会得到类型不匹配,这表明我应该以不同的方式定义 SelRange,但我无法弄清楚这是什么,或者即使这实际上有助于情况。
感谢您的帮助。
完整代码如下:
按钮代码:
Public SelRange As Integer
Sub Button1_Click()
UserForm1.Show
End Sub
用户窗体中滚动条的代码:
Option Explicit
' Sets default values for when the Userform is opened
Public Sub UserForm_Initialize()
MinBox.Value = -100
MaxBox.Value = 100
IncBox.Value = 5
SelRange = Selection
End Sub
'Ensures that the default starting point is midway between the min and max values specified
Sub scrollbar1_enter()
Dim x As Double
Dim y As Double
y = MaxBox.Value
x = MinBox.Value
ScrollBar1.Value = (x + y) / 2
Selection = SelRange
End Sub
'Sets all parameters in the scroll bar
Private Sub Scrollbar1_Change()
ScrollBar1.Max = MaxBox.Value
ScrollBar1.Min = MinBox.Value
ScrollBar1.LargeChange = IncBox.Value
ScrollBar1.SmallChange = IncBox.Value
Selection = ScrollBar1 + SelRange
End Sub
'Default on exit of userform
Private Sub ScrollBar1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim x As Double
Dim y As Double
y = MaxBox.Value
x = MinBox.Value
ScrollBar1.Value = (x + y) / 2
End Sub
'ensures activecell is updated in real time with dragging of mouse
Private Sub ScrollBar1_Scroll()
Selection.Value = ScrollBar1.Value + SelRange
End Sub
【问题讨论】:
-
SelRange 不会是一个范围而不是一个整数吗?
-
我试过了,它给了我一个“对象变量或未设置块变量”错误并且不会运行。
-
如果
SelRange是Range,您需要使用Set-Set SelRange = Selection分配给它。 -
我明白了。但是,当我对多个单元格执行此操作时,我会收到错误消息:Selection= ScrollBar1.Value + SelRange。当我尝试只改变一个单元格时,它也会使这个增加和减少非常不稳定。
-
您正在尝试向对象添加数字。这没有任何意义——您需要更仔细地考虑每个变量或元素代表什么。在某些情况下,VBA 会尝试自动转换并没有帮助。有关详细信息,请参阅下面的答案。