返回列表 上一主題 發帖

一份新的VBA遇到的問題

一份新的VBA遇到的問題

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

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

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

回復 12# GBKEE

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

TOP

回復 11# play9091
多多利用錄製巨集,會進步的.

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

回復 9# play9091
又出錯  公式沒問題啊, 執行階段錯誤 9:  對嗎?
檢查WorkBook 是已開啟的嗎?  工 作表名稱存在嗎?

TOP

回復 8# GBKEE

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

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

TOP




回復 7# play9091
第一個問題好像沒有完全決解  當 篩選到的資料 不是連續範圍, 時就不行哦!
  1. Rng.Copy Sheets("Sheet2").[A2] '你要的位置
  2.            Sheets("Sheet2").[A2:D2].Delete xlUp '刪除那一列的範圍
  3. 或是    Sheet2.[A2].EntireRow.Delete '整列刪除
複製代碼
      
錯誤在那裡找找看
Workbooks("X').Sheets("Y").Range("B11:D12").Copy Workbooks("Z").Sheets("G").Range("A1")

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

回復 5# play9091
是這樣嗎?
  1. Sub ttt()
  2.     Sheets("Sheet1").Range("E3") = ""
  3.     Sheets("Sheet1").Range("E4").Value = "=AND(TEXT(RIGHT(A11, 8), ""hh:mm:ss"") >= ""02:00:00"",TEXT(RIGHT(A11, 8), ""hh:mm:ss"") <= ""21:30:00"")"
  4.     Set Rng = Range("A10").CurrentRegion
  5.     Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("E3:E4"), Unique:=False
  6.     Set Rng = Rng.SpecialCells(xlCellTypeVisible)   '資料區可見的儲存格
  7.     If Rng.Count > Rng.Columns.Count Then           '有篩選到資料
  8.     'Rng.Count: 篩選到資料總數 > Rng.Columns.Count: 資料區可見儲存格的的欄位數
  9.         Rng.Copy Sheets("SheetX").[A1]              '你要的位置
  10.     End If
  11. End Sub
複製代碼

TOP

回復 4# GBKEE

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

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

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

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

TOP

        靜思自在 : 難行能行,難捨能捨,難為能為,才能昇華自我的人格。
返回列表 上一主題