初学者,自定义函数老是提示错误
vb吧
全部回复
仅看楼主
level 2
lesliejoe 楼主
刚刚学到自定义函数,试着编了如下的编码:
Private Sub Command1_Click()
Dim A, B, C, F As Single
F = Func1(A, B, C)
Text4 = F
End Sub
Private Sub Form_Load()
Dim A, B, C As Single
A = Val(Text1.Text)
B = Val(Text2.Text)
C = Val(Text3.Text)
End Sub
Public Function Func1(ByVal A As Single, B As Single, C As Single) As Single
Func1 = ((A - B) ^ 2 + C ^ 2) / ((A + B) ^ 2 + C ^ 2)
End Function
就是在三个文本框输入三个任意值,计算后根据函数在text4中显示,老是提示溢出,求高手指点,谢谢!
2020年09月11日 07点09分 1
level 2
lesliejoe 楼主
是不是ABC设置的冲突了,改成XYZ,还提示BYRef参数类型不符
设置单精度的不行吗?
2020年09月11日 07点09分 2
level 2
lesliejoe 楼主
去掉Form的输入,改为这样的话,运行出来了,就是不知道为什么,求解惑!
还有就是使用Dim命令时,连续定义就出错,一行一行的定义才行?
Private Sub Command1_Click()
Dim X As Single
Dim Y As Single
Dim Z As Single
Dim F As Single
X = Val(Text1.Text)
Y = Val(Text2.Text)
Z = Val(Text3.Text)
F = Func1(X, Y, Z)
Text6.Text = F
End Sub
Public Function Func1(ByVal A As Single, B As Single, C As Single) As Single
Func1 = ((A - B) ^ 2 + C ^ 2) / ((A + B) ^ 2 + C ^ 2)
End Function
2020年09月11日 07点09分 4
level 15
这么简单的一个程序,你的代码却出现了大量的错误,虽然你已经学到函数了,但是显然前面的基础知识你都没有掌握
先说Form_Load的问题,这里涉及到了两个知识点:
1.事件驱动机制,简单来说,就是每段代码(过程)会在不同的时机执行,Form_Load的执行时机是“程序启动时”,Command1_Click的执行时机则是“单击按钮时”,显然,程序启动时,你还没有向文本框当中输入需要计算的数字,这样当你单击按钮时,用来计算的数字也不会是你输入的数字,自然会出错
2.变量的作用域,像这样在每个过程中分别定义变量,即使它们是重名的,也不是同一个变量,比如Form_Load中的A和Command1_Click中的A,就不是同一个,这样,即使你在程序启动之前就输入了需要计算的数字,单击按钮时用到的数字仍然不是你输入的数字,这是这里报“溢出”错误的真正原因
然后,关于变量定义的问题,VB6当中定义的每个变量都需要单独写出类型,比如这样:
Dim A As Single, B As Single, C As Single
不能因为这几个变量是同一类型,就省略其中某几个变量的类型,如果省略类型,则被省略类型的变量会被定义成VB默认的Variant类型,即以下两句定义等价:
Dim A, B, C As Single
Dim A As Variant, B As Variant, C As Single
事实上,也正是由于这个特性,VB可以在一行变量定义中为每个变量定义不同的类型,如下所示:
Dim A As Integer, B As Single, C As String
2020年09月11日 08点09分 5
听了您这一席话,我好像明白了很多,为了将Fortran程序转变成VB,我这一个月是自学,源程序里面只用到if和do,还有就是子过程和函数,所以都在自学这些,我明白了很多不懂得地方,谢谢高手!
2020年09月11日 09点09分
1