VBA数组删除整个列

此代码尝试删除包含与Array(列表)中的“Text”匹配的Header行的列。

该代码成功删除基于第一个数组值“标题文本1”的列。

A.EntireColumn.Delete循环的第二遍期间发生问题。 当我打印vItem ,它显示预期的“Header Text 2”值,这是数组中正确的项目。

VBA错误 – 运行时错误“91”

对象variables或未设置块variables

 Sub ArrayLoop() Dim ColumnsToRemove As Variant Dim vItem As Variant Dim A As Range ColumnsToRemove = Array("Header Text 1", "Header Text 2", "Header Text 3") For Each vItem In ColumnsToRemove Set A = Rows(1).Find(What:=(ColumnsToRemove), LookIn:=xlValues, lookat:=xlPart) Debug.Print vItem A.EntireColumn.Delete Next End Sub 

您需要查找vItem ,并且您需要在尝试删除它所在的列之前添加一个检查以查看它是否被发现。

 Sub ArrayLoop() Dim ColumnsToRemove As Variant Dim vItem As Variant Dim A As Range ColumnsToRemove = Array("Header Text 1", "Header Text 2", "Header Text 3") For Each vItem In ColumnsToRemove Set A = Rows(1).Find(What:=vItem, LookIn:=xlValues, _ lookat:=xlPart) Debug.Print vItem, Not A Is Nothing If Not A Is Nothing Then A.EntireColumn.Delete Next End Sub 

循环索引的方法是使用uboundlbound

 Sub ArrayLoop() Dim ColumnsToRemove As Variant Dim vItem As Variant Dim A As Range Dim i As Long ColumnsToRemove = Array("Header Text 1", "Header Text 2", "Header Text 3") For i = LBound(ColumnsToRemove) To UBound(ColumnsToRemove) Set A = Rows(1).Find(what:=ColumnsToRemove(i), LookIn:=xlValues, lookat:=xlPart) Debug.Print ColumnsToRemove(i) ' not sure what `vItem` was intended to be If A Is Nothing Then Debug.Print "Nothing found" ElseIf Not A Is Nothing Then A.EntireColumn.Delete End If Next i End Sub 
 Sub ArraybLoop() Dim ColumnsToRemove() As Variant Dim vItem As Variant Dim A As Range Dim i As Long Dim Sht As Worksheet Set Sht = ActiveWorkbook.Sheets("Sheet1") ColumnsToRemove = Array("Header Text 1", "Header Text 2", "Header Text 3") For i = LBound(ColumnsToRemove) To UBound(ColumnsToRemove) Step 1 vItem = Application.Match(ColumnsToRemove(i), Sht.Rows(1), 0) Debug.Print vItem If IsNumeric(vItem) Then Sht.Columns(vItem).Delete Next i End Sub 

上限和下限

理解数组