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
完全是重新配置的