返回列表 上一主題 發帖

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

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

各位前輩好~

如附加檔案,預設有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

謝謝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

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

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

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


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


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

TOP

回復 8# GBKEE


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

TOP

[版主管理留言]
  • GBKEE(2016/10/9 19:54): Dim Sh(1 To 2), Rng(1 To 2) As Range, xCol As Integer, R As Integer, i As Integer

回復 11# GBKEE

首先感謝G大花那麼多時間,還這麼快回應,超感動的!
執行後會有"變數未定義"錯誤,程式顯示在 For i = 0 To .HPageBreaks.Count ,當中的i 反白

小弟用自已原本的VBA碼,土炮解決問題如下:
因能力不足從輸出頁(來源頁)改複製範圍,就換從輸入頁(匯出頁) 下手
原本判斷[A16]向下到最後一列再offset一列, 改由從[F16]開始判斷,向下到最後一列再offset到A欄,
因F欄在輸出頁若空白,原本就無公式(無資料),所以到了匯出頁也是無資料,用以上方法便可以有複製資料連續性

很佩服非使用者的G大,能寫出符合實際用途又如此簡約有效率的程式碼!
小弟功力尚淺寫出的程式很粗糙,對G大程式碼暫時只能望而興嘆,慢慢研究啊
  1. Sub 匯出地磅資料到新工作表()
  2.    
  3.     shn = ActiveSheet.Name
  4.         
  5.     '防呆1
  6.     For e = 2 To Sheets.Count
  7.         If shn & "匯出" = Sheets(e).Name Then
  8.             Application.DisplayAlerts = False
  9.             Sheets(shn & "匯出").Delete
  10.             Application.DisplayAlerts = True
  11.         Exit For
  12.     End If
  13.     Next

  14.    
  15.     Application.ScreenUpdating = False
  16.    


  17.     Worksheets.Add after:=Worksheets(Sheets.Count)
  18.     Worksheets(Sheets.Count).Name = shn & "匯出"

  19.     '抓取欄位 新增
  20.     Worksheets(shn).Select
  21.     Range("A1:AM15").Select
  22.     Range("A1:AM15").Copy
  23.     Worksheets(Sheets.Count).Select
  24.     Range("A1").Select
  25.     Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
  26.     SkipBlanks:=False, Transpose:=False
  27.     ActiveSheet.Paste

  28.     '抓取每頁資料內容(使用迴圈)
  29.     Worksheets(shn).Select
  30.     Dim i As Integer, j As Integer
  31.     j = Range("AT51").Value
  32.    
  33.     For i = 16 To 16 + j * 52 Step 52 '應要J-1, 但若只有一頁會有錯,多匯出一頁沒差
  34.         Worksheets(shn).Select
  35.         Range("a" & i & ":am" & i).Select
  36.         Range(Selection, Selection.End(xlToRight)).Select
  37.         Range(Selection, Selection.End(xlDown)).Select
  38.         Selection.Copy
  39.         Worksheets(Sheets.Count).Select

  40.     If Worksheets(Sheets.Count).Range("F16") = "" Then
  41.         Range("A16").Select
  42.         ActiveSheet.Paste '先貼一次含公式
  43.         Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, _
  44.         SkipBlanks:=False, Transpose:=False '再貼一次把公式拿掉
  45.         Range("F16").End(xlDown).Offset(1, -5).Clear '刪除A欄資料,以利貼上資料連續
  46.     Else
  47.         Worksheets(Sheets.Count).Range("F16").End(xlDown).Offset(1, -5).Select
  48.         ActiveSheet.Paste '先貼一次含公式
  49.         Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
  50.         xlNone, SkipBlanks:=False, Transpose:=False '再貼一次把日期變為文字
  51.       
  52.     End If
  53. Next

  54. end sub
複製代碼

TOP

回復 12# 准提部林

感謝准大發功救世!
准大的概念是對輸出頁做修改,很驚訝程式碼竟能這樣寫!太厲害!就算我想破頭也想不出來…
程式碼完全沒問題,惟一的問題是小弟看不太懂以下:

.SpecialCells(xlCellTypeConstants, 22).EntireRow.Delete '刪除〔文字〕格整列
括號內為何要加 ,22這參數? F1查詢沒看到有說明22


程式碼最後加的On Error GoTo 0,用意為何?
F1查詢: 停止現在程序�堨籉韝w啟動的錯誤處理程式。
會建議任何程式碼, 都在結尾加上"On Error GoTo 0" 嗎?

TOP

        靜思自在 : 道德是提昇自我的明燈,不該是呵斥別人的鞭子。
返回列表 上一主題