运行时错误6 - 如何使Mod处理双精度?

时间:2014-01-05 17:17:09

标签: excel vba excel-vba

我在vba中总是遇到运行时错误:

 Sub rsa()

Dim c1 As Long
Dim c2 As Long
Dim z As Long
Dim e As Long

pt = "xa"
n = 187
e = 7

For i = 1 To Len(pt)

    b = Mid$(pt, i, 1)

        If b <> " " Then

             z = Asc(UCase(b))
             'Here is the problem:
             c = z ^ e Mod n
             Text = Text & c

        Else

        Text = Text & " "

        End If

Next i
Cells(20, 4).Value = Text
End Sub

我在c = z ^ e Mod n得到了运行时错误。

我尝试了不同的数据类型,但没有解决方案。

2 个答案:

答案 0 :(得分:10)

A Mod B等于A - Int(A / B) * B,因此您可以尝试使用c = z ^ e - Int(z ^ e / n) * n代替c = z ^ e Mod n。它对我有用

答案 1 :(得分:2)

运行时错误6是数字溢出操作。您的一个变量未定义得足够大或没有足够的精度。你需要展示更多的例子......让人们给你一个更好的主意。我要做的第一件事是在执行公式之前打印所有数字。

使用数据类型Double,转换为Double时使用CDbl()