【发布时间】:2023-03-28 00:18:01
【问题描述】:
我根据我在这里找到的另一个问题(链接:Excel VBA Select Case Loop Sub)建模了一个 Select Case 循环。
为了使其适用,我必须做的更改非常少,而且我看不出哪里出错了。这是我的代码:
Private Function getColor(ByVal MatVal As Range) As Integer
Select Case MatVal
Case 0 To 1
getColor = 9: Exit Function
Case 1.01 To 3
getColor = 46: Exit Function
Case 3.01 To 5
getColor = 27: Exit Function
Case 5.01 To 10
getColor = 4: Exit Function
Case 10.01 To 20
getColor = 5: Exit Function
Case 20.01 To 30
getColor = 11: Exit Function
Case 30 To 100
getColor = 29: Exit Function
End Select
End Function
调用方式:
Set LipR = Workbooks("LMacro.xlsm")
Set SecX = Application.Workbooks.Open(Path & "SecX.csv")
Set Xws = SecX.Sheets("SecX")
Set Lws = LipR.Sheets("Funds")
With Lws
For i = 2 To 10 'LwsRows
If Lws.Range("A" & i).Value <> "" Then
LipR.Sheets.Add(After:=LipR.Sheets(LipR.Sheets.Count)).Name = Lws.Range("A" & i).Value
NewFund = Lws.Range("A" & i).Value
Set Fsheet = LipR.Sheets(NewFund)
End If
With Fsheet
FsheetRows = .Range("A" & .Rows.Count).End(xlUp).Row
End With
....
Set MatPhase = Fsheet.Range("O4:O" & FsheetRows)
For Each MatVal In MatPhase.Cells
MatVal.Interior.ColorIndex = getColor(MatVal)
Next MatVal
Fsheet.Cells.EntireColumn.AutoFit
Application.Goto _
Reference:=Fsheet.Range("A1"), Scroll:=True
Next i
End With
我在这里缺少什么?我真的试图避免为此使用 if/elseif。
谢谢
【问题讨论】:
-
1. 有什么问题? 2. 你不需要在每一行后面加上“退出函数”;一旦其中一个案例的计算结果为真,
getColor将被设置,然后它将退出案例表达式,因为没有其他案例将计算为真。 -
我刚刚对此进行了测试,它运行良好。我确实将
MatPhase范围更改为:Set MatPhase = ActiveSheet.Range("A1:A10")。也许检查Fsheet和FsheetRows是合法值? -
当我运行它时,颜色到处都是,或者不存在。 MatPhase 中的单元格是由公式驱动的,如果这有所作为的话。我添加了一个 matphase.select,然后在设置后立即停止,它正在获取正确的单元格。
-
对于 MatPhase 范围内值低于 0 或 > 100 的任何单元格,您将获得不存在的颜色。“到处都是”颜色是什么意思?
-
应该为每张创建的工作表调用这个循环,所以我将举几个例子。在创建的第一张纸上,我有几次 -113 和 17.52。也不是有色人种。我希望在 -113 上出现这个,并希望它是白色的,但不是 17。下一张表我的值范围从 0.09 到 30,全部突出显示为绿色。几张纸之后,范围全是蓝色的。我认为你是对的,问题出在我的 Sub 中,所以我将编辑我的帖子并添加更多周围的代码,看看是否有帮助。
标签: vba loops excel select-case