簡體   English   中英

使用用戶表格調整單元格范圍

[英]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 CellsValue屬性將特別有用。 特別是,要增加范圍內的每個單元格,您可以執行以下操作:

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對象通常更容易,因為可以使用更靈活的方式訪問單個單元格( CellsOffsetRowsColumns等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM