想在 VBA 中创建多个 if 语句
want to make multiple if statement in VBA
我怎么能 运行 这个多个 If 语句它只是 运行 第一个 if 语句(因为它是真的)但我希望 Programm 逐步处理所有 If 语句。请检查 check13 的 If 语句,因为在拾取数组时几乎没有区别。
Sub main_process_data()
Dim s1 As Worksheet, s2 As Worksheet
Dim check1 As Boolean, check5 As Boolean, check6 As Boolean, check7 As Boolean, check13 As Boolean
Set s1 = ThisWorkbook.Worksheets(1)
Set s2 = ThisWorkbook.Worksheets(2)
check1 = s2.CHECKBOXES("Check Box 1").Value = xlOn
check5 = s2.CHECKBOXES("Check Box 5").Value = xlOn
check6 = s2.CHECKBOXES("Check Box 6").Value = xlOn
check7 = s2.CHECKBOXES("Check Box 7").Value = xlOn
check13 = s2.CHECKBOXES("Check Box 13").Value = xlOn
If check1 Then
s1.Range("C42").Value = s2.Range("B2").Value
Else
s1.Range("C42").Value = vbNullString
If check5 Then
s1.Range("C43").Value = s2.Range("B3").Value
Else
s1.Range("C43").Value = vbNullString
If check6 Then
s1.Range("C44").Value = s2.Range("B4").Value
Else
s1.Range("C44").Value = vbNullString
If check7 Then
s1.Range("C45").Value = s2.Range("B5").Value
Else
s1.Range("C45").Value = vbNullString
If check13 Then
s1.Range("C45").Value = s2.Range("B11").Value
Else
s1.Range("C45").Value = vbNullString
End If
End If
End If
End If
End If
End Sub
给运行每一个如果一个接一个应该是这样的:
Sub main_process_data()
Dim s1 As Worksheet, s2 As Worksheet
Dim check1 As Boolean, check5 As Boolean, check6 As Boolean, check7 As Boolean, check13 As Boolean
Set s1 = ThisWorkbook.Worksheets(1)
Set s2 = ThisWorkbook.Worksheets(2)
check1 = s2.CHECKBOXES("Check Box 1").Value = xlOn
check5 = s2.CHECKBOXES("Check Box 5").Value = xlOn
check6 = s2.CHECKBOXES("Check Box 6").Value = xlOn
check7 = s2.CHECKBOXES("Check Box 7").Value = xlOn
check13 = s2.CHECKBOXES("Check Box 13").Value = xlOn
If check1 Then
s1.Range("C42").Value = s2.Range("B2").Value
Else
s1.Range("C42").Value = vbNullString
End If
If check5 Then
s1.Range("C43").Value = s2.Range("B3").Value
Else
s1.Range("C43").Value = vbNullString
End If
If check6 Then
s1.Range("C44").Value = s2.Range("B4").Value
Else
s1.Range("C44").Value = vbNullString
End If
If check7 Then
s1.Range("C45").Value = s2.Range("B5").Value
Else
s1.Range("C45").Value = vbNullString
End If
End Sub
使用循环和 Offset
:
Dim checks As Variant
checks = Array(check1, check5, check6, check7, check13)
Dim i As Long
For i = Lbound(checks) to Ubound(checks)
If checks(i) Then
s1.Range("C42").Offset(i).Value = s2.Range("B2").Offset(i).VAlue
Else
s1.Range("C42").Offset(i).Value = vbNullString
End If
Next
更好的是,跳过创建 check
变量:
Dim checkNums As Variant
checkNums = Array(1, 5, 6, 7, 13)
Dim i As Long
For i = Lbound(checkNums) to Ubound(checkNums)
If s2.CHECKBOXES("Check Box " & checkNums(i)).Value = xlOn Then
s1.Range("C42").Offset(i).Value = s2.Range("B2").Offset(i).Value
Else
s1.Range("C42").Offset(i).Value = vbNullString
End If
Next
编辑:
由于 s2
上的范围不连续,使用两个数组:
Dim checkNums As Variant
checkNums = Array(1, 5, 6, 7, 13)
With s2
Dim ranges As Variant
ranges = Array(.Range("B2"), _
.Range("B3"), _
.Range("B4"), _
.Range("B5"), _
.Range("B11"))
End With
Dim i As Long
For i = Lbound(checkNums) to Ubound(checkNums)
If s2.CHECKBOXES("Check Box " & checkNums(i)).Value = xlOn Then
s1.Range("C42").Offset(i).Value = ranges(i).Value
Else
s1.Range("C42").Offset(i).Value = vbNullString
End If
Next
我建议使用 Select-Case(C# 中的 switch-case)而不是 If-Else,作为模式匹配的一种形式。参见:Select Case statement
我怎么能 运行 这个多个 If 语句它只是 运行 第一个 if 语句(因为它是真的)但我希望 Programm 逐步处理所有 If 语句。请检查 check13 的 If 语句,因为在拾取数组时几乎没有区别。
Sub main_process_data()
Dim s1 As Worksheet, s2 As Worksheet
Dim check1 As Boolean, check5 As Boolean, check6 As Boolean, check7 As Boolean, check13 As Boolean
Set s1 = ThisWorkbook.Worksheets(1)
Set s2 = ThisWorkbook.Worksheets(2)
check1 = s2.CHECKBOXES("Check Box 1").Value = xlOn
check5 = s2.CHECKBOXES("Check Box 5").Value = xlOn
check6 = s2.CHECKBOXES("Check Box 6").Value = xlOn
check7 = s2.CHECKBOXES("Check Box 7").Value = xlOn
check13 = s2.CHECKBOXES("Check Box 13").Value = xlOn
If check1 Then
s1.Range("C42").Value = s2.Range("B2").Value
Else
s1.Range("C42").Value = vbNullString
If check5 Then
s1.Range("C43").Value = s2.Range("B3").Value
Else
s1.Range("C43").Value = vbNullString
If check6 Then
s1.Range("C44").Value = s2.Range("B4").Value
Else
s1.Range("C44").Value = vbNullString
If check7 Then
s1.Range("C45").Value = s2.Range("B5").Value
Else
s1.Range("C45").Value = vbNullString
If check13 Then
s1.Range("C45").Value = s2.Range("B11").Value
Else
s1.Range("C45").Value = vbNullString
End If
End If
End If
End If
End If
End Sub
给运行每一个如果一个接一个应该是这样的:
Sub main_process_data()
Dim s1 As Worksheet, s2 As Worksheet
Dim check1 As Boolean, check5 As Boolean, check6 As Boolean, check7 As Boolean, check13 As Boolean
Set s1 = ThisWorkbook.Worksheets(1)
Set s2 = ThisWorkbook.Worksheets(2)
check1 = s2.CHECKBOXES("Check Box 1").Value = xlOn
check5 = s2.CHECKBOXES("Check Box 5").Value = xlOn
check6 = s2.CHECKBOXES("Check Box 6").Value = xlOn
check7 = s2.CHECKBOXES("Check Box 7").Value = xlOn
check13 = s2.CHECKBOXES("Check Box 13").Value = xlOn
If check1 Then
s1.Range("C42").Value = s2.Range("B2").Value
Else
s1.Range("C42").Value = vbNullString
End If
If check5 Then
s1.Range("C43").Value = s2.Range("B3").Value
Else
s1.Range("C43").Value = vbNullString
End If
If check6 Then
s1.Range("C44").Value = s2.Range("B4").Value
Else
s1.Range("C44").Value = vbNullString
End If
If check7 Then
s1.Range("C45").Value = s2.Range("B5").Value
Else
s1.Range("C45").Value = vbNullString
End If
End Sub
使用循环和 Offset
:
Dim checks As Variant
checks = Array(check1, check5, check6, check7, check13)
Dim i As Long
For i = Lbound(checks) to Ubound(checks)
If checks(i) Then
s1.Range("C42").Offset(i).Value = s2.Range("B2").Offset(i).VAlue
Else
s1.Range("C42").Offset(i).Value = vbNullString
End If
Next
更好的是,跳过创建 check
变量:
Dim checkNums As Variant
checkNums = Array(1, 5, 6, 7, 13)
Dim i As Long
For i = Lbound(checkNums) to Ubound(checkNums)
If s2.CHECKBOXES("Check Box " & checkNums(i)).Value = xlOn Then
s1.Range("C42").Offset(i).Value = s2.Range("B2").Offset(i).Value
Else
s1.Range("C42").Offset(i).Value = vbNullString
End If
Next
编辑:
由于 s2
上的范围不连续,使用两个数组:
Dim checkNums As Variant
checkNums = Array(1, 5, 6, 7, 13)
With s2
Dim ranges As Variant
ranges = Array(.Range("B2"), _
.Range("B3"), _
.Range("B4"), _
.Range("B5"), _
.Range("B11"))
End With
Dim i As Long
For i = Lbound(checkNums) to Ubound(checkNums)
If s2.CHECKBOXES("Check Box " & checkNums(i)).Value = xlOn Then
s1.Range("C42").Offset(i).Value = ranges(i).Value
Else
s1.Range("C42").Offset(i).Value = vbNullString
End If
Next
我建议使用 Select-Case(C# 中的 switch-case)而不是 If-Else,作为模式匹配的一种形式。参见:Select Case statement