使用用户窗体来调整单元格的范围
我希望有人可以帮助我的查询。 到目前为止,我有一个Excel电子表格,然后select一个单元格,然后单击一个button,该button将打开一个滚动条的用户窗体,当您使用滚动条时,此编辑单元格中的数字由+ -1上/下限制你input文本框。 这将实时移动与每个单元格关联的graphics。 当我closures用户窗体时,原始值将重新填充到单元格中。
我希望在使用电子表格的时候,人们最终可以select一些单元格(随机数的单元格,有时你可以select2或者7或者10来更改),并且用户表单会影响所有的单元格同样的方式上面,但是我有这个麻烦。 这将使人们看到这些项目之间的互动的影响。
为了使它适用于一个单元格,我已经将该variables定义为在用户表单之外公开,如下所示:
Public SelRange As Integer
然后在UserForm_Initialize
内:
SelRange = Selection
然后是代码的最大值,最小值,增量等,当使用滚动条时,值被存储在活动单元格的代码:
Selection = SelRange
但是,如果我select许多单元格,并尝试这样做,我得到一个types不匹配,这将build议我应该以不同的方式来定义SelRange
,但我不知道这是什么,或者即使这将实际上帮助情况。
谢谢你的帮助。
下面的完整代码:
button代码:
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
您当前的代码适用于一个单元格,因为Range
对象的默认属性是Value
。 所以你把所选单元格的值放入你的variables中。 但是对于多个单元格, Value
属性将返回一个Array
– 这将不适合Integer
。
它看起来像你需要声明selRange
作为一个Range
然后工作:
Public selRange as Range '... If TypeName(Selection) = "Range" Then Set selRange = Selection Else 'handle case when something other than cell(s) are selected here End If 'rest of your code here
查找MSDN中的Range对象引用以获取有关使用Range
。 Cells
和Value
属性将特别有用。 特别是要增加一个范围内的每个单元格,你可以这样做:
Dim getAllValuesAtOnceAsArray As Variant getAllValuesAtOnceAsArray = selRange.Value Dim singleCell As Range For Each singleCell In selRange.Cells singleCell.Value = singleCell.Value + 1 Next singleCell 'Now write back the original values selRange.Value = getAllValuesAtOnceAsArray
有一件事要注意的是,如果有多个单元格(即使范围只有一行或一列), Range.Value
总是返回一个二维数组。 所以getAllValuesAtOnceAsArray(rowNumber,columnNumber)
获取数组的单个元素 – 即使一个总是1,也需要两个索引。实际上,使用Range
对象通常更容易,因为访问单个单元格有更灵活的方法Cells
, Offset
, Rows
, Columns
等)。
- 在Excel VBA中从string中删除HTML标记
- Excel VBA – 使用RESIZE“粘贴” – 需要粘贴特殊(科学记数法)
- .NET 4.0的F#和Excel集成(Visual Studio 2010 Beta 1)
- Excel匹配多个标准加search
- XslCompiledTransform – 使用XSLT样式表转换XML时编译错误
- 将单个值存储到dynamic数组中:types不匹配
- 连接字母和variables以创build单元格引用的VBA代码
- 从HRESULTexception:0x80010105(RPC_E_SERVERFAULT)打开xlsx文件时
- 性能问题:使用Powershell将csv转换为excel