首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA错误没有为类型'Char‘和’BC30452‘定义整型运算符'Mod’

VBA错误没有为类型'Char‘和’BC30452‘定义整型运算符'Mod’
EN

Stack Overflow用户
提问于 2016-10-22 03:57:51
回答 1查看 505关注 0票数 0

下面的代码得到了上面的错误,我不明白为什么。我知道mod运算符在前面和后面都需要数字,所以chrArray(i)得不到数字。感谢您的帮助。

公共类Form1

代码语言:javascript
运行
复制
Private Sub Button3_Click(sender As Object, e As EventArgs)
    Application.Exit()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs)
    Textbox1.Text = ""
    Textbox2.Text = ""
End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs)
    Dim sNumber As String
    sNumber = TextBox1.Text

    Textbox2.Text = EvenDigitMessage(sNumber)
End Sub


Private Function IsOnlyNumber(ByVal qty As String) As Boolean
    Dim objRegExp As New System.Text.RegularExpressions.Regex("^\d+$")
    Return objRegExp.Match(qty).Success
End Function

Private Function IsThreeDigitNumber(ByVal num As String) As Boolean
    Dim objRegExp As New System.Text.RegularExpressions.Regex("^\d{3}$")
    Return objRegExp.Match(num).Success
End Function

Private Function EvenDigitMessage(ByVal sNumber As String) As String
    Dim bValidDigits As Boolean
    Dim bValidNumber As Boolean
    Dim sMessage As String
    Dim iTotalEven As Integer = 0

    If Not IsNumeric(sNumber) Then
        sMessage = "Please enter a 3 digit number"
    Else

        bValidNumber = IsOnlyNumber(sNumber)
        bValidDigits = IsThreeDigitNumber(sNumber)

        If bValidNumber = False Or bValidDigits = False Then
            sMessage = "Please enter a 3 digit number"
        Else
            iTotalEven = CountEvenDigits(sNumber)
            sMessage = "This number contains" & iTotalEven & "even digits."
        End If

    End If

    Return sMessage
End Function

Private Function CountEvenDigits(ByVal sNumber As String) As Integer
    Dim i As Integer
    Dim chrArray() As Char
    Dim iTotal As Integer = 0


    chrArray = sNumber.ToCharArray


    For i = 0 To chrArray.Length - 1
        If chrArray(i) Mod 2 = 0 Then
            If iTotal = 0 Then
                iTotal = 1
            Else
                iTotal = iTotal + 1
            End If
        End If
    Next

    Return iTotal
End Function

结束类

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 05:12:23

基于此链接的https://msdn.microsoft.com/en-us/library/7sx7t66b.aspx

Visual Basic不能在Char和numeric类型之间直接转换。可以使用Asc或AscW函数将字符值转换为表示其代码点的整数。可以使用Chr或ChrW函数将Integer值转换为具有该代码点的Char。如果类型检查开关(Option Strict语句)为on,则必须将文字类型字符附加到单字符字符串文字,以将其标识为Char数据类型。下面的示例说明了这一点。

因此,您必须将代码更改为如下所示

代码语言:javascript
运行
复制
If Asc(chrArray(i)) Mod 2 = 0 Then
    If iTotal = 0 Then
            iTotal = 1
        Else
            iTotal = iTotal + 1
        End If
End If
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40184569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档