幾年前,我在 Excel 中使用 Freeforms 構建了一個互動式熱圖,形成了該國所有地區的完整地圖。每個區域都有一個特定的 KPI 百分比,然后通過 VBA 宏為自由形狀著色。
但是,我現在繼續在運行時錯誤“5”中運行:無效的程序呼叫或引數,并且我在代碼中找不到錯誤。
有人看到我看不到的嗎?
Sub HEATMAP()
For i = 1 To 139
a = Sheet3.Cells((1 i), 6)
b = Sheet3.Cells((1 i), 5) * 28 - 28
c = Sheet3.Cells((1 i), 5) * 28 - 9
d = 89 - Sheet3.Cells((1 i), 5) * 9 - 9
Sheet2.Shapes.Range(Array("Freeform " & a)).Line.ForeColor.RGB = RGB(80, 80, 80)
Sheet2.Shapes.Range(Array("Freeform " & a)).Fill.ForeColor.RGB = RGB(b, c, d) "<- this line produces the error"
Next i
ActiveWorkbook.RefreshAll
End Sub
表 3 包含所有區域的串列,其中包含每個區域物件的自由格式名稱及其 KPI 百分比,帶回 10 個類別(每個 10% 括號一個),應該回傳特定顏色。此顏色應使用 VBA 中的值 b、c 和 d 計算。(從最低括號:黃色到最高括號:綠色)作業表包含一個標題。第 5 列有顏色括號(編號為 10 - 1,10 為最差括號 [0-10%],1 為最佳括號 [90-100%])第 6 列有物件的自由形式數,創建地圖。共有 139 個區域(因此是自由形式)
作業表 2 包含帶有觸發此 VBA 的按鈕的地圖,因此用戶可以根據 KPI 值使用它“為地圖著色”。
我一直想念什么?提前致謝!
uj5u.com熱心網友回復:
正如大笨鐘所說,當錯誤發生時,b、c 和 d 是什么?
可能想用一個
On Error GoTo ErrorHandler1
Sheet2.Shapes.Range(Array("Freeform " & a)).Fill.ForeColor.RGB = RGB(b, c, d) '<- this line produces the error
dummy = 1 'Just a dummy line so you can resume out of the error and see what inputs produced the invalid input val
Exit Sub
ErrorHandler1:
stophere = 1 (and put a breakpoint on this line)
Resume Next
這是在迭代中進入代碼的一種略顯丑陋的方式,它分崩離析,讓您四處尋找無效值及其來源。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434847.html
上一篇:IsDate函式無法識別日期
