Excel VBA:使用包含列号的variables删除多个列

由于在我的原始数据中调整列的可能性很高,我想将列号存储在variables中。

我认为我的语法Columns(Variable_name)是错误的,但不能确定哪些工作

我尝试了Columns("Variable_name") ,这也没有工作。

 Set Cws = Worksheets.Add Cws.Name = "Ready_For_Send" Dim Region As Integer: Region = 1 Dim Sub_Region As Integer: Sub_Region = 2 Dim User_Status As Integer: User_Status = 5 Dim Count As Integer: Count = 15 With Cws .Range(.Columns(Region) & "," & .Columns(Sub_Region) & "," & .Columns(User_Status) & "," & Columns(Count)).Delete End With 

您可以使用以下内容:

 With Cws .Range(Cells(1, Region).EntireColumn.Address & "," _ & Cells(1, Sub_Region).EntireColumn.Address & "," _ & Cells(1, User_Status).EntireColumn.Address & "," _ & Cells(1, Count).EntireColumn.Address).Delete End With 

您可以使用Union将所有列合并到一个Range ,然后将其删除。

试试下面的代码:

 Dim DelRng As Range With Cws ' Set a new range from all the columns you want to delete Set DelRng = Union(.Columns(Region), .Columns(Sub_Region), .Columns(User_Status), .Columns(Count)) DelRng.Delete End With 

可能是这样的:

 Option Explicit Sub DeleteCols() Dim wb As Workbook Dim Csw As Worksheet Dim Region As Long Dim Sub_Region As Long Dim User_Status As Long Dim Count As Long Dim Cws As Worksheet Region = 1 Sub_Region = 2 User_Status = 5 Count = 15 Set wb = ThisWorkbook Application.DisplayAlerts = False On Error Resume Next Set Cws = wb.Worksheets.Add Cws.Name = "Ready_For_Send" On Error GoTo 0 Application.DisplayAlerts = True With Cws .Range( _ ReturnName(Region) & ":" & ReturnName(Region) & "," & _ ReturnName(Sub_Region) & ":" & ReturnName(Sub_Region) & "," & _ ReturnName(User_Status) & ":" & ReturnName(User_Status) & "," & _ ReturnName(Count) & ":" & ReturnName(Count) _ ).Delete Shift:=xlToLeft End With End Sub Function ReturnName(ByVal num As Integer) As String ReturnName = Split(Cells(, num).Address, "$")(1) End Function 

从这里的一些结构和function: 删除多个列

我已经包含error handling情况表已经存在。 也完整的声明。 为了便于阅读,我还在不同的线路上放了宣言和作业。