just10minutes
just10minutes

Reputation: 611

Excel VBA Macro jumps out of the loop , not getting why

Can someone please confirm why my macro jumps out of loop. I am not getting why its happening.

My Input looks like this https://i.sstatic.net/H3KXD.jpg enter image description here

What I am trying is split the text and write to textfile from column D2 onwards using while loop, First file writes properly but when it starts writing second file either for loop or if condition breaks out and macro comes to line where strDir starts

Sub SplitTextAndSave()
'Macro to split text and write to text file
'Full name of File name will be Single quote + Prefix from B2 + ( + filename from C2 + )'
'Application.DisplayAlerts = False
Dim Val, splitVal As String
Dim reqNumTxt, totLn, reqNum, remChr, i As Integer
Dim wb As Workbook
Dim strFile, fileNm, strDir As String

Set Sheet = Excel.ActiveSheet
' Select where to place the files
Dim obj As Object
    Dim path As String
    Set obj = CreateObject("Shell.Application").browseforfolder(0, "Please Select Folder where TWS scripts will be created", 0)
On Error GoTo error_trap:
    path = obj.self.path & "\"
error_trap:

'this is where it starts again when the loop breaks
strDir = path
filepre = Sheet.Cells(2, 2).Value
reqNum = Sheet.Cells(3, 2).Value
reqNumTxt = 0

Sheet.Cells(2, 4).Activate
Do While ActiveCell.Value <> ""
    Set nextcell = ActiveCell.Offset(1, 0)

    fileNm = ActiveCell.Offset(0, -1).Value
    FileFullNm = strDir & "'" & filepre & "(" & fileNm & ")'"
    Open FileFullNm For Output As #1


    Val = ActiveCell.Value
    totLn = Int(Len(Val) / reqNum)
    remChr = Len(Val) Mod reqNum
    If Len(Val) <= reqNum Then
         Print #1, Val
         Close #1
    Else
        For i = 1 To totLn
            'I observed sometimes loop breaks here
            splitVal = Left(Right(Val, Len(Val) - reqNumTxt), reqNum)
            Print #1, splitVal
            reqNumTxt = reqNumTxt + reqNum
        Next i

            If remChr = 0 Then
                Close #1
            Else
                'most of the time loop break here when writing second file
                splitVal = Left(Right(Val, Len(Val) - reqNumTxt), reqNum)
                Print #1, splitVal
                Close #1
            End If
    End If
    nextcell.Select
        Set currentcell = nextcell

         'Next
Loop
MsgBox "Done"
'Application.DisplayAlerts = True
End Sub

Upvotes: 0

Views: 227

Answers (1)

JohnGreen
JohnGreen

Reputation: 26

I added 2 lines to your code and it runs without error. I set splitVal to null and reqNumTxt to zero.

Val = ActiveCell.Value
totLn = Int(Len(Val) / reqNum)
remChr = Len(Val) Mod reqNum
**splitVal = ""**
If Len(Val) <= reqNum Then
     Print #1, Val
     Close #1
Else
    For i = 1 To totLn
        'I observed sometimes loop breaks here
        splitVal = Left(Right(Val, Len(Val) - reqNumTxt), reqNum)
        Print #1, splitVal
        reqNumTxt = reqNumTxt + reqNum
    Next i

        If remChr = 0 Then
            Close #1
        Else
            'most of the time loop break here when writing second file
            splitVal = Left(Right(Val, Len(Val) - reqNumTxt), reqNum)
            Print #1, splitVal
            Close #1
        End If
End If
nextcell.Select
    Set currentcell = nextcell

**reqNumTxt = 0**

Loop

Upvotes: 1

Related Questions