Vba 运行时错误';13';:类型不匹配

Vba 运行时错误';13';:类型不匹配,vba,excel,runtime-error,excel-2010,Vba,Excel,Runtime Error,Excel 2010,我正在尝试创建一个excel工作表,当我选择一个下拉列表选项时,会显示一个输入框,并要求用户输入一个数字。这是为我玩的游戏创建一个“技能规划器”。所以我在使用代码 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Select Case Range("A4") Case "Endurance" Call Module1.GetEndurance Case "Active Regenerati

我正在尝试创建一个excel工作表,当我选择一个下拉列表选项时,会显示一个输入框,并要求用户输入一个数字。这是为我玩的游戏创建一个“技能规划器”。所以我在使用代码

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Select Case Range("A4")

Case "Endurance"
Call Module1.GetEndurance
Case "Active Regeneration"
Call Module2.GetActiveRegen

End Select

End Sub
在本工作簿和内部模块1中

Sub GetEndurance()
Dim QtyEntry As Integer
Dim MSG As String
Const MinSkill As Integer = 0
Const MaxSkill As Integer = 100
MSG = "Please enter skill level between " & MinSkill & " and " & MaxSkill
Do
    QtyEntry = InputBox(MSG)
    If IsNumeric(QtyEntry) Then
        If QtyEntry >= MinSkill And QtyEntry <= MaxSkill Then Exit Do
        End If
            MSG = "... Really? I told you the valid options..."
            MSG = MSG & vbNewLine
            MSG = MSG & "Please enter skill level between " & MinSkill & " and " & MaxSkill
            Loop
Sheet2.Range("B2").Value = QtyEntry

End Sub

您在声明中为QtyEntry选择了错误的数据类型。选择字符串而不是整数

Sub GetEndurance()
Dim QtyEntry As String
Dim MSG As String
Const MinSkill As Integer = 0
Const MaxSkill As Integer = 100
MSG = "Please enter skill level between " & MinSkill & " and " & MaxSkill
Do
    QtyEntry = InputBox(MSG)
    If QtyEntry = "" Then Exit Do
    If IsNumeric(QtyEntry) Then
        If QtyEntry >= MinSkill And QtyEntry <= MaxSkill Then Exit Do
        End If
            MSG = "... Really? I told you the valid options..."
            MSG = MSG & vbNewLine
            MSG = MSG & "Please enter skill level between " & MinSkill & " and " & MaxSkill
            Loop
Sheet2.Range("B2").Value = QtyEntry

End Sub
Sub-get耐力()
作为字符串的Dim QtyEntry
作为字符串的Dim MSG
常量MinSkill为整数=0
常量MaxSkill为整数=100
MSG=“请输入介于“&MinSkill&”和“&MaxSkill&”之间的技能级别
做
QtyEntry=输入框(MSG)
如果QtyEntry=“”,则退出Do
如果是数字(QtyEntry),则

如果QtyEntry>=MinSkill和QtyEntry,我现在唯一的问题是宏一直在运行。当我输入say50时,它接受了它,但随后它又弹出了最初的msg框。如果我点击cancel,它会显示备份消息框。退出又开始了整个过程。如何停止?错误显示在这一行:QtyEntry=InputBox(MSG),我想它一直在问是因为您正在使用
Workbook\u SheetChange
事件。一旦您要求用户输入并将值放入工作表,它将触发相同的
工作簿\u SheetChange
事件我明白您的意思了。。。也许我可以使宏运行的基础上,而不是下拉列表改变像一个按钮或东西。我会在这里试一下。我很感谢你的帮助,我会继续这样做。由于问题“运行时错误'13:类型不匹配”已得到回答,请将答案标记为解决方案,如果它对您有帮助,请投票表决。
Sub GetEndurance()
Dim QtyEntry As String
Dim MSG As String
Const MinSkill As Integer = 0
Const MaxSkill As Integer = 100
MSG = "Please enter skill level between " & MinSkill & " and " & MaxSkill
Do
    QtyEntry = InputBox(MSG)
    If QtyEntry = "" Then Exit Do
    If IsNumeric(QtyEntry) Then
        If QtyEntry >= MinSkill And QtyEntry <= MaxSkill Then Exit Do
        End If
            MSG = "... Really? I told you the valid options..."
            MSG = MSG & vbNewLine
            MSG = MSG & "Please enter skill level between " & MinSkill & " and " & MaxSkill
            Loop
Sheet2.Range("B2").Value = QtyEntry

End Sub