读书人

刚学编程请问个很傻的自定义函数有关

发布时间: 2012-11-01 11:11:31 作者: rapoo

刚学编程,请教个很傻的自定义函数问题,谢谢!
Private Sub CommandButton1_Click()
Dim a As String
a = "工程部"
a = translate(a)
MsgBox a
End Sub

Public Function translate(fox As String) As String
If fox = "采购部" Then
fox = "Purchasing"
ElseIf fox = "工程部" Then
fox = "Engineering"
ElseIf fox = "财务部" Then
fox = Finance
Else
fox = "Can't traslate!"
End If
End Function
上面的程序运行了,结果跳出来却是空的,为什么呀?我单步运行了,自定义函数执行了,fox也赋值正确,为什么最后显示的结果不是Engineering?难道自定义函数的值没有成功返回?请赐教!

[解决办法]
Public Function translate(fox As String) As String
If fox = "采购部" Then
translate = "Purchasing"
ElseIf fox = "工程部" Then
translate = "Engineering"
ElseIf fox = "财务部" Then
translate = Finance
Else
translate = "Can't traslate!"
End If
End Function

Private Sub CommandButton1_Click()
Dim a As String
a = "工程部"
a = translate(a)
MsgBox a
End Sub

'这样就OK了!
[解决办法]
Public Function translate(vbref fox As String) As String
用vbref才能返回
[解决办法]

探讨
引用:

能跟我解释下为什么形参要用另一个变量,而不用能本身呢


谁跟你说不可以了???
你的这段VBA代码,它的执行过程没有任何能称为‘诡异’的地方。

你的代码明显的问题,就是逻辑错误!
这是造成结果为“空白”的关键所在。
还有就是你的语法结构不规范,也可以说你的代码隐藏着语法错误。


最简单的更正,把你那句
a = translate(a)
……

[解决办法]

在 VB 中,函数返回值的赋值,是通过函数中为函数名赋值实现的。如:

translate = "Engineering"

而你的

a = translate(a)

则是通过函数调用将函数的返回值赋给了 a。

[解决办法]
探讨
Private Sub CommandButton1_Click()
Dim a As String
a = "工程部"
a = translate(a)
MsgBox a
End Sub

Public Function translate(fox As String) As String
If fox = "采购部" Then
fox = "Purchasing"
Else……

[解决办法]
呵呵,上面正确
[解决办法]
可以不写byref,vb的过程和函数默认使用byref
使用byref调用参数,可以在过程和函数中修改参数,而调用过程中的参数变量会相应变化.
byref就是把参数的地址传递过去.
[解决办法]
元芳, 对于楼主不结贴这事你怎么看?

读书人网 >VB

热点推荐