簡體   English   中英

Excel VBA單元格值步進循環

[英]excel vba cell value step loop

多個單元格引用單元格R1間接查找其他四張紙之一。 這些工作表分別命名為week1,week2,week3和week4。 我要做的是,當我單擊按鈕X時,我的參考單元從第1周更改為第2周。 每次我點擊它時,前進的程度都應使第4周回到第1周。

我當前的損壞代碼為:

  'Change the week number in cell R1
week = Range("R1")
If week = week1 Then
    Range("R1").Value = week2
Else
    If week = week2 Then
        Range("R1").Value = week3
    Else
        If week = week3 Then
            Range("R1").Value = week4
        Else
            If week = week4 Then
                Range("R1").Value = week1
            End If
        End If
    End If
End If
Application.ScreenUpdating = True 'Turns viewing function back on so the spreadsheet is usable.
End Sub
Select Case week
    Case Is = week1: vValue = week2
    Case Is = week2: vValue = week3
    Case Is = week3: vValue = week4
    Case Is = week4: vValue = week1
End Select

Range("R1").Value = vValue
Application.ScreenUpdating = True

您應該能夠在單個代碼行中執行此操作。

Range("R1") = Format(InStr(1, "4123", Right(Range("R1").Value, 1)), "\W\e\ek0")

這將在Week1,Week2,Week3,Week4,Week1,...之間循環。 我已經省略了R1的父工作表引用,但包括它永遠不是一個壞主意。

有一個簡單的解決方法:

Range("R1") = Left(Range("R1"), 4) & Right(Range("R1"), 1) Mod 4 + 1
'number after Mod = max week

Mod x僅在其最大計數時將其設置為0( + 1則將其再次設置為1)。但是,您可以使用此子項來避免出現奇怪的行為:

Sub NewWeekMax()
  Dim str As String, i As Byte
  str = "Week1"
  For i = 2 To 4 'last num = max weeks
    str = str & ",week" & i
  Next
  With Range("R4").Validation
    .Delete
    .Add 3, 1, 1, str
    .InCellDropdown = True
    .ShowInput = True
    .ShowError = True
  End With
End Sub

此子項只是設置數據驗證以禁用R1錯誤輸入

暫無
暫無

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

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