返回列表 上一主題 發帖

一份新的VBA遇到的問題

一份新的VBA遇到的問題

我在做一份新的VBA……遇到一個問題,想請教一下版上的先進……

一、
本來是想用進階篩選的,但是發現進階篩選沒有辦法對顏色做篩選。
例如:我要篩選出紅色的儲存格
不知道用VBA是不是有其它的方法可以解決……

二、
另外,如果不用進階篩選的話,可不可能選出唯一值(不要重複的值)
初學VBA乍到twbts

回復 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

回復 4# GBKEE

感謝版主的連結,剛剛看了之後去實做了一下,很好用……少了很多「select」的動作……

一、剛剛又遇到了另外一個問題,就是如果用上面這種方法,沒有辦法取出篩選後的結果。
意思是,如果我選定範圍,然後對這個範圍作篩選後,沒有辦法用上面的方法取出篩選後的結果……

二、如果只取出值的話好像不可以實現,如下:
sheets(1).range("A1:A4")=sheets(2).range("A1")      ←Fail

下面這個才是我現在的大問題!!!
三、選定一個範圍後,對這個範圍作篩選,如果這一次的篩選沒有東西(結果)的話,這時候「Selection.Copy」整個選定的資料全部複制……
         有什麼方法可以讓它不複制沒有篩選出來的資料呢??
初學VBA乍到twbts

TOP

回復 6# GBKEE

感謝版主,熱心的指教。
因為使用「CurrentRegion」的話,會把第一列也選進去,所以後來我用了其它的方法來解決了我的問題。如下……
  1.     NowR = Range("A65535").End(xlUp).Row '取得可見列的列號
  2.     If NowR <> 2 Then '第二列為抬頭,若等於二就不做下面的事
  3.     Selection.Copy
  4.     Sheets("頻點").Select
  5.     Range("A1").Select
  6.     Call 貼上值
  7.     Selection.Font.Color = RGB(255, 0, 0)
  8.     Call 移除重複
  9.     Sheets("Cluster " & i).Select
  10.     End If
複製代碼
然後……現在我遇到了另外一個問題,上面也問過了,版主也有回答過了,但小弟功力尚淺,沒有辦法理解為什麼這樣子寫……
而我用我自已的方法也弄不出來,所以想請教一下……下面這樣子的寫法哪裡有錯了,又:應該怎麼樣子去修正呢??
  1. Workbooks("X').Sheets("Y").Range("B11:D12").Copy Workbooks("Z").Sheets("G").Range("A1")
複製代碼
初學VBA乍到twbts

TOP

回復 8# GBKEE

第一個問題我已經用我的方法解決了!

然後……出錯的地方,那是我打錯啦!!
Workbooks("book1").Sheets("sheet1").Range("B11:D12").Copy Workbooks("book2").Sheets("sheet2").Range("A1")
即使是這樣子還是錯!沒有辦法執行!!!!
初學VBA乍到twbts

TOP

本帖最後由 play9091 於 2011-7-26 13:32 編輯

回復 10# GBKEE

感謝版主耐心的回答,我試成功了……之前是檔名抓錯……

還有另外一個用這種方法有沒有辦法只COPY值,因為我的來源是用公式來的!我想要只貼上結果的話有可能嗎?!

我找到方法了……
  1.     Workbooks(KPI).Sheets("Sheet2").Range(W).Copy
  2.     Workbooks(con).Sheets("暫存頁").Range("A1").PasteSpecial Paste:=xlPasteValues
複製代碼
原來,它可以是二段分開來寫的語法……看來我還得多學習一下……
初學VBA乍到twbts

TOP

回復 12# GBKEE

我強迫我自已,非到不得以不用錄制的,錄制的會錄一大堆用不到的東西。
大部分忘記的語法,就上網查,不記得的東西就查書!!!
初學VBA乍到twbts

TOP

        靜思自在 : 滴水成河。粒米成蘿,勿輕己靈,勿以善小而不為。
返回列表 上一主題