Board logo

標題: [發問] 用find 指令 找出符合顏色的儲存格 ?? [打印本頁]

作者: t8899    時間: 2016-6-21 21:09     標題: 用find 指令 找出符合顏色的儲存格 ??

本帖最後由 t8899 於 2016-6-21 21:12 編輯

找出 a1:a100 的儲存格為 Interior.ColorIndex=35
的語法??
Interior.ColorIndex=35 不知如何套用??
--------------------------
Find方法的語法
[語法]  
<單元格區域>.Find (What,[After],[LookIn],[LookAt],[SearchOrder],[SearchDirection],[MatchCase],[MatchByte],[SearchFormat])
[參數說明]
(1)<單元格區域>,必須指定,返回一個Range對象。
(2)參數 What,必需指定。代表所要查找的數據,可以為字符串、整數或者其它任何數據類型的數據。對應於「查找與替換」對話框中,「查找內容」文本框中的內容。
(3)參數 After,可選。指定開始查找的位置,即從該位置所在的單元格之後向後或之前向前開始查找(也就是說,開始時不查找該位置所在的單元格,直到Find方法繞回到該單元格時,才對其內容進行查找)。所指定的位置必須是單元格區域中的單個單元格,如果未指定本參數,則將從單元格區域的左上角的單元格之後開始進行查找。
(4)參數 LookIn,可選。指定查找的範圍類型,可以為以下常量之一:
xlValues、xlFormulas或者xlComments,默認值為xlFormulas。對應於「查找與替換」對話框中,「查找範圍」下拉框中的選項。
(5)參數 LookAt,可選。可以為以下常量之一:
XlWhole或者xlPart,用來指定所查找的數據是與單元格內容完全匹配還是部分匹配,默認值為xlPart。對應於「查找與替換」對話框中,「單元格匹配」復選框。
(6)參數 SearchOrder,可選。用來確定如何在單元格區域中進行查找,是以行的方式(xlByRows)查找,還是以列的方式(xlByColumns)查找,默認值為xlByRows。對應於「查找與替換」對話框中,「搜索」下拉框中的選項。
(7)參數 SearchDirection,可選。用來確定查找的方向,即是向前查找(XlPrevious)還是向後查找(xlNext),默認的是向後查找。
(8)參數 MatchCase,可選。若該參數值為True,則在查找時區分大小寫。默認值為False。對應於「查找與替換」對話框中,「區分大小寫」復選框。
(9)參數 MatchByter,可選。即是否區分全角或半角,在選擇或安裝了雙字節語言時使用。若該參數為True,則雙字節字符僅與雙字節字符相匹配;若該參數為False,則雙字節字符可匹配與其相同的單字節字符。
對應於「查找與替換」對話框中,「區分全角/半角」復選框。
(10)參數 SearchFormat,可選,指定一個確切類型的查找格式。對應於「查找與替換」對話框中,「格式」按鈕。當設置帶有相應格式的查找時,該參數值為True。
(11)在每次使用Find方法後,參數LookIn、LookAt、SearchOrder、MatchByte的設置將保存。如果下次使用本方法時,不改變或指定這些參數的值,那麼該方法將使用保存的值。在VBA中設置的這些參數將更改「查找與替換」對話框中的設置;同理,更改「查找與替換」對話框中的設置,也將同時更改已保存的值。也就是說,在編寫好一段代碼後,若在代
碼中未指定上述參數,可能在初期運行時能滿足要求,但若用戶在「查找與替換」對話框中更改了這些參數,它們將同時反映到程序代碼中,當再次運行代碼時,運行結果可能會產生差異或錯誤。若要避免這個問題,在每次使用時建議明確的設置這些參數。
Sub test() '刪除各表最後3個數據行
   Dim sh As Worksheet, r
   For Each sh In Worksheets
     r = sh.Cells.Find("*", , , , 1, 2).Row『表格非空最大行號
   Next
End Sub
作者: GBKEE    時間: 2016-6-22 05:57

回復 1# t8899

試試看
  1. Option Explicit
  2. Sub test() '刪除各表最後3個數據行
  3.    Dim sh As Worksheet, r
  4.    Application.FindFormat.Interior.ColorIndex = 35
  5.    For Each sh In Worksheets
  6.         r = sh.Cells.Find("*", , , , 1, 2, SearchFormat:=True).Row '『表格非空最大行號
  7.    Next
  8. End Sub
複製代碼

作者: t8899    時間: 2016-6-22 06:31

本帖最後由 t8899 於 2016-6-22 06:33 編輯
回復  t8899

試試看
GBKEE 發表於 2016-6-22 05:57

[attach]24538[/attach]

[attach]24539[/attach]
作者: GBKEE    時間: 2016-6-23 07:26

回復 3# t8899
  1.   r = sh.Cells.Find("", , , , 1, 2, SearchFormat:=True).Row '表格最大行號
複製代碼

作者: c_c_lai    時間: 2016-6-23 07:40

回復 4# GBKEE
所以會出現錯誤是因為 sh 並未加以定義,
所以它的執行區塊當然會不被接受。
作者: hcm19522    時間: 2016-6-23 09:47

http://blog.xuite.net/hcm19522/twblog/205029860
作者: c_c_lai    時間: 2016-6-23 15:09

回復 4# GBKEE
這是測試的檔案:
[attach]24545[/attach]
[attach]24546[/attach]
[attach]24547[/attach]
作者: GBKEE    時間: 2016-6-24 06:58

本帖最後由 GBKEE 於 2016-6-24 07:56 編輯

回復 7# c_c_lai

可了解一下
  1. Sub Ex() '刪除各表最後3個數據行
  2.     Dim sh As Worksheet, r As Double, i As Integer
  3.     Application.FindFormat.Clear
  4.       On Error GoTo Er:
  5.     With Workbooks.Add
  6.         .Sheets(1).Range("a" & Rows.Count) = "test"
  7.         .Sheets(1).Range("a" & Rows.Count) = ""
  8.         For i = 1 To 10
  9.             For Each sh In .Worksheets
  10.             sh.Activate
  11.                 If i > 1 Then
  12.                     On Error GoTo 0
  13.                     With sh
  14.                         .Cells(i, 1) = "aa"
  15.                         .Cells(i, 1) = ""
  16.                     End With
  17.                 End If
  18.                 r = sh.Cells.Find("", , , , 1, 2).Row - 1 ' 表格最大行號  (同等於 SearchFormat:=False)
  19.                 Debug.Print i, sh.Name, r, "錯誤值 " & Err
  20.         Next
  21.     Next
  22.     .Close False
  23.     End With
  24. Exit Sub
  25. Er:
  26.     With sh
  27.         .Cells(i) = "aa"
  28.         .Cells(i) = ""
  29.     End With
  30.     Resume
  31. End Sub
複製代碼

作者: c_c_lai    時間: 2016-6-24 08:38

回復 8# GBKEE
感激萬分!
從 Debug.Print sh.Name, r, "錯誤值 " & Err 中
多少看出瞭一些端爾, Thanks a lot !




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