2016-07-19 17 views
1

我試圖添加一個自動宏到我的非常大的工作簿,至少通過重置使用的範圍修剪一些脂肪。 我試過很多代碼,無法讓它工作,並找不出原因。 (它似乎工作過一段時間,當我將每列手動刪除的右側和底部,然後運行宏) 我嘗試了短無法重置使用範圍

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個單元。

任何人都知道這樣做的簡單surefire方式?建議非常感謝,一如既往,這個WB坐在70mb左右!

更新因爲我已經試過無數的腳本來重置使用範圍沒有成功,除非我手動刪除行和列,我已經決定,而不是微調的使用範圍到最後一個活動行,我會簡單地刪除全部數據當用戶保存時(這已將文件大小從約70mb減少到20mb!)。

非常感謝

+0

唯一正確的方式我發現是手動刪除下面和數據......痛苦的權利,但神火所有的行/列。 –

+0

在開始時嘗試了'Application.ScreenUpdating = False',並在結尾處嘗試了'Application.ScreenUpdating = True',但它仍然變爲數據選項卡,我對screenupdating的功能感到困惑嗎? – Awill

回答

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` 
0
Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
For Each Sh In ThisWorkbook.Worksheets 
x = Sh.UsedRange.Rows.Count 
Next Sh 
End Sub 

我發現這個地方在線(對不起,不記得),和它的工作對我來說

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 
+0

結果相同。如果我通過在單元格中向下幾行輸入數據,然後跳到最後一行,輸入數據並將其刪除以激活範圍,我在新表格中測試它們,則代碼將起作用。 我測試運行宏,我的使用範圍返回到它應該在的行x。 它似乎沒有在這張表上工作,有時甚至沒有手動行刪除,我想知道它是否有什麼與它是一個數據表? 有一些額外的細節,但沒有上傳它,我有一個數百行K數據表,然後刪除不需要的行,並將所有數據都移出。 – Awill

+0

今天早上再次嘗試刪除我的表中的所有數據並運行此操作。它沒有重置使用的範圍,但是它確實刪除了我的表中的所有行,但是當我剛剛運行我的腳本時,它實際上被重置。 現在我想找出一種方法來刪除所有未使用的行和列,不需要10-15秒,然後使用'UsedRange'繼續使用 – Awill

+0

@Awill如果第一個完全空行或列定義UsedRange邊界。這樣我們不必從底部向上檢查每一行。 –