Excel 如何获得配置表上参考参数的范围?

Excel 如何获得配置表上参考参数的范围?,excel,vba,Excel,Vba,需要将模板列转移到新工作表Sharepoint ID。目前该数据位于D列,因此我设置了一个配置工作表configuration,以便用户可以找到列号,我的代码可以引用它。只要数据在另一列中,用户就可以输入该数据,下面的代码将在引用时更新 复制数据时,我使用了以下方法: Dim wsConfig As Worksheet Set wsConfig = ThisWorkbook.Worksheets("Configuration") wb.Worksheets("Roster").Range(Cel

需要将模板列转移到新工作表
Sharepoint ID
。目前该数据位于D列,因此我设置了一个配置工作表
configuration
,以便用户可以找到列号,我的代码可以引用它。只要数据在另一列中,用户就可以输入该数据,下面的代码将在引用时更新

复制数据时,我使用了以下方法:

Dim wsConfig As Worksheet
Set wsConfig = ThisWorkbook.Worksheets("Configuration")
wb.Worksheets("Roster").Range(Cells(wsConfig.Range("B4")), _
                              Cells(wsConfig.Range("B2")), _
                              Cells(lastrow, Cells(wsConfig.Range("B2")))).Copy , _
Destination:=wb.Workheets("Sharepoint IDs").Range(wb.Workheets("Sharepoint IDs").Cells(1, 1), _
wb.Workheets("Sharepoint IDs").Cells(1, 1))
在本例中,我将放置
wsConfig.Range(“B4”)
(10)和
wsConfig.Range(“B2”)
(4),而不是
单元格(10,4)
,因为这引用了用户在这些单元格中输入的内容。这样,它可以适应用户指定的任何内容


我不断得到一个
对象不支持该行的属性或方法错误
,你知道为什么吗?

wsConfig
。为该工作表指定一个代码名,例如
ConfigSheet
,然后在需要引用该特定工作表时在代码中使用该标识符名。请注意,您只能在编译时使用
ThisWorkbook
中存在的工作表执行此操作;有关更多信息,请参阅我的文章

一个问题是合格和不合格
工作表
成员调用的嵌套;限定的成员调用是针对限定的
工作表
对象进行的,但是嵌套的、非限定的成员调用引用的是当时活动表恰好是的任何对象,如果不是限定外部成员调用的
工作表
对象,则可能会出现错误1004。RuberDuck的静态代码分析工具将这些非限定成员调用标记为

不合格的
单元格
成员调用不一定与
wb.Worksheets(“花名册”)
表背道而驰,但它们显然是有意的。这一点应该明确

带有块的
可以解决此问题:

With wb.Worksheets("Roster")
    .Range(.Cells(ConfigSheet.Range("B4").Value, ConfigSheet.Range("B2".Value)) ...
End With
…但这并不理想,因为现在所有内容都隐式地延迟绑定,因为
工作表
返回一个
对象
,而现在我们失去了编译时验证

最好为它声明一个局部变量。。。现在,编译器将开始抱怨有3个参数的
工作表.Range
调用,而不是睁一只眼闭一只眼(由于隐式的后期绑定),只在运行时爆发:

Dim rosterSheet As Worksheet
Set rosterSheet = wb.Worksheets("Roster")

Dim idSheet As Worksheet
Set idSheet = wb.Worksheets("Sharepoint IDs")

With rosterSheet
    .Range(.Cells(ConfigSheet.Range("B4").Value, _
           .Cells(ConfigSheet.Range("B2").Value), _
           .Cells(lastRow, .Cells(ConfigSheet.Range("B2").Value) _
    .Copy Destination:=idSheet.Cells(1, 1)
End With
Worksheet.Range
接受1或2个参数:当给定两个参数时,第一个参数应为左上角单元格,第二个参数为所需矩形连续单元格范围的右下角单元格

我猜不出你想复制的具体范围,但事实就是这样。您的帖子中没有足够的信息来提供实际的工作代码;我假设,
lastrow
是B4在配置表中所说的内容。如果是这样,那么可能是这样:


避免不必要地嵌套
范围
单元格
调用,并始终使用
工作表
对象引用明确限定它们;还应避免继续使用不完整、有效的语句行-感谢您没有将
目标:=
命名参数拆分为多行。

wsConfig
。为该工作表指定一个代码名,例如
ConfigSheet
,然后在需要引用该特定工作表时在代码中使用该标识符名。请注意,您只能在编译时使用
ThisWorkbook
中存在的工作表执行此操作;有关更多信息,请参阅我的文章

一个问题是合格和不合格
工作表
成员调用的嵌套;限定的成员调用是针对限定的
工作表
对象进行的,但是嵌套的、非限定的成员调用引用的是当时活动表恰好是的任何对象,如果不是限定外部成员调用的
工作表
对象,则可能会出现错误1004。RuberDuck的静态代码分析工具将这些非限定成员调用标记为

不合格的
单元格
成员调用不一定与
wb.Worksheets(“花名册”)
表背道而驰,但它们显然是有意的。这一点应该明确

带有
块的
可以解决此问题:

With wb.Worksheets("Roster")
    .Range(.Cells(ConfigSheet.Range("B4").Value, ConfigSheet.Range("B2".Value)) ...
End With
…但这并不理想,因为现在所有内容都隐式地延迟绑定,因为
工作表
返回一个
对象
,而现在我们失去了编译时验证

最好为它声明一个局部变量。。。现在,编译器将开始抱怨有3个参数的
工作表.Range
调用,而不是睁一只眼闭一只眼(由于隐式的后期绑定),只在运行时爆发:

Dim rosterSheet As Worksheet
Set rosterSheet = wb.Worksheets("Roster")

Dim idSheet As Worksheet
Set idSheet = wb.Worksheets("Sharepoint IDs")

With rosterSheet
    .Range(.Cells(ConfigSheet.Range("B4").Value, _
           .Cells(ConfigSheet.Range("B2").Value), _
           .Cells(lastRow, .Cells(ConfigSheet.Range("B2").Value) _
    .Copy Destination:=idSheet.Cells(1, 1)
End With
Worksheet.Range
接受1或2个参数:当给定两个参数时,第一个参数应为左上角单元格,第二个参数为所需矩形连续单元格范围的右下角单元格

我猜不出你想复制的具体范围,但事实就是这样。您的帖子中没有足够的信息来提供实际的工作代码;我假设,
lastrow
是B4在配置表中所说的内容。如果是这样,那么可能是这样:


避免不必要地嵌套
范围
单元格
调用,并始终使用
工作表
对象引用明确限定它们;还要避免继续使用不完整、有效的语句行-感谢您没有将
目标:=
命名参数拆分为多行。

并且您有一个输入错误:
工作表
单元格(wsConfig.Range(“B4”)
没有工作表限定符将始终引用活动表,所以你应该先解决这个问题。将有助于显示配置表中的示例值。请注意。另外,请参阅了解为什么
wsConfig
完全是重新配置的