此代码从工作表中复制数据,并将数据粘贴到test.csv文件中。如果test.csv已关闭,则将其打开并粘贴 数据放入其中。如果已经打开,则只需将数据粘贴到其中。到此步骤为止,过程正常进行。粘贴数据后 进入test.csv,我需要删除第一列值为'Old'的行。然后删除整个Col“ A”。
这是我面临的挑战。如果关闭了test.csv,则宏将其打开,粘贴数据,然后删除行和col,并按预期工作 ,但是,如果test.csv已经打开,那么它将按预期的那样粘贴值,但是删除行和列 主要工作表。我尝试将删除代码放在 With 块中,但没有帮助。请提出建议!
Sub Macro()
Dim LR As Long, PR As Long, X As Long, MyCopyRange, MyPasteRange
Dim wb, myData As Workbook, shtPaste As Worksheet
Set wb = ThisWorkbook
'open target csv file if not already opened
If CheckFileIsOpen("test.csv") = False Then
Set myData = Workbooks.Open(strFinalizedForBulkImport & "test.csv")
Else
Set myData = Workbooks("test.csv")
End If
Set shtPaste = myData.Sheets("test")
shtPaste.UsedRange.Clear
With wb.Sheets("Report Grp")
LR = .Range("A" & .Rows.Count).End(xlUp).Row
MyCopyRange = Array("A4:A" & LR, "B4:B" & LR, "C4:C" & LR, "D4:D" & LR) 'Put ranges in an array
MyPasteRange = Array("A1", "B1", "C1", "D1")
If LR > 1 Then
j = 0
For X = LBound(MyCopyRange) To UBound(MyCopyRange) 'Loop the array copying and pasting based on element in the array
.Range(MyCopyRange(j)).Copy
shtPaste.Range(MyPasteRange(j)).PasteSpecial xlPasteValuesAndNumberFormats
j = j + 1
Next
Else
Range("A1") = "No Data Found"
End If
End With
'Problem here, when trying to delete row with "Old" in Col "A" and finally Col "A" delete -
With wb.Sheets("test")
For LR = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If Range("A" & LR).Value = "Old" Then
Rows(LR).EntireRow.Delete
End If
Next LR
Columns("A").Delete Shift:=xlShiftToLeft
End With
End Sub
答案 0 :(得分:1)
使用with
时,与该工作表相关的任何内容都必须带有句点
With wb.Sheets("test")
For LR = .Range("A" & .Rows.Count).End(xlUp).Row To 1 Step -1
If .Range("A" & LR).Value = "Old" Then
.Rows(LR).EntireRow.Delete
End If
Next LR
.Columns("A").Delete Shift:=xlShiftToLeft
End With
答案 1 :(得分:0)
除了对所有范围和已发布的其他依赖于表格的对象(例如@Davesexcel)进行资格验证之外,您还应该Set wb = ActiveWorkbook
而不是Set wb = ThisWorkbook
。后者指的是宏存储在其中的工作簿,而您可能打算使用活动的工作簿。
要进行调试,请启动VBA编辑器(ALT + F11),然后在删除循环的第一行设置一个断点。检查工作簿的名称wb
是指(“?wb.name”)。使用If UCase(.Range("A" & LR).Value) = "OLD" Then
使比较不区分大小写。
如果您单步执行第一个循环,您将了解为什么什么都没有删除。