大家好!我的问题是:
我需要将第一个子程序中生成的文件在第二个子程序中打开,并与第二个子程序中新打开的另一个文件合并,但在执行第二个子程序时,VB总是提示第一个子程序中生成的文件已经打开!但我确实在第一个子程序末尾已经将它关掉了!
谢谢!

解决方案 »

  1.   


    谢谢你,caofusheng !我知道,但是我是一个主程序中的两个子程序!所以我现在只能执行完第一个子程序,退出主程序,再运行主程序,执行第二个子程序。这样就可以了。
    我想怎么处理呢?谢谢!
      

  2.   

    第一个子程序写完文件后应该关闭,也就是Close和Open语句必须成对。
      

  3.   


    我是成对的!参考下面程序。还有我发现我在运行程序时,生成的文件小,这时候的文件大小不对,当我退出程序,就对了。Private Sub Assign_Value_To_Array()    Dim intClsLineNum As Double
        Dim InputClsF As Double
        Dim strClsTemp As String
        Dim InputClsName As String
        
        Dim TempFileName As String
        Dim TempF As Integer
        
        Dim strtemp As String
        Dim strNewTemp As String
        Dim R As Double
        Dim Feedrate As String
        
        strFeedFile = ""
        Cls_Line_Number
        intClsLineNum = 0
        InputClsF = FreeFile
        InputClsName = TxtOpenClsF.Text
        TempFileName = Replace(InputClsName, ".cls", "_Opt.cls")
        strFeedFile = TempFileName
        
        If InputClsName = "" Then Exit Sub
        Open InputClsName For Input As #InputClsF
        
        TempF = FreeFile
        Open TempFileName For Output As #TempF
        
        While Not EOF(InputClsF)
        
            Line Input #InputClsF, strtemp
            intClsLineNum = intClsLineNum + 1            If intClsLineNum < intClsFirst Then
                    GoTo EXTIF
                ElseIf intClsLineNum = intClsFirst Then
                    Call First_Point_CoordianteXYZ(strtemp)
                    'MsgBox "X:" & PointFirst(1) & "Y:" & PointFirst(2) & "Z:" & PointFirst(3)
                ElseIf intClsLineNum = intClsFirst + 1 Then
                    Call Second_Point_CoordianteXYZ(strtemp)
                    'MsgBox "X:" & PointSecond(1) & "Y:" & PointSecond(2) & "Z:" & PointSecond(3)
                ElseIf intClsLineNum = intClsFirst + 2 Then
                    Call Third_Point_CoordianteXYZ(strtemp)
                    'MsgBox "X:" & PointThird(1) & "Y:" & PointThird(2) & "Z:" & PointThird(3)
                ElseIf intClsLineNum > intClsFirst + 2 And intClsLineNum < intClsEnd + 1 Then
                    PointFirst(1) = PointSecond(1)
                    PointFirst(2) = PointSecond(2)
                    PointFirst(3) = PointSecond(3)
                    
                    PointSecond(1) = PointThird(1)
                    PointSecond(2) = PointThird(2)
                    PointSecond(3) = PointThird(3)
                        
                    Call strLine_To_Point_CoordianteXYZ(strtemp)
                    
    '                MsgBox "First Line"
    '                MsgBox "X:" & PointFirst(1) & "Y:" & PointFirst(2) & "Z:" & PointFirst(3)
    '                MsgBox "Second Line"
    '                MsgBox "X:" & PointSecond(1) & "Y:" & PointSecond(2) & "Z:" & PointSecond(3)
    '                MsgBox "Third Line"
    '                MsgBox "X:" & PointThird(1) & "Y:" & PointThird(2) & "Z:" & PointThird(3)                R = Calculate_R(PointFirst(), PointSecond(), PointThird())
                    
                    If R = 0 Then
                        Feedrate = ""
                        strNewTemp = ""
                    ElseIf R > Val(TxtR1.Text) * Val(TxtRFactor.Text) Then
                        Feedrate = TxtFMax.Text
                        strNewTemp = "F" & Feedrate
                        Print #TempF, strNewTemp
                    ElseIf 0 < R <= Val(TxtR1.Text) * Val(TxtRFactor.Text) Then
                        Feedrate = TxtFMin.Text
                        strNewTemp = "F" & Feedrate
                        Print #TempF, strNewTemp
                    End If
                    
    '                strNewTemp = strtemp & Chr(32) & "F" & Feedrate & Str(R)
    '                strNewTemp = "F" & Feedrate
    '                Print #TempF, strNewTemp
                    
                Else
                    Exit Sub
                End If
            
    EXTIF:
        Wend
        
        Close #TempF
        Close #InputClsF
        
    End Sub
      

  4.   

    过程中有Exit Sub,不可能成对的。
      

  5.   

    谢谢!Tiger_Zhao !
    我已经按照你的发现修改好了程序,谢谢!
      

  6.   

    你的代码结构性差,如3楼5楼指出:
    OPENCLOSE
    必须成对,文件打开后操作好既关闭,再执行其它与文件操作无关的代码。
    同样
    IF   THEN
    ELSEIF THEN

    ENDIF
    各语句不能分散。GoTo语句建议不要使用,会破坏程序的结构。