Public Function Fac(n As Integer) As Long
If n = 1 Then
Fac = 1
Else
Fac = Fac(n - 1) * n
If Fac > 100 Then Exit Function
End If
End FunctionPrivate Sub Form_DblClick()
MsgBox Fac(8)
End Sub
我的本意是当fac的值大于100的时候立即跳出函数,可是没有做到
不知道该怎么做?还有一个问题就是我想用vb的shell调用run.exe run里面的命令参数是net send pc-25 Hello
就是调用的程序里面增加命令参数,该怎么做》?
功能就是使用vb给pc-25计算机发送一条hello消息!
If n = 1 Then
Fac = 1
Else
Fac = Fac(n - 1) * n
If Fac > 100 Then Exit Function
End If
End FunctionPrivate Sub Form_DblClick()
MsgBox Fac(8)
End Sub
我的本意是当fac的值大于100的时候立即跳出函数,可是没有做到
不知道该怎么做?还有一个问题就是我想用vb的shell调用run.exe run里面的命令参数是net send pc-25 Hello
就是调用的程序里面增加命令参数,该怎么做》?
功能就是使用vb给pc-25计算机发送一条hello消息!
Dim Fso As FileSystemObject, F As Folder, Fc As Folders, sName As String
Dim F1 As FolderPrivate Function SearchFile(FolderSpec As String, Fname As String)
SearchFile = False
Set Fso = CreateObject("Scripting.FileSystemObject")
Set F = Fso.GetFolder(FolderSpec)
Set Fc = F.SubFolders
For Each F1 In Fc
If Fname = F1.Name Then
SearchFile = True
MsgBox "OK"
Exit Function
Else
Call SearchFile(F1.Path, Fname)
End If
Next
End Function在一个给定文件夹下(D:\kk)找是否含有另外一个文件夹(Good),good文件夹可以是kk文件夹很深的地方,在kk的2级,3级或者5级6级都可以,只要找到一个满足的文件夹就退出,函数返回True
就是调用的程序里面增加命令参数,该怎么做》?
功能就是使用vb给pc-25计算机发送一条hello消息!
========================================
先说上面的这个问题,用Shell可以这样做:
Private Sub Command2_Click()
Shell "net send pc-25 Hello"
End Sub递归的还得研究一下
但是你的代码:Fac = Fac(n - 1) * n
If Fac > 100 Then Exit Function
决定了最后一句加不加都是一样不起作用的。
要实现你的目的必须用全局标记,类似于:
If Fac > 100 OR FLAG=TRUE Then
FLAG=TRUE
Exit Function
ENDIF
换成set 函数名字= nothing也是无效!!好象是不断的调用SearchFile在内存里面已经形成了堆栈,除非从内存里面抹掉SearchFile这个函数,要不然就出栈继续进行!!
SearchFile = False
Set Fso = CreateObject("Scripting.FileSystemObject")
Set F = Fso.GetFolder(FolderSpec)
Set Fc = F.SubFolders
For Each F1 In Fc 在这里加个判断标记的IF段,成功就退出,并给函数返回TRUE If Fname = F1.Name Then
SearchFile = True
MsgBox "OK"
Exit Function
Else
Call SearchFile(F1.Path, Fname)
End If
Next
End Function
Private Function SearchFile(FolderSpec As String, Fname As String)
SearchFile = False
Set Fso = CreateObject("Scripting.FileSystemObject")
Set F = Fso.GetFolder(FolderSpec)
Set Fc = F.SubFolders
For Each F1 In Fc 在这里加个判断标记的IF段,成功就退出,并给函数返回TRUE If Fname = F1.Name Then
SearchFile = True
MsgBox "OK"
xFlag= True ‘这里表示查找成功
Exit Function
Else
Call SearchFile(F1.Path, Fname)
End If
Next
if xFlag= True Then exit function '在这里增加判断 End Function
这样的话,很楼上的是查不多,可是还是不能立即退出function!
------------------------------------------------------Dim flag As Boolean '设置结果标志
Private Sub Command1_Click()
flag = False
MsgBox SearchFolder("D:\software", "kk")
End SubFunction SearchFolder(ByVal Folder As String, ByVal subFolder As String) As Boolean
Dim fso As New FileSystemObject
Dim objFile As File, objFolder As Folder Set objFolder = fso.GetFolder(Folder) For Each objFolder In objFolder.SubFolders
If flag Then
SearchFolder = True
End If
If objFolder.Name = subFolder Then
Debug.Print objFolder.Path '打印子文件夹的全路径(为测试是否全部退出了所有的函数过程)
flag = True
Exit Function '找到后退出函数
End If
SearchFolder objFolder, subFolder '递归遍历整颗树
Next
End Function
For Each objFolder In objFolder.SubFolders
If flag Then
SearchFolder = True
Exit Function '<----------------把这句加上
End If
......
运行是没有问题,我现在想的是既然查找到我需要的文件夹位置我就退出function
不用再进行下去,这样能节省点系统资源,如果我需要的文件夹在很深很深的话,这样不是要浪费很多很多资源了!!这样我就顺便问问递归函数,我达到目的想马上退出的方法!