VBA范围变化选择,值不变

时间:2017-11-10 14:45:45

标签: vba excel-vba range excel

我有一个范围变量(称为Constr),它基于看起来像这样的数据

Type    Bound1    Bound2    Var1    Var2
X       1         2         3       4
Y       1         2         3       4
--  
Z       1         2         3       4

我现在使用此程序将选择更改为仅在' - '

之前的条目
Sub Adjust_Selection(which As String, what_in As String, columns As Integer)
    Dim row_nr_start As Integer
    Dim row_nr_end As Integer
    Dim row_nr_delta As Integer

    Sheets("Main").Select
    row_nr_start = Range(which).Find(what:=what_in, LookIn:=xlValues, LookAt:=xlWhole).Row
    row_nr_end = Range(which).Find(what:="--", LookIn:=xlValues, LookAt:=xlWhole).Row

    row_nr_delta = row_nr_end - row_nr_start

    Range(which).Resize(row_nr_delta, columns).Select

如果我现在使用

调用它,我可以看到选择发生了变化
Call Adjust_Selection("Constr", "Type", 5)
myitem("Constraints") = Range("Constr").Value

myitem的类型为

Dim myitem As New Scripting.Dictionary

然而,当我访问该值时,它仍然包含其中的所有内容。如何才能将值更新为“ - ”之前的前几行?

3 个答案:

答案 0 :(得分:1)

您正在使用指定范围Adjust_Selection呼叫Constr,然后引用指定范围Constraints。所以,当然结果是不同的,因为你指的是两个不同的命名范围。

此外,命名范围Constr不会改变。它仅用作起点,然后子集为Selected。但是通过选择你没有改变命名范围的东西(特别是不同的命名范围)。

所以,我猜你正在寻找这个:

Call Adjust_Selection("Constr", "Type", 5)
ThisWorkbook.Names.Add Name:="Constraints", RefersTo:=Selection
myitem("Constraints") = Range("Constraints").Value

注意,Adjust_Selection的选择现在已“保存”在新命名的范围Constraints中,然后myitem被分配了此命名范围,该范围仅限于(正确)选择。因此,结果变量(作为字典)包含没有--的所有元素。

答案 1 :(得分:0)

嗨ThatQuantDude,即使在我自己尝试之后,我也不太了解你的问题。根据您给出的示例,我假设您希望将所选范围数据存储到"约束"键?除此之外,用于选择范围的子功能正常工作。

Call Adjust_Selection("Constr", "Type", 5)
myitem("Constraints") = Range("Constraints").Value

感谢您是否可以进一步详细说明,以便我能更好地了解您的目标?感谢。

答案 2 :(得分:0)

Range.Resize是一个函数。它不会改变范围;它返回一个新的。你碰巧选择它,这是不必要的。将您的sub转换为返回Range.Resize结果的函数,并直接在作业的右侧使用此函数。 请注意,您在两行代码中都没有使用相同的名称,我认为这是一个错字。