【问题标题】:Macro works first time, then fails on second run when converting formulas to values宏第一次工作,然后在将公式转换为值时第二次运行失败
【发布时间】:2015-02-25 04:06:22
【问题描述】:

我最近在使用这个宏时遇到了一个非常令人沮丧的问题。我将运行宏,它会完全按预期工作,但是当我重置它(设置按钮删除和清除工作表)并尝试使用完全相同的数据再次运行它时,我得到一个运行时错误“1004”:应用程序定义或对象定义错误。它突出了我的价值观之一,尽管搜索了几个小时,但我仍然找不到任何东西。我的床单没有受到保护,被这样的成功取笑真是令人沮丧。任何意见将不胜感激!

另外值得注意的是,这是一个相当大的范围,我必须应用自动过滤器并隐藏一堆列以防止它达到 65k 公式的限制。谢谢!

Sub AddMDS()
'Uses SUMIF to find MDS and pair

    Dim LastRow As Long
    Dim LastRow2 As Long
    Rows("1:1").Select
    Range("I1").Activate
    Selection.AutoFilter
    LastRow = Cells(Rows.Count, "A").End(xlUp).row
    ActiveSheet.Range("A1:DV" & LastRow).AutoFilter Field:=19, Criteria1:= _
        "Quantity"

    LastRow2 = Cells(Rows.Count, "A").End(xlUp).row
    Range("V4:DQ" & LastRow2).SpecialCells(xlCellTypeVisible).FormulaR1C1 = "=SUMIFS(MDS!C17,MDS!C5,RC5,MDS!C14,R1C)"
    Range("V4:DQ" & LastRow2).SpecialCells(xlCellTypeVisible).NumberFormat = "#,##0"

End Sub
Sub ConvVals()
'Converts sumifs to values to enhance speed
    Dim LastRow As Long
    Dim LastRow2 As Long
    Dim lastrow3 As Long
    LastRow = Cells(Rows.Count, "A").End(xlUp).row
    ActiveSheet.Range("A1:DV" & LastRow).AutoFilter Field:=19
    LastRow2 = Cells(Rows.Count, "A").End(xlUp).row
    Range("V4:CC" & LastRow2).value = Range("V4:CC" & LastRow2).value
    lastrow3 = Cells(Rows.Count, "A").End(xlUp).row
    Range("CD4:DT" & lastrow3).value = Range("CD4:DT" & lastrow3).value
    Cells.EntireColumn.Hidden = False

End Sub

忘了提到 value to value 与第一个 LastRow 完美配合,它在第二个上失败。我的第一个想法是它达到了唯一字符的范围限制,这就是我打破范围的原因,但即便如此它仍然没有意义。

【问题讨论】:

  • 您似乎在 lastrow3 值分配中使用不同的列-左侧的 CD:DZ 和右侧的 CD:DQ
  • 在我发布此内容后立即注意到,修复了它,仍然有同样的问题。不过还是谢谢。
  • 代码出错时Lastrow2的值是多少?
  • 我没有对此进行过多研究,但它可能是Selection.AutoFilter - 此命令切换自动过滤器,因此,一旦开启,下一次你运行它,它会关闭,这可能会导致你稍后的自动过滤命令崩溃......
  • 只是用手表运行它,它正在读取它作为行的正确长度。我说错了,它正在中断它的 lastrow3。

标签: vba excel


【解决方案1】:

所以我看到了这个并意识到我从未展示过我的解决方案,我向大家道歉。我最终自己做了一个解决方法,我只是将整个工作表按值复制并粘贴到一个新工作表中。我仍然不知道为什么这个不起作用,但粘贴到另一张纸上肯定会起作用。希望对某处有所帮助!

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2011-09-02
    • 2022-06-17
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多