VBA写了一个自定义函数,想调用子过程中的变量,但是失败。

这是原始语句:
Sub a2()

Dim a As Integer
Dim b As Integer
Dim tj As Boolean

For i = 1 To 13
tj = Cells(i, 1) = 5

If tj = True Then
b = b + 1
End If
Cells(i, 2) = b
Next i
Range("d1") = b
End Sub

觉得不方便,改成自定义函数。
Function aaa()
Dim a As Integer
Dim b As Integer
Dim tj As Boolean
For i = 1 To 13
If tj = True Then
b = b + 1
End If
Cells(i, 2) = b
Next i

aaa = b
End Function

然后这么调用,结果失败。
Sub a1()
Dim i As Integer
Dim tj As Boolean

For i = 1 To 10
tj = Cells(i, 1) = 5

Range("d1") = aaa
Next i
End Sub

主要是条件TJ,tj = Cells(i, 1) = 5这个在自过程为True,但是在模块里无法调用,始终为假。
那位高人帮改改。

第1个回答  2016-11-23
总体来说不知道你做这个是要干啥用。。如果只是用于传参的话请把tj定义为全局变量或者叫公共变量,定义位置应该在sub跟function外。如果按你这么写的话tj仅仅只是过程变量或者叫模块级变量,只在他们自己的过程或模块中起作用,尽管他们名字一样,但是他们仍是两个不同的变量。。所以如果你要进行传参的话写成这样(只改了tj的定义,其他代码没有动你的。因为不知道你要实现啥!):

Public tj As Boolean

Sub a1()
Dim i As Integer
For i = 1 To 10
tj = Cells(i, 1) = 5
Range("d1") = aaa
Next i
End Sub

Function aaa()
Dim a As Integer
Dim b As Integer
For i = 1 To 13
If tj = True Then
b = b + 1
End If
Cells(i, 2) = b
Next i
aaa = b
End Function追问

谢谢您,我其实是想写个函数。当满足某条件,比如数字从1到20。开始计数,从0开始计数。到5就归0,重新开始计数。求这个计数的数值。

您的代码我试了。运行为0

非常感谢您的指点,

追答

首先这不是我的代码。。这是你自己写的代码,我只是帮你把tj这个变量重新定义了,让他可以在两个模块中传递参数。。。至于你说为什么结果是0.因为b并没有初始化,所以他的初始值是0,而你A列最后一个数值是6,判断的完后tj是false,所以在function过程里得到的结果是Cells(i, 2) = b,b=0,所以结果就是0。。。

本回答被提问者和网友采纳
第2个回答  2016-11-23
tj = (Cells(i, 1) = 5) 加个括号
相似回答