[英]Using a userform to adjust a range of cells
我希望有人可以幫助我進行查詢。 到目前為止,我有一個excel電子表格,您選擇一個單元格,然后單擊一個按鈕,該按鈕將打開一個帶有滾動條的用戶窗體,當您使用滾動條時,它將按+ -1向上/向下編輯單元格中的數字您在文本框中輸入的內容。 這將實時移動與每個單元格關聯的圖形。 當我關閉用戶窗體時,原始值將重新填充到單元格中。
我的希望是,最終,當使用電子表格時,人們將能夠選擇多個單元格(隨機數的單元格,有時您可能選擇2或7或10個單元格進行更改),並且用戶表單會影響以上相同的方式,但是我對此有麻煩。 這將使人們看到這些項目之間交互的影響。
為了使它適用於一個單元格,我將變量定義為用戶窗體外部的public,如下所示:
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
您當前的代碼適用於一個單元格,因為Range
對象的默認屬性是Value
。 因此,您要將所選單元格中的值放入變量中。 但是對於多個單元格, 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
總是返回2D數組。 因此, getAllValuesAtOnceAsArray(rowNumber,columnNumber)
獲得數組的單個元素-即使一個始終為1,您也需要兩個索引。實際上,使用Range
對象通常更容易,因為可以使用更靈活的方式訪問單個單元格( Cells
, Offset
, Rows
, Columns
等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.