Excel VBA循环以删除多个列

Excel VBA循环以删除多个列,excel,vba,Excel,Vba,我想搜索/循环打开的文件第1行上的所有列标题,如果它与dColumns匹配,则将其删除,dColumns是我不需要的列列表,我将其放入一个范围内 Sub LLextract() 'Last cell in column Dim WS As Worksheet Dim LastCell As Range Dim LastCellRowNumber As Long Set WS = ThisWorkbook.Worksheets("Consolidated Data") With WS

我想搜索/循环打开的文件第1行上的所有列标题,如果它与dColumns匹配,则将其删除,dColumns是我不需要的列列表,我将其放入一个范围内

Sub LLextract()

'Last cell in column
Dim WS As Worksheet
Dim LastCell As Range
Dim LastCellRowNumber As Long

Set WS = ThisWorkbook.Worksheets("Consolidated Data")
With WS
    Set LastCell = .Cells(.Rows.Count, "A").End(xlUp)
    LastCellRowNumber = LastCell.Row + 0
End With

Dim wb As Workbook, wb2 As Workbook
Dim vFile As Variant

'Set source workbook
Set wb = ActiveWorkbook

'Open the target workbook
vFile = Application.GetOpenFilename("CSV Files (*.csv), *.csv", , _
      "Select a CSV file", , False)

'if the user didn't select a file, exit sub
If TypeName(vFile) = "Boolean" Then Exit Sub
Workbooks.Open vFile

'Set selectedworkbook
Set wb2 = ActiveWorkbook

Dim dColumns As Range
Set dColumns = wb.Worksheets("LL Columns to Delete").Range("A:A")

    Dim i As Integer
    Dim A As Range
    For i = 94 To 1 Step -1
        Set A = wb2.Cells(1, i)
        If wb2.Cells(1, i) = dColumns Then A.EntireColumn.Delete
    Next i

'wb2.Worksheets(1).Range("A1").Select

End Sub

你不能只做
Range(“A”)
,用
Range(“A:A”)
替换它


(但是你想用
dColumns
做什么?)

你不能只做
Range(“A”)
,用
Range(“A:A”)
替换它


(但是你想用
dColumns
做什么?)

我打开wb2时删除了这个列,就解决了这个问题。这个问题不再需要回答或解决

我在打开wb2时只删除了列,就解决了这个问题。这个问题不再需要回答或解决

您在哪一行收到错误?设置dColumns=wb.Worksheets(“要删除的LL列”).Range(“A”)在哪一行收到错误?设置dColumns=wb.Worksheets(“要删除的LL列”).Range(“A”)@AnthonyS.erdenteuguldur-我还没有运行它,但从查看它的情况来看,它是否有效?您能否将
Find
与列引用一起使用?它在
单元格(i,1)
中查找“列A”?但不管怎样-改变射程解决了问题吗?@AnthonyS.erdentuguldur-是的,我就是这么想的。在您的OP中,您能否澄清您希望在
单元格(1,i)
中找到什么?也许可以发布一些示例数据?@AnthonyS.erdentuguldur-
单元格(1,i)
是一个单独的单元格,不是要搜索的区域。您是否希望
单元格(1,i)
中包含
A
,然后我们知道要删除列A?@AnthonyS.erdentugur您在
dColumns
中输入的值是什么单元格?我想您需要
wb.Worksheets(“LL Columns to Delete”).Range(“A1”)
或某个特定的单元格,以及要查找的值。或者你把你的
字段向后查找。@AnthonyS.erdenteuguldur你在循环错误的东西。您需要循环遍历
dColumn
并在搜索第1行时使用每个单元格值,因此假设我们对dColumn
中的每个rng执行
,那么我们的查找将是
Set rngfind=wb2.Range(“1:1”)。查找(dColumn
然后您将
列(rngfind.Column).delete
@AnthonyS.erdenteuguldur-我还没有运行它,但是从查看它的情况来看,它是否有效?您可以使用带有列引用的
Find
?它在
单元格(I,1)
中查找…”列a“?但无论如何-改变范围解决了问题吗?@AnthonyS.erdenteuguldur-是的,这是我在想的。在你的OP中,你能澄清一下你希望在
单元格(1,I)
中找到什么吗?也许会发布一些样本数据吗?@AnthonyS.erdenteuguldur-
单元格(1,I)
是一个单元格,不是搜索区域。你希望
单元格吗(1,i)
如果在其中包含
A
,那么我们就知道要删除列A?@AnthonyS.erdentugul您在
dColumns
中输入的值是什么?我想您想要
wb.工作表(“要删除的所有列”).Range(“A1”)
或某个特定单元格,带有要查找的值。或者您的
查找字段向后。@AnthonyS.erdenteuguldur您正在通过错误的东西进行循环。您需要在
dColumn
中循环,并在搜索第1行时使用每个单独的单元格值,因此,假设我们对dColumn
中的每个rng执行
,那么我们的查找将失败be
Set rngfind=wb2.Range(“1:1”)。查找(dcolumn
,然后您将
列(rngfind.Column)。删除