Vba 使用其他子对象修改子对象中的范围

Vba 使用其他子对象修改子对象中的范围,vba,excel,Vba,Excel,我正在用excel制作一个计算器。用户将自己定义为一个内置类型,然后用该类型的数据自动填充两个计算器 计算器中有10个数据源。我在15x15网格中的10个不同工作表中设置了这些数据。每种类型用户的数据存储在10张不同表格中的同一单元格中。(例如,如果您是类型20,则该结果的数据存储在所有10张表格的单元格“D6”)中) 我正试图找出如何在代码中更改此引用,以便插入每种类型的特定单元格引用,但我还没有找到正确的方法来实现这一点。示例代码如下所示: Sub CallTypeX() Dim b

我正在用excel制作一个计算器。用户将自己定义为一个内置类型,然后用该类型的数据自动填充两个计算器

计算器中有10个数据源。我在15x15网格中的10个不同工作表中设置了这些数据。每种类型用户的数据存储在10张不同表格中的同一单元格中。(例如,如果您是类型20,则该结果的数据存储在所有10张表格的单元格
“D6”
)中)

我正试图找出如何在代码中更改此引用,以便插入每种类型的特定单元格引用,但我还没有找到正确的方法来实现这一点。示例代码如下所示:

Sub CallTypeX()
    Dim backendvalue As Range
    Set backendvalue = Range("L17")

    Call CallGeneralCode

End Sub

 Sub CallGeneralCode()
     'Call data for InsCalc, where backendvalue represents appropriate range for type
     ThisWorkbook.Sheets("InsCalc").Range("H18").Value = ThisWorkbook.Sheets("Indic2a").backendvalue.Value

     'Call data for Indicator A worksheet, where backendvalue represents appropriate range for type
     ThisWorkbook.Sheets("IndicatorA").Range("F17").Value =     ThisWorkbook.Sheets("Indic2a").backendvalue.Value
     ThisWorkbook.Sheets("IndicatorA").Range("F18").Value = ThisWorkbook.Sheets("Indic3a").backendvalue.Value
     ThisWorkbook.Sheets("IndicatorA").Range("F19").Value = 0.44

     'Call data for InsCalc, where backendvalue represents appropriate range for type
     ThisWorkbook.Sheets("InsCalc").Range("H19").Value = ThisWorkbook.Sheets("Indic2a").backendvalue.Value

     'Call data for Indicator A worksheet, where backendvalue represents appropriate range for type
     ThisWorkbook.Sheets("IndicatorA").Range("F22").Value = ThisWorkbook.Sheets("Indic2b").backendvalue.Value
     ThisWorkbook.Sheets("IndicatorA").Range("F23").Value = ThisWorkbook.Sheets("Indic3b").backendvalue.Value
     ThisWorkbook.Sheets("IndicatorA").Range("F24").Value = 0.52

'
     'Move to Indicator B section

     [TRUNCATED CODE FOR LENGTH]
基本上,我试图找出如何将我调用的“backendvalue”设置为类型的适当范围,而不必为225种类型中的每种类型编写我调用的sub
“CallGeneralCode”
,并替换相应的单元格引用


我对VBA非常陌生。

如果你在CallTypeX子模块中对backendvalue进行调暗,其范围仅限于该子模块,除非你将其作为参数传入,否则CallGeneralCode将看不到它……基于你的目标,我认为最好的方法是在计算器工作表中使用命名范围,并使用VBA根据类型更改它们指向的位置。此VBA由工作表_更改事件调用,因此它会自动更新。如果您在CallTypeX子对象中设置backendvalue的值,则其范围仅限于该子对象,并且除非您将其作为参数传入,否则CallGeneralCode将不可见……根据您的目标,我认为最好的方法是在计算器工作表中使用命名范围,并使用VBA根据类型更改它们指向的位置。此VBA由“工作表更改”事件调用,因此它会自动更新。