Board logo

標題: 手動製作巨集程式碼過於繁雜問題(如何精簡程式碼) [打印本頁]

作者: chaoyiho    時間: 2016-5-3 14:25     標題: 手動製作巨集程式碼過於繁雜問題(如何精簡程式碼)

如題

請問各位前輩,小弟在前幾篇看見有人問隱藏的問題
於是檢視了我自己的語法
因為是用錄巨集的方式自學的,所以程式碼總是可以發現許許多多的重複
像是
  1. Sheets("Pmax").Select
  2.     Columns("C:AI").Select
  3.     Selection.EntireColumn.Hidden = True
  4.     Columns("AK:BC").Select
  5.     Selection.EntireColumn.Hidden = True
  6.     Columns("BE:BQ").Select
  7.     Selection.EntireColumn.Hidden = True
  8.     Columns("BS:CE").Select
  9.     Selection.EntireColumn.Hidden = True
  10.     Columns("CG:DI").Select
  11.     Selection.EntireColumn.Hidden = True
  12.     Columns("DV:IB").Select
  13.     Selection.EntireColumn.Hidden = True
  14.     Columns("ID:IG").Select
  15.     Selection.EntireColumn.Hidden = True
複製代碼
這樣的東西
或是
  1. ActiveWindow.ScrollRow = 6
  2.     Sheets("Liner").Select
  3.     Sheets("Liner").Copy Before:=Sheets(1)
  4.     Sheets("Liner (2)").Select
  5.     Sheets("Liner (2)").Name = "總表"
  6.     Columns("B:GJ").Select
  7.     Selection.EntireColumn.Hidden = False
  8.     ActiveWindow.ScrollColumn = 4
  9.     ActiveWindow.ScrollColumn = 3
  10.     Sheets("總表").Select
  11.     Sheets("總表").Copy Before:=Sheets(2)
  12.     Sheets("總表").Select
  13.     Sheets("總表").Copy Before:=Sheets(1)
  14.     Sheets("總表").Select
  15.     Sheets("總表").Move Before:=Sheets(1)
  16.     Sheets("總表").Select
  17.     Sheets("總表").Copy Before:=Sheets(2)
  18.     Sheets("總表 (4)").Select
  19.     Sheets("總表 (4)").Name = "Sav"
  20.     Columns("C:AX").Select
  21.     Selection.EntireColumn.Hidden = True
  22.     Columns("BA:BM").Select
  23.     Selection.EntireColumn.Hidden = True
  24.     Columns("BO:CA").Select

  25. ....
複製代碼
這樣子不斷重複重複再重複的語法,在論壇爬文爬了一陣子
發現也許是太簡單 所以沒什麼人再討論這個問題
所以想說要來請益一下各位高手前輩
我該怎麼做精簡呢?
不然龐大的程式碼真的會讓程式跑的越來越慢..
作者: 准提部林    時間: 2016-5-3 21:03

錄製時,〔選取〕這個動作也會產生程式碼,亦即〔有2個動作〕
1.Columns("C:E").Select
2.Selection.EntireColumn.Hidden = True

可以併為一行 Columns("C:E").EntireColumn.Hidden = True
省略 Select 及 Selection,

另也可用:Range("C:E").EntireColumn.Hidden = True

若為〔不連續〕多欄位,則可:
Range("C:E,G:H,K:M").EntireColumn.Hidden = True
==================================

以下若不須跳轉工作表為〔當前〕作用,則 Select 那行也可刪除:
Sheets("Liner").Select 可刪
Sheets("Liner").Copy Before:=Sheets(1)

Sheets("Liner (2)").Select 可刪

Sheets("Liner (2)").Name = "總表"

==================================
錄製的程式碼,最好自己試著去改,從錯誤中去修正,這也是學習方法之一,
當然去多看別人寫的更可以對照再去修改,
不要一股腦的原碼就拿出來問,因為這是基礎問題,大概沒人會回答的,
VBE內建說明檔有時間多看看,有了基本認識,再來問較進階的問題!
 
作者: ML089    時間: 2016-5-3 21:44

回復 1# chaoyiho

看這篇說明
http://forum.twbts.com/thread-23-1-1.html
作者: chaoyiho    時間: 2016-5-4 08:34

回復 2# 准提部林

謝謝兩位版主的用心,真的受教了!

我會持續學習的 有問題也還請各位前輩幫忙!

非常感謝




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