Board logo

標題: [分享] 善用錄製巨集可以找到很多問題的答案,以自動分頁為例. [打印本頁]

作者: linshin1999    時間: 2010-12-26 19:28     標題: 善用錄製巨集可以找到很多問題的答案,以自動分頁為例.

如果我的檔案有1100個列,我要每50個列分一個頁.
原本設定每列的高度為18.75
經Excel自動分頁以後會每51列自動分頁,那麼變成會在(51,102,153.......)處自動分頁,如果我想在(50,100,150,....)處自動分頁,那麼就要寫一個巨集來處理,於是利用錄製巨集方式再修改一下就可以了.
1)將遊標移至分頁線,(第51列)
2)選取功能區索引標籤的開發人員
3)選取巨集錄製功能
4)選取功能區索引標籤的版面配製
5)將遊標移至第50列
6)選取功能區索引標籤的分頁符號再選取插入分頁
7)選取功能區索引標籤的開發人員,再選停止錄製

如此我們就可以得到如下的VBA巨集
Sub 巨集1()
    Rows("51:51").Select                                                                            '選取第51列
    Application.CutCopyMode = False                                                         '取消 [剪下] 或 [複製] 模式並移除移動框線。
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell   '在第51列的上方(第50列)加入新的分頁符號。
End Sub

可以在如上的巨集再修改一下就可以成為通用的巨集,可以用 Do Loop 指令來修正分頁線,那麼就可以做到依我們的意思來作分頁的動作.
可是在此之前對於:
pplication.CutCopyMode = False                                                        
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
這兩行VBA指令一點都不懂,經過錄製巨集再用心一下我們就可以知道我們要的動作如何成為VBA巨集.
要學習VBA巨集的板友們可以大膽的試一試.
作者: Hsieh    時間: 2010-12-26 20:40

本帖最後由 Hsieh 於 2010-12-26 20:43 編輯

很好,您能把握到錄製巨集的技巧

可嘗試看看,在分頁預覽模式下
將第一條分頁線拖移至A50
看看所有分頁線是否都在50的倍數列上
作者: linshin1999    時間: 2010-12-26 21:57

版主大大好像不行,還是要使用VBA
作者: oobird    時間: 2010-12-26 22:22

回復 3# linshin1999


    在分頁預覽模式下拖動分頁線,只要拖動第一條,其他會跟著變動的。[attach]4214[/attach]
作者: linshin1999    時間: 2010-12-26 23:01

難道這是版本的問題嗎?
我的版本無法這樣做,只會平行移動,不會做固定切割.
凸槌前輩,我的版本真的無法做到,還是方法有誤.(我有拖動第一條線),得到的結果如上述.
作者: Hsieh    時間: 2010-12-26 23:31

回復 5# linshin1999

我作業系統也是WIN7
OFFICE也是2010
假如你已經有預覽過,系統自動產生分頁線後
你用VBA再50的倍數列加入分頁線那麼會多出許多分頁才對
以下是錄製出來的巨集
你執行看看是甚麼情形
  1. Sub 巨集1()
  2. '
  3. ' 巨集1 巨集
  4. '

  5. '
  6. ActiveWindow.View = xlPageBreakPreview
  7.     Set ActiveSheet.HPageBreaks(1).Location = Range("A51")

  8. End Sub
複製代碼

作者: linshin1999    時間: 2010-12-26 23:42

Hsieh版主大大,不知道是否是我的設定有問題,分頁線仍是(50,101,152,203....),不會更動呢!
作者: linshin1999    時間: 2010-12-27 00:01

Hsieh版主大大,如果是設定的問可否教我,在我的工作中自動分頁很重要,不然我就要寫一個自動分頁的函數了,謝謝!!
作者: Hsieh    時間: 2010-12-27 12:15

回復 8# linshin1999
請你把你的檔案上傳
才知道到你的設定為何?
我在猜是否是標題列問題
作者: linshin1999    時間: 2010-12-27 13:36

傷腦筋到現在還不會上傳資料.(我會就近請教人,我以前都是用Dos),不過我没設定標題列.
作者: linshin1999    時間: 2010-12-27 13:45

我的分頁預覽的進入點應該對的吧,(檢視---->分頁預覽)
凸槌板主上傳的範例檔好像也没有標題列設定.
作者: Hsieh    時間: 2010-12-27 16:37

本帖最後由 Hsieh 於 2010-12-27 16:42 編輯

回復 10# linshin1999

那可能是上下邊界問題
在預覽列印中,顯示邊界,調整上下邊界讓列印區域容納50列
[attach]4223[/attach]
作者: linshin1999    時間: 2010-12-27 20:14

版主大大,我有做過模摩,應該是我的VBA有問題,因為我模摩的檔案没問題,我會把問題找出來,可能是我的清單没完全活化,謝謝!!
作者: GBKEE    時間: 2010-12-28 09:40

回復 13# linshin1999
在分頁預覽模式下 :
移動任何自動分頁線(虛線) 就變成手動(實線)
第一條自動分頁線(虛線) 如往上拖移小於 第一條自動分頁線(虛線)  是無法 將所有分頁線固定在移動的倍數列上
第一條自動分頁線(虛線) 如往下拖移大於 第一條自動分頁線(虛線)  可將所有分頁線固定在移動的倍數列上
給你一程序試試看
  1. Sub Ex()
  2. Dim Rng As Range, R%, C%, i%, A%
  3. With ActiveSheet '作用中的工作表
  4. Set Rng = .Range("A1:J182") '所要印列的一連續的範圍
  5. R = 50 '印列每頁固定之列數
  6. C = Rng.Columns.Count '一連續的範圍的欄數
  7. With .PageSetup '印列的設定
  8. .Zoom = False '停止縮放
  9. .FitToPagesTall = 1 '設定為1頁高
  10. .FitToPagesWide = 1 '設定為1頁寬
  11. .CenterHorizontally = True '頁面上的工作表是水平置中
  12. .CenterVertically = True '頁面上的工作表是垂直置中
  13. End With
  14. For i = 1 To Rng.Rows.Count '所要印列的一連續的範圍的總列數
  15. A = IIf(Rng.Rows.Count > i + R, R, Rng.Rows.Count - i + 1)
  16. .PageSetup.PrintArea = Rng(i, 1).Resize(A, C).Address '設定要列印範圍的位置字串
  17. i = i + R - 1
  18. .PrintPreview '印列預覽
  19. '.PrintOut '印列
  20. Next
  21. End With
  22. End Sub
複製代碼

作者: linshin1999    時間: 2010-12-29 15:29

謝謝GBKEE版主,我會去試試看,有問題再請教.
作者: linshin1999    時間: 2010-12-29 22:13

GBKEE 這就是一個自動分頁的函數吧,就是我要的,謝謝你的答案.




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)