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消息!

解决方案 »

  1.   

    原本是要这样的.........
    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
      

  2.   

    还有一个问题就是我想用vb的shell调用run.exe run里面的命令参数是net send pc-25 Hello
    就是调用的程序里面增加命令参数,该怎么做》?
    功能就是使用vb给pc-25计算机发送一条hello消息!
    ========================================
    先说上面的这个问题,用Shell可以这样做:
    Private Sub Command2_Click()
        Shell "net send pc-25 Hello"
    End Sub递归的还得研究一下
      

  3.   

    我来说帝归的问题:我的本意是当fac的值大于100的时候立即跳出函数,可是没有做到这是要求。
    但是你的代码:Fac = Fac(n - 1) * n
          If Fac > 100 Then Exit Function
    决定了最后一句加不加都是一样不起作用的。
    要实现你的目的必须用全局标记,类似于:
    If Fac > 100 OR FLAG=TRUE Then
     FLAG=TRUE
     Exit Function
    ENDIF
      

  4.   

    递归看第2楼,上面有肯定回执行MsgBox "OK"然后在执行Exit Function  再后面还是不退出function,即便是把Exit Function
    换成set 函数名字= nothing也是无效!!好象是不断的调用SearchFile在内存里面已经形成了堆栈,除非从内存里面抹掉SearchFile这个函数,要不然就出栈继续进行!!
      

  5.   

    查目录的那个:你只是退出了其中一层,问题也是没设成功标记的原因,楼主看来对递归如何退出不很熟练。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"
             Exit Function
          Else
             Call SearchFile(F1.Path, Fname)
          End If
         
      Next
      End Function
      

  6.   

    Dim xFlag As Boolean
    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!
      

  7.   

    在一个给定文件夹下(D:\kk)找是否含有另外一个文件夹(Good),good文件夹可以是kk文件夹很深的地方,在kk的2级,3级或者5级6级都可以,只要找到一个满足的文件夹就退出,函数返回True
    ------------------------------------------------------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
      

  8.   

    不好意思,少写了一句:      ......
          For Each objFolder In objFolder.SubFolders
        
            If flag Then
                SearchFolder = True
                Exit Function  '<----------------把这句加上
            End If
          ......
      

  9.   

    faysky2() 还是没有立即退出!
       运行是没有问题,我现在想的是既然查找到我需要的文件夹位置我就退出function
       不用再进行下去,这样能节省点系统资源,如果我需要的文件夹在很深很深的话,这样不是要浪费很多很多资源了!!这样我就顺便问问递归函数,我达到目的想马上退出的方法!