返回列表 上一主題 發帖

[發問] 請問如何把無資料的多餘頁面設定一按鈕刪除

[發問] 請問如何把無資料的多餘頁面設定一按鈕刪除

各位前輩好~

如附加檔案,預設有61頁(因上傳不了,減成10頁),但因用途,有時用不了那麼多,
有沒有VBA能寫成:若沒用到的頁面無資料(沒用到的頁面),按鈕就自動刪除的方法?

因為一個workbook常有好幾個 sheets,一個sheet約1.5MB, 四個sheet 就6MB, 檔案實在太大了…

反過來說,如果我預設20頁,不夠用時,能否也新增一vba按鈕, 一按就能在sheet最下面直接新增一新頁,
且右方"灰色區域"的總計連結也能統計到?


請大家幫忙一下了~~真心感謝

WB.ver06.xlsm.zip (268.31 KB)

下午突然想到以下寫法:
===========
Sub 刪除空白頁面()

For i = 3128 To 112 Step -52

    If Range("AH" & i) = "" Then
    Range("AH" & i).Offset(-7, 0).Rows("1:52").EntireRow.Select
    Selection.Delete Shift:=xlUp

    End If

Next

End Sub
====================
但執行後,總頁數會亂掉,如圖:

總頁數61頁,但實際只有二頁


連接頁數的灰色區域

應該是cell AT74要改公式,但想不出來可以用什麼函數。
只好再請大俠們幫幫忙~~

TOP

抱歉大家,被我矇到,用最笨的方法試出了!
再加問,如果執行後有兩頁,想另存成pdf,如何擷取工作表名稱為pdf 的名稱?
這次我真的不會了....

TOP

回復 3# simplehope

熬到半夜三點,總算試出來了,新增頁面後,還是會有頁數亂掉的問題。
慢慢研究,也謝謝有進來看的大家。

TOP

本帖最後由 GBKEE 於 2016-10-8 15:17 編輯

回復 4# simplehope
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Sh As Worksheet, xCol As Integer, Rng As Range, i As Integer
  4.     For Each Sh In ActiveWorkbook.Sheets
  5.          If Sh.PageSetup.PrintArea <> "" Then
  6.             Set Rng = Nothing
  7.             With Sh
  8.                 xCol = .VPageBreaks(1).Location.Column
  9.                 For i = 1 To .HPageBreaks.Count
  10.                     If .HPageBreaks(i).Location.Range("F16") = "" Then Set Rng = .HPageBreaks(i).Location: Exit For
  11.                 Next
  12.                 If Not Rng Is Nothing Then
  13.                     .PageSetup.PrintArea = .Range("a1", .Cells(Rng.Offset(-1).Row, xCol)).Address
  14.                     .Range("a1", .Cells(Rng.Offset(-1).Row, xCol)).Select
  15.                     .Range(Rng, .Range("A" & .Cells.SpecialCells(xlCellTypeLastCell).Row)).Resize(, xCol).Delete xlUp
  16.                     'AJ欄原本公式=IF(AT14="","",$AT$74) , 改公式 =總頁數
  17.                 End If
  18.             End With
  19.             Sh.Names.Add Name:="總頁數", RefersToR1C1:=Sh.HPageBreaks.Count + 1
  20.         End If
  21.     Next
  22. End Sub
複製代碼
PS:2016/10/08 修正
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

謝謝G大,這夠小弟研究好一陣子了:)
很高級的寫法…小弟的土炮實在慚愧無法相比


跟with ‧‧‧end with
跟for each...in
跟if not 條件式 真的是很不熟啊…

TOP

回復 5# GBKEE

G大不好意思,執行到一半會出現錯誤:"陣列索引超出範圍"如下圖:
   

猜問題出在 xCol = .VPageBreaks(1).Location.Column  但不會改....

對以下這句也不懂:
Range(Rng, .Range("A" & .Cells.SpecialCells(xlCellTypeLastCell).Row)).Resize(, xCol).Delete xlUp
'AJ欄原本公式=IF(AT14="","",$AT$74) , 改公式 =總頁數

還有這句是
Sh.Names.Add Name:="總頁數", RefersToR1C1:=Sh.HPageBreaks.Count + 1
意思是新增一個名稱範圍叫 "總頁數",取R1C1格式,看有幾個HPageBreak 再+ 1 嗎?
那AJ欄要怎麼連到"總頁數"呢?
腦袋有點轉不過來

TOP

本帖最後由 GBKEE 於 2016-10-8 15:31 編輯

回復 7# simplehope

5# 的程式碼已修正,請再試試

'** 取A1到 第一個垂直分頁線的最右邊的欄位)再向下到工作頁的 最後一個儲存格的列號******
Range(Rng, .Range("A" & .Cells.SpecialCells(xlCellTypeLastCell).Row)).Resize(, xCol).Delete xlUp
'AJ欄原本公式=IF(AT14="","",$AT$74) , 改公式 =總頁數
'SpecialCells : expression.SpecialCells(Type, Value)
'SpecialCells 方法    傳回 Range 物件,此物件代表與指定型態及值相符合的所有儲存格。Range 物件
'Type     必選的 XlCellType。要包含的儲存格。
'xlCellTypeLastCell。已用範圍的最後一個儲存格=>工作頁的 最後一個儲存格

還有這句是
Sh.Names.Add Name:="總頁數", RefersToR1C1:=Sh.HPageBreaks.Count + 1
**新增一個名稱範圍叫 "總頁數",取R1C1格式,看有幾個HPageBreak 再+ 1 **
那AJ欄要怎麼連到"總頁數"呢?
**** 不是有請你 在AJ欄原本公式=IF(AT14="","",$AT$74) , 改公式 =總頁數****
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

匯出資料到新工作表,如何解決有空白列,資料不連貫問題

本帖最後由 simplehope 於 2016-10-8 18:52 編輯

之前寫了個VBA,做匯出到新工作表可以成連貫資料,
原本A欄(No.的欄位)無公式,但因為要自動流水號需求,把A欄(No.的欄位)套公式做流水號之後,
如下圖示


再匯出後就有資料不連貫問題
如下圖示


小弟駑鈍實在試不出方法解決,只好又來請大大幫幫忙了~~謝謝
WB2.zip (790.07 KB)

TOP

回復 8# GBKEE


感謝G大,受教了~~可以用了!

TOP

        靜思自在 : 口說一句好話,如口出蓮花;口說一句壞話如口吐毒蛇。
返回列表 上一主題