Excel VBA循环以删除多个列
我想搜索/循环打开的文件第1行上的所有列标题,如果它与dColumns匹配,则将其删除,dColumns是我不需要的列列表,我将其放入一个范围内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
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执行,那么我们的查找将失败beSet rngfind=wb2.Range(“1:1”)。查找(dcolumn
,然后您将列(rngfind.Column)。删除