返回列表 上一主題 發帖

一份新的VBA遇到的問題

回復 3# play9091
這種寫法可不可以跨sheet或是跨BOOK??                爬一下文 就有啦!    請看

TOP

回復 2# GBKEE

感謝版主的回答,新的這一份VBA遇到的問題真的是太多了,不知道我直接在這個討論串裡面問合適不合適,如果版大覺得不合適,我再開分帖……

目前因為寫了很多的「select」,感覺,一直選來選去的,有沒有其它的方法可以減少這種情況,程式的效率應該也會相對提高,然後我就在網路上找到了這篇文章……
一、數數看你的程式裡有多少 "Select" ?
除非程式就是要依使用者選取的物件來做動作,否則 Select 和 Selection 都是多餘的.
◎ 標準的物件控制語法:
  物件.方法 (例如 Range("A1").Copy)
  物件.屬性 = 值 (例如 Range("A1").ColorIndex = 15)
而不是一定要先 Select 物件然後再對 Selection 做動作.

舉例而言,你要複製 Sheet1.A1 的值到 Sheet2.B1 --
 Range("A1").Copy
 Sheets(2).Select
 Range("B1").Select
 Range("B1").PasteSpecial xlPasteValues
其實可以這麼寫 --
 Sheets(2).Range("B1") = Sheets(1).Range("A1")
如果內容與格式都要複製,可以這麼寫 --
 Sheets(1).Range("A1").Copy Sheets(2).Range("B1")

不要看這沒什麼,你的VBA觀念和程度能否更進一步,這是很重要的一點。


他這邊舉的例子,只有單格而已
一、是否有多格的寫法……
二、這種寫法可不可以跨sheet或是跨BOOK??
初學VBA乍到twbts

TOP

本帖最後由 GBKEE 於 2011-7-22 20:15 編輯

回復 1# play9091
  1. Sub Ex()
  2.     Dim D As Object, E As Variant
  3.     Set D = CreateObject("Scripting.Dictionary")    'Dictionary用於儲存資料關鍵字和項目對。,通常是整數或字串,可以是除陣列外的任何型態。
  4.     For Each E In Sheet1.Range("A2").CurrentRegion.Rows   'Sheet1.A2連續範圍列的集合
  5.         If E.Cells(1).Interior.ColorIndex = 3 Then        'ColorIndex = 3  紅色
  6.             If Not D.EXISTS(E.Cells(1).Value) Then Set D(E.Cells(1).Value) = E
  7.             'Not D.EXISTS(E.Cells(1).Value) 找不重複的值
  8.             'Set D(E.Cells(1).Value) = E : Dictionary.ITEMS->設定為E的整列(Range 物件)
  9.         End If
  10.     Next
  11.     For Each E In D.ITEMS
  12.         Sheet2.Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, E.Columns.Count) = E.Value
  13.         'E.Columns.Count =>傳回E的整列的欄數
  14.        ' E.Copy Sheet2.Range("A" & Rows.Count).End(xlUp).Offset(1)  'copy的方法
  15.     Next
  16. End Sub
複製代碼

TOP

        靜思自在 : 人的眼睛長在前面,只看到別人的缺點,絲毫看不到自己的缺點。
返回列表 上一主題