excel - 我必须多次运行我的代码才能完全执行

标签 excel vba macos

我不确定是因为我使用的是 mac 还是代码错误,但是行没有正确识别,因此没有将其删除或粘贴到另一个电子表格中。我必须运行代码三遍才能正确地通过它并将单元格复制/粘贴并删除到另一个电子表格中。

非常感谢!

这是代码:

Dim j, lastidno As Long


Sheets("Part B + C Modules").Activate
lastidno = Range("A2", Range("A2").End(xlDown)).Count + 1
For j = 2 To lastidno
If Range("O" & j) = "" Then
Sheets("Part B + C Modules").Range("A" & j).Copy
            Sheets("No Options Selected").Select
            NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
            Cells(NextRow, 1).Select
            ActiveSheet.Paste
            Sheets("Part B + C Modules").Activate
Rows(j).EntireRow.Delete
End If
Next

MsgBox "done"
End Sub

最佳答案

使用负数 Step 向后迭代和删除行> For j = lastidno to 2 Step -1
但是,您似乎可以更优雅地重写代码以避免:

  • 隐式 Range引用资料
  • 迭代
  • 使用 ActivateSelect

  • 关键是要有Explicit工作表引用。也可以使用SpecialCells可以在这里派上用场返回 Range一口气(所以不再重复)。这样您也可以一次性删除所有行!

    例如,您的代码可能如下所示:
    Sub Test()
    
    'Set up your worksheet variables
    Dim ws1 As Worksheet: Set ws1 = Worksheets("Part B + C Modules")
    Dim ws2 As Worksheet: Set ws2 = Worksheets("No Options Selected")
    
    'Get last used rows
    Dim lr1 As Long: lr1 = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
    Dim lr2 As Long: lr2 = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row
    
    'Set your range and copy it
    Dim rng As Range: Set rng = ws1.Range("O2:O" & lr1).SpecialCells(xlCellTypeBlanks).Offset(0, -14)
    rng.Copy ws2.Cells(lr2 + 1, 1)
    
    'Delete your range
    rng.EntireRow.Delete
    
    MsgBox "done"
    
    End Sub
    

    小渔获:SpecialCells当没有找到空单元格时将返回错误。您可能想使用 On error 来解决这个问题。或计算 Range 中的空单元格首先(我个人的喜好)。因此,该特定部分可能如下所示:
    'Set your range and copy it
    If WorksheetFunction.CountBlank(ws1.Range("O2:O" & lr1)) > 0 Then
        Dim rng As Range: Set rng = ws1.Range("O2:O" & lr1).SpecialCells(xlCellTypeBlanks).Offset(0, -14)
        rng.Copy ws2.Cells(lr2 + 1, 1)
    End If
    

    另一个小笔记供将来引用:Dim j, lastidno As Long只有 lastidno声明为 Long数据类型。 j变量自动分配给 Variant/Integer因此,当您的数据大于此数据类型可以容纳的数据时,可能会成为问题 > 返回 OverFlow错误。

    关于excel - 我必须多次运行我的代码才能完全执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59608715/

    相关文章:

    c# - 如何在 Excel 电子表格上从 C# 更改工作表名称

    mysql - SUM 前 5 个数字中的第二大和第三大数字

    ms-access - 如何在 VBA 中使用字符串获取对变量的引用?

    VBA:Range 类的 PasteSpecial 方法失败

    swift - CoreML – 如何创建一个简单的 MLFeatureProvider 类

    mysql - 无法在 Mac OSX 10.6 上停止 Mysql 5.1

    Excel 公式,其中如果 Sheet1 列 A 等于 Sheet2 列 A 并且 Sheet1 列 B 等于 Sheet2 列 B,则将某些数据从 Sheet2 复制到 Sheet 1

    excel - 在Excel宏中选择范围

    excel - 在 "If Statement"内压缩重复代码

    objective-c - 在 Mac 上创建自定义文件扩展名