Board logo

標題: [發問] 修正產生偵錯的程式碼。 [打印本頁]

作者: papaya    時間: 2019-11-6 00:21     標題: 修正產生偵錯的程式碼。

插入紅顏色的程式碼,執行後產生下列的偵錯提示框︰
[attach]31388[/attach]             [attach]31389[/attach]

        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

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

測試檔案︰[attach]31390[/attach]
作者: papaya    時間: 2019-11-7 08:58

爬文老半天,還是不知道錯在哪裡?
只是將列數改變,為什麼就不能執行了?
作者: papaya    時間: 2019-11-8 13:03

真的沒有熱心的大大可以幫忙嗎?QQ
作者: n7822123    時間: 2019-11-8 23:22

本帖最後由 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  讓電腦跳到下一行執行
作者: papaya    時間: 2019-11-9 00:01

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

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

本帖最後由 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 比較乾脆...
作者: papaya    時間: 2019-11-9 01:05

回復 6# n7822123
很多列,沒有關係,小弟冒昧再進階請教您的寫法,就是想多研習。
萬分感謝您耐心的幫忙和指導。
晚安!
作者: 准提部林    時間: 2019-11-9 09:42

本帖最後由 准提部林 於 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
作者: papaya    時間: 2019-11-9 14:30

回復 8# 准提部林
准提版主 :
感謝回應和解題^^
測試結果 ==>呈現下列提示框
[attach]31402[/attach]

有嘗試將AD$ 改為  AD As Range 或 AD As String
但都不行^^"
請問 : 應該怎麼改才正確?
謝謝您^^
作者: 准提部林    時間: 2019-11-9 15:21

回復 9# papaya

改好了, 再試~~
作者: papaya    時間: 2019-11-9 17:42

回復 10# 准提部林
准提版主 :
測試成功^^
感謝您的指導和幫忙




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