簡體   English   中英

Excel VBA命名范圍

[英]Excel VBA Named Range

我正在運行vba代碼,如下所示:

昏暗分數整數

SolverReset
score = Range("N3").Value
If score = 1 Then
    SolverLoad loadArea:=Range("N4:N11")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
    SolverLoad loadArea:=Range("O4:O14")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
Else:
    SolverReset
    SolverLoad loadArea:=Range("P4:P15")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
End If

SolverReset
score = Range("N48").Value
If score = 1 Then
    SolverLoad loadArea:=Range("N49:N56")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
    SolverLoad loadArea:=Range("O49:O59")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
    SolverReset
Else:
    SolverReset
    SolverLoad loadArea:=Range("P49:P60")
    SolverSolve UserFinish:=True
    SolverFinish KeepFinal:=1
End If

如您所見,代碼的前半部分再次被重復。 范圍從N3更改為N48 ,從N4更改為N49 ,依此類推。

現在,我必須重復整個代碼172次迭代,只更改范圍Part,該范圍是對求解器位置的單元格引用。

有什么方法可以通過每次迭代后如何更改引用來使用for循環將過程重復172次。

可見,所有引用每次迭代都會增加+45。

嘗試這個。 我很有可能遺漏了一些數字,但希望您能明白

Sub x()

Dim score As Long, r As Range, i As Long

Set r = Range("N3")

For i = 1 To 172
    SolverReset
    score = r.Value
    If score = 1 Then
        SolverLoad loadArea:=r.Offset(1).Resize(8)
        SolverSolve UserFinish:=True
        SolverFinish KeepFinal:=1
        SolverReset
        SolverLoad loadArea:=r.Offset(1, 1).Resize(11)
        SolverSolve UserFinish:=True
        SolverFinish KeepFinal:=1
        SolverReset
    Else:
        SolverReset
        SolverLoad loadArea:=r.Offset(1, 2).Resize(12)
        SolverSolve UserFinish:=True
        SolverFinish KeepFinal:=1
    End If
    Set r = r.Offset(45)
Next i

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM