返回列表 上一主題 發帖

[發問] 修正產生偵錯的程式碼。

[發問] 修正產生偵錯的程式碼。

插入紅顏色的程式碼,執行後產生下列的偵錯提示框︰
未命名-1.png
2019-11-6 00:19
            
未命名-2.png
2019-11-6 00:20


        If xF(1, V) <> "" Then
           [B2:AN2].Find(xF(1, V), LookAt:=xlWhole).Font.ColorIndex = IIf(V = 8, 7, 7)                       
           [B65:AN65].Find(xF(1, V), LookAt:=xlWhole).Font.ColorIndex = IIf(V = 8, 7, 7)  '列114      
          [B66:AN66].Find(xF(1, V), LookAt:=xlWhole).Font.ColorIndex = IIf(V = 8, 7, 7)
        End If
        If xF(2, V) <> "" Then
           [B2:AN2].Find(xF(2, V), LookAt:=xlWhole).Interior.ColorIndex = IIf(V = 8, 6, 6)                        
           [B65:AN65].Find(xF(2, V), LookAt:=xlWhole).Interior.ColorIndex = IIf(V = 8, 6, 6)
           [B66:AN66].Find(xF(2, V), LookAt:=xlWhole).Interior.ColorIndex = IIf(V = 8, 6, 6)

        End If

請問︰紅顏色的程式碼應該如何修正?
懇請各位大大幫忙!謝謝!

測試檔案︰ TEST.rar (113.79 KB)

爬文老半天,還是不知道錯在哪裡?
只是將列數改變,為什麼就不能執行了?

TOP

真的沒有熱心的大大可以幫忙嗎?QQ

TOP

本帖最後由 n7822123 於 2019-11-8 23:24 編輯

回復 1# papaya

你要讓儲存格字體變色之前,首先要能找到該儲存格阿~~~

你的xF(2, V)儲存格內的值 =1, 電腦在[B65:AN65]找不到 值是 1 的儲存格....

前面這段 [B65:AN65].Find(xF(2, V), LookAt:=xlWhole 就會等於 Nothing

然後你又要叫電腦把 "Nothing" 變色?

Nothing.Font.ColorIndex = IIf(v = 8, 7, 7)

這樣不出錯才奇怪吧!?

如果你要這樣寫,前面加上 On Error Resume Next  讓電腦跳到下一行執行
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 4# n7822123
n7822123大大 :  您好!
測試成功。
汗顏!原程式碼是小弟節錄本網站的程式碼,並非小弟自寫^^"
感謝您的詳細說明和解答。

如果您不介意的話,可否再請教您 :
假設不以插入On Error Resume Next來解題,
依您的寫法,列106~列123的程式碼應該如何編寫為宜?
萬分感謝^^

TOP

本帖最後由 n7822123 於 2019-11-9 00:26 編輯

回復 5# papaya


原本

[B65:AN65].Find(xF(1, V), LookAt:=xlWhole).Font.ColorIndex = IIf(V = 8, 7, 7)   ' IIf(V = 8, 7, 7) 這個很多餘..........

改成  

if not [B65:AN65].Find(xF(1, V), LookAt:=xlWhole) is nothing then  [B65:AN65].Find(xF(1, V), LookAt:=xlWhole).Font.ColorIndex =7

如果太長,我會分兩行寫.........因為我的字體給它弄很大字,不想拉捲軸

set oRG= [B65:AN65].Find(xF(1, V), LookAt:=xlWhole)
if not oRG is nothing then oRG.Font.ColorIndex =7



解決一列,但是你還有很多列
on error resume next 比較乾脆...
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 6# n7822123
很多列,沒有關係,小弟冒昧再進階請教您的寫法,就是想多研習。
萬分感謝您耐心的幫忙和指導。
晚安!

TOP

本帖最後由 准提部林 於 2019-11-9 15:21 編輯

Dim FF As Range, AD
If Not xF Is Nothing Then
   For V = 4 To 8
       For Each AD In Array("B2:AN2", "B65:AN65", "B66:AN66")
           If xF(1, V) <> "" Then
              Set FF = Range(AD & "").Find(xF(1, V), Lookat:=xlWhole)
              If Not FF Is Nothing Then FF.Font.ColorIndex = 7
           End If
           If xF(2, V) <> "" Then
              Set FF = Range(AD & "").Find(xF(2, V), Lookat:=xlWhole)
              If Not FF Is Nothing Then FF.Interior.ColorIndex = 6
           End If
       Next
   Next V
End If
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

回復 8# 准提部林
准提版主 :
感謝回應和解題^^
測試結果 ==>呈現下列提示框
未命名.png
2019-11-9 14:25


有嘗試將AD$ 改為  AD As Range 或 AD As String
但都不行^^"
請問 : 應該怎麼改才正確?
謝謝您^^

TOP

回復 9# papaya

改好了, 再試~~
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

        靜思自在 : 時時好心就是時時好日。
返回列表 上一主題