【问题标题】:Need some changes to the below code需要对以下代码进行一些更改
【发布时间】:2011-09-29 04:36:12
【问题描述】:

这是程序员 Reafidy 在 stackoverflow 上建议的代码。它按预期工作。 Need a better optimized code? 现在我必须为一个大文件重新使用相同的代码。

Sub Delete_Duplicate_Codes()  
ThisWorkbook.Worksheets("Data").Activate
Dim vData As Variant, vArray As Variant
Dim lRow As Long
    With ActiveSheet.Range("A3", Cells(Rows.Count, "A").End(xlUp)).Offset(, 52)
        .FormulaR1C1 = "=RC[-24]&RC[-23]&RC[-19]&RC[-18]&RC[-17]&RC[-16]" ' I know what these meant concatenate A,B,F,G,H,I and I have changed it accordingly
        vData = .Resize(, 1).Value
    End With
ReDim vArray(1 To UBound(vData, 1), 0)
    With CreateObject("Scripting.Dictionary")
        For lRow = 1 To UBound(vData, 1)
            If Not .exists(vData(lRow, 1)) Then
                vArray(lRow, 0) = "x"
                .Add vData(lRow, 1), Nothing
            End If
        Next lRow
    End With
Application.ScreenUpdating = False
    With ActiveSheet
        .Range("BB3").Resize(UBound(vArray, 1)) = vArray
        On Error Resume Next
        .Range("BA34274", .Cells(Rows.Count, "BA").End(xlUp)).Offset(, 1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        On Error GoTo 0
        .Columns(52).Resize(, 2).ClearContents ' throwing an error
    End With
Application.ScreenUpdating = True
End Sub

他帮助了我,我们为此使用了 y 和 z 列现在我必须使用 BA 和 BB 列来完成这些任务。我不明白在哪里进行更改。我将 z 替换为“BB”,将 y 替换为“BA”列,但它在这些行抛出错误应用程序定义或对象定义

     .Columns(52).Resize(, 2).ClearContents

我必须进行更改,前 1 和 2 行用于标题。单元格从第 3 行开始。请帮我处理这些代码。非常感谢任何帮助

我变了

 .FormulaR1C1 = "=RC[-24]&RC[-23]&RC[-19]&RC[-18]&RC[-17]&RC[-16]"  these to
  .FormulaR1C1 = "=RC[-52]&RC[-51]&RC[-47]&RC[-46]&RC[-45]&RC[-44]" these

我想应该是对的

【问题讨论】:

  • Niko,代码工作正常吗?还是需要帮助?
  • @Reafidy 实际上我还没有测试代码!我正在从事其他活动,我将在星期一测试它我没有时间测试它
  • @Reafidy 在测试完代码后我会通知您是否需要进行任何更改并感谢您的帮助

标签: excel vba


【解决方案1】:

你差点就有了,应该是:

.Columns(53).Resize(, 2).ClearContents

但我不明白它是如何引发错误的。

另外,如果您不喜欢 R1C1 表示法,您可以使用:

  With ActiveSheet.Range("A3", Cells(Rows.Count, "A").End(xlUp)).Offset(, 52)
        .Formula = "=A3&B3&F3&G3&H3&I3"
        vData = .Resize(, 1).value
  End With

您还应该保留空格,这有助于提高可读性。

Sub Delete_Duplicate_Codes()
    Dim vData As Variant, vArray As Variant
    Dim lRow As Long

    With ActiveSheet.Range("A3", Cells(Rows.Count, "A").End(xlUp)).Offset(, 52)
        .Formula = "=A3&B3&F3&G3&H3&I3"
        vData = .Resize(, 1).value
    End With

    ReDim vArray(1 To UBound(vData, 1), 0)
    With CreateObject("Scripting.Dictionary")
        For lRow = 1 To UBound(vData, 1)
            If Not .exists(vData(lRow, 1)) Then
                vArray(lRow, 0) = "x"
                .Add vData(lRow, 1), Nothing
            End If
        Next lRow
    End With

    Application.ScreenUpdating = False

    With ActiveSheet
        .Range("BB3").Resize(UBound(vArray, 1)) = vArray
        On Error Resume Next
        .Range("BA34274", .Cells(Rows.Count, "BA").End(xlUp)).Offset(, 1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        On Error GoTo 0
        .Columns(53).Resize(, 2).ClearContents
    End With

    Application.ScreenUpdating = True
End Sub

【讨论】:

  • 上面的代码有一些问题我不知道为什么它会挂掉我认为因为我使用 220 MB 文件可能是问题所在。我正在更改我的算法,我需要使用变体而不是访问表,如果我发现任何问题,我将尝试对其进行编码,我会将其发布在 stackoverflow 上并感谢您的支持!
  • 嗨 Niko,您可以尝试在 ozgrid.com/forum 上发帖,然后给我发个下午。这样你就可以发布你的工作簿,我可以看看。
  • 抱歉在手机上阅读您的帖子,没有看到 220mb 的文件大小。这是非常非常大的。我会说异常大,它包含什么?你应该看看:ozgrid.com/Excel/ExcelProblems.htm
  • Reafidy 问题已解决我使用了变体,它工作得非常快,但仍然感谢您的代码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多