Excel VBA-从错误工作簿中删除行/列的问题

Excel VBA-从错误工作簿中删除行/列的问题,excel,vba,delete-row,Excel,Vba,Delete Row,此代码从工作表复制数据,并将数据粘贴到test.csv文件中。如果test.csv已关闭,则会将其打开并粘贴 将数据输入其中。如果它已打开,则只需将数据粘贴到其中。到这一步为止,这个过程运行良好。粘贴数据之后 在test.csv中,我需要删除第一列值为“Old”的行。然后删除整个列“A” 这是我面临的挑战。如果test.csv关闭,宏将打开它,粘贴数据,然后删除行和列,并按预期工作 但是,如果test.csv已打开,则它会按预期粘贴值,但会删除其中的行和列 主要工作表。我尝试用块将删除代码放入,

此代码从工作表复制数据,并将数据粘贴到test.csv文件中。如果test.csv已关闭,则会将其打开并粘贴 将数据输入其中。如果它已打开,则只需将数据粘贴到其中。到这一步为止,这个过程运行良好。粘贴数据之后 在test.csv中,我需要删除第一列值为“Old”的行。然后删除整个列“A”

这是我面临的挑战。如果test.csv关闭,宏将打开它,粘贴数据,然后删除行和列,并按预期工作 但是,如果test.csv已打开,则它会按预期粘贴值,但会删除其中的行和列 主要工作表。我尝试用块将删除代码放入,但没有帮助。请建议

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

当将
一起使用时,与该工作表相关的任何内容都需要限定一个期间

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

除了限定已发布的所有范围和其他与工作表相关的对象(如@DaveExcel)之外,您还应该
Set wb=ActiveWorkbook
,而不是
Set wb=thiswoolk
。后者指的是存储宏的工作簿,而您可能打算使用活动工作簿

要进行调试,请启动VBA编辑器(ALT+F11),并在删除循环的第一行设置断点。检查工作簿的名称
wb
引用(“?wb.name”)。如果UCase(.Range(“A”&LR).Value)=“OLD”,则使用
使比较大小写独立

如果只执行一步循环,您将看到为什么不删除任何内容。

如果wb.sheets(“测试”)不是活动工作表,则需要限定
。Columns(“A”)。删除Shift:=xlShiftToLeft
带有一个周期。此外,wb作为一个变量变暗,现在是工作簿。它应该是
Dim wb as workbook,myData as workbook
我做了建议的更改,但现在调试代码时看起来很好,但在任何情况下都不会删除行/列-这意味着无论csv是打开还是关闭的。我想是因为-Set wb=ThisWorkbook,而我正试图在csv中删除它。有什么建议吗?重新定义CSV的TR示例代码的想法是向您显示范围不符合所需的表格。