Vba 先前筛选的工作表的数据源范围选择出现错误9
我正在尝试使用以下代码Vba 先前筛选的工作表的数据源范围选择出现错误9,vba,excel,Vba,Excel,我正在尝试使用以下代码 选择以前筛选的工作表(数据库)的1列中的所有可见单元格,然后 将验证应用于所有可见单元格,从保存在单独表格中的1个动态列(SKU检查)开始。在以下行:Set tbl_5=Activesheet……vba返回错误9,下标超出范围。到达此模块之前,已筛选数据库工作表 如果它是参照物,你知道吗?数据库工作表是表数据,不确定这是否会改变任何内容… 代码: 您的代码中有几个问题: 正如@Ralph在评论中指出的,不可能有一个名为“SKU检查”的表 ListObjects名称不能包
Set tbl_5=Activesheet……
vba返回错误9,下标超出范围
。到达此模块之前,已筛选数据库工作表您的代码中有几个问题:
- ListObjects名称不能包含空格
- 这就是导致“错误9:下标超出范围”的原因
Dim tbl_5作为列表对象
- 您试图为此ListObjects分配数据源范围。正如类型名称所暗示的那样:
- “ListObject”是一个对象
- “数据源范围”是范围对象
- 这将产生一个错误
- .Select返回包含True或False(操作结果)的变量
Dim WS as工作簿
- 您试图将工作表对象分配给它,它将生成另一个错误
若要修复代码,请在工作表(“数据库”)上提供一个名为“SKUCheck”的表:
@戴维兹曼,这是建立在你以前的基础上的answered@davidZemens,appologies如果tbl_5应该是一个ListObject(每个dim),那么它应该设置为一个ListObject,而不是ListObject的列,当然也不是DataodyRange。还是我遗漏了什么?嘿,拉尔夫,我需要选择特定列的数据源范围。DataBody Rnage是一个列表对象您是否尝试过设置tbl_5=ActiveSheet.ListObjects(“SKU检查”)?
Sub VALIDATION_c()
Dim tbl_5 As ListObject
Dim rng As Range
Dim PH5Rng As Range
Dim Val5 As Range
Dim WS As Workbook
Sheets("Database").Select
Set tbl_5 = ActiveSheet.ListObjects("SKU Check").ListColumns(2).DataBodyRange.Select
Set rng = tbl_5.DataBodyRange.SpecialCells(xlCellTypeVisible)
Set Val5 = Sheets("SKU Check").Range("G1:G20")
Set WS = ThisWorkbook.Worksheets("SKU CHECK")
For Each tbl_5 In rng.Areas
With tbl_5.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & WS.Name & "'!" & Val5.Address
End With
Next
MsgBox ("DONE VALIDATION")
End Sub
Option Explicit
Sub VALIDATION_c()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim tbl As ListObject
Dim col1 As Range
Dim col2 As Range
Set ws1 = Worksheets("Database")
Set ws2 = Worksheets("SKU Check")
Set tbl = ws1.ListObjects("SKUCheck")
Set col1 = tbl.DataBodyRange.Columns(2).SpecialCells(xlCellTypeVisible)
Set col2 = ws2.Range("G1:G20")
With col1.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & ws2.Name & "'!" & col2.Address
End With
MsgBox ("DONE VALIDATION")
End Sub