我对VBA编程很新,以及不同的数据类型如何工作,所以我遇到了一个问题。我在输入框中添加了两个不同的数字(rng
和rng1
)。如果用户按下取消,程序将关闭并且工作表将锁定。如果我使用例如一个整数而不是一个变量我不能运行关闭代码。但是,当我尝试执行rng + rng1
时,它不会添加它们,而是将它们粘合在一起,即grp = 2
和grp1 = 3
然后grp + grp1 = 23
。这与我的情节功能混淆了。所以我希望有人可以帮我弄清楚要使用的正确数据类型?或者是问题的不同解决方案。代码可以在下面看到。
dim grp As variant
dim grp1 As variant
Application.DisplayAlerts = False
On Error Resume Next
grp = InputBox("Enter No in Group 1")
On Error GoTo 0
Application.DisplayAlerts = True
If grp = "" Then
MsgBox ("User canceled!")
ActiveSheet.Protect Password:="..."
Exit Sub
End If
Application.DisplayAlerts = False
On Error Resume Next
grp1 = InputBox("Enter No in Group 2")
On Error GoTo 0
Application.DisplayAlerts = True
If grp1 = "" Then
MsgBox ("User canceled!")
ActiveSheet.Protect Password:="..."
Exit Sub
End If
ActiveSheet.ChartObjects("Chart1").Activate
With ActiveChart
I = 3
Do Until I = grp + 3
ActiveChart.FullSeriesCollection(I).Select
ActiveChart.SeriesCollection(I).Select
With Selection
.Border.LineStyle = xlContinuous
.Border.Color = RGB(0, 255, 0)
.MarkerBackgroundColor = RGB(0, 255, 0)
.MarkerForegroundColor = RGB(0, 255, 0)
End With
I = I + 1
Loop
j = grp + 3
Do Until j = grp + grp1 + 3
ActiveChart.SeriesCollection(j).Select
With Selection
.Border.LineStyle = xlContinuous
.Border.Color = RGB(0, 0, 255)
.MarkerBackgroundColor = RGB(0, 0, 255)
.MarkerForegroundColor = RGB(0, 0, 255)
End With
j = j + 1
Loop
答案 0 :(得分:1)
它不会添加它们,而是将它们粘合在一起,即
grp = 2
和grp1 = 3
然后grp + grp1 = 23
InputBox
会返回String
类型。很多人都没有意识到,你可以使用 &
或+
运算符来组合字符串,这就是你和你的意思#39;正在做:
"2" + "3" = "23" '// equivalent to "2" & "3"
鉴于:
2 + 3 = 5
因为您的参数属于String
类型,+
运算符会假定您正在尝试将它们组合在一起,而Int
没有隐式类型转换或者Long
或Double
,因为运算符对于组合字符串非常有效,这就是你给它的:)
注意: 通常建议仅使用&
运算符,这样做&#39>与添加长整数值相比,组合字符串更不明确。
要将结果输入作为数字类型 处理(即执行添加或其他算术运算),那么您需要使用数字数据(Integer/Long/Double
类型)而不是String
类型。你可以做一个明确的类型转换:
Dim grp as Long
grp = CLng(InputBox("Enter No in Group 1"))
或者,更优选地,use the Type
argument of the InputBox
function:
Dim grp as Long
grp = InputBox("Enter No in Group 1", Type:=1)
grp2
相同。
答案 1 :(得分:1)
因为两个输入都不能为0,所以这对你很有用:
Dim dInput1 As Double
Dim dInput2 As Double
'Use Application.InputBox with Type 1 to force a numeric entry
dInput1 = Application.InputBox("Enter No in Group 1", Type:=1)
If dInput1 = 0 Then Exit Sub 'Pressed cancel
'Use Application.InputBox with Type 1 to force a numeric entry
dInput2 = Application.InputBox("Enter No in Group 2", Type:=1)
If dInput2 = 0 Then Exit Sub 'Pressed cancel
'A simple example showing the values and their sum
MsgBox dInput1 & " + " & dInput2 & " = " & dInput1 + dInput2
以下是有关Application.InputBox
的详情的链接