无法重置已使用的范围

时间:2016-07-19 15:31:35

标签: excel vba excel-vba macros

我试图在我的大型工作簿中添加一个自动宏,至少通过重置使用的范围来减少一些脂肪。 我尝试了很多代码,无法使其工作,也无法弄清楚原因。 (当我手动删除右边和底部的每一列,然后运行宏时,似乎工作了一些时间) 我尝试过短ActiveSheet.UsedRange

Dim sht As Workshet Dim lng As Long For Each sht In ActiveWorkbook.Worksheets lng = sht.UsedRange.Rows.Count Next

Dim x As Long Dim y As Long x = ActiveSheet.UsedRange.Rows.Count y = ActiveSheet.UsedRange.Columns.Count

以及其他一些建议,但每次都会在我的数据表下面给我一些30k的单元格。

任何人都知道简单的万无一失的做法吗?建议一如既往地非常感谢,这个WB坐在70mb左右!

更新因为除非我手动删除行和列,否则我已经尝试了很多脚本来重置已使用的范围而没有成功,我决定不使用范围修改到最后一个活动行,我只是简单当用户保存时删除整个数据表(这会将文件大小从大约70mb减少到20mb!)。

非常感谢

3 个答案:

答案 0 :(得分:1)

这对我有用,但运行大约需要20秒:

Sub resetter()
    Dim N As Long, i As Long

    With Application.WorksheetFunction

        N = Rows.Count
        For i = N To 1 Step -1
            If .CountA(Cells(i, 1).EntireRow) <> 0 Then Exit For
        Next i
        Range(Cells(N, 1), Cells(i + 1, 1)).EntireRow.Delete

        N = Columns.Count
        For i = N To 1 Step -1
            If .CountA(Cells(1, i).EntireColumn) <> 0 Then Exit For
        Next i
        Range(Cells(1, N), Cells(1, i + 1)).EntireColumn.Delete

    End With
End Sub

答案 1 :(得分:0)

KeyError: "['5Thu' '7Sat'] not in index"

我在网上找到了这个地方(抱歉不记得),这对我有用

答案 2 :(得分:0)

看到我的问题的更新解释,决定这是最好的解决方案。 `

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim lng As Long, sht As Worksheet

    Application.ScreenUpdating = False
    On Error Resume Next
         Application.DisplayAlerts = False
       Sheets("data").Range("denialstable1").Delete
       Application.DisplayAlerts = True

        For Each sht In ActiveWorkbook.Worksheets
            lng = sht.UsedRange.Rows.Count
      Next
      Application.ScreenUpdating = True
    End Sub`