2017-07-26 5 views
0

Ich habe einen VBA-Code, der eine CSV-Zeichenfolge suchen und Carriage Returns hinzufügen soll, wo sie vorhanden sein sollten. Ich habe es in zwei separate Funktionen aufgeteilt - eine, um die Zeichenfolge zu suchen und den Index zu setzen, wo die CRs in ein Array gehen sollen, und eine zweite Funktion, um die CRs tatsächlich hinzuzufügen.VBA-Funktion gibt keinen Wert zurück

Das Problem, das ich renne, ist, dass der Wert im unmittelbaren Fenster/im Überwachungsfenster für die Funktionen innerhalb der Funktion selbst korrekt ist, aber er weist der Ergebnisvariablen eine leere Zeichenfolge zu.

'*****************Import CSV********************** 
'Took this straight off the internet because it was reading Jet.com files as one single line 
' 
Sub ImportCSVFile(filepath As String) 

    ..... 
    line = SearchString(line, "SALE") 
    ..... 

End Sub 

'****************Search String*************************** 
    'This is search the string for something - It will then call a function to insert carriage returns 

Function SearchString(source As String, target As String) As String 

Dim i As Integer 
Dim k As Integer 
Dim myArray() As Variant 

Dim resultString As String 

Do 
    i = i + 1 
    If Mid(source, i, Len(target)) = target Then 
     ReDim Preserve myArray(k) 
     myArray(k) = i 
     k = k + 1 
    End If 
DoEvents 
Loop Until i = Len(source) 

resultString = addCarriageReturns(source, myArray) 'resultString here is assigned a blank string 
SearchString = resultString 

End Function 

'***************Add Carraige Returns************************** 
'Cycle through the indices held in the array and place carriage returns into the string 


Function addCarriageReturns(source As String, myArray As Variant) As String 

Dim i As Integer 
Dim resultString As String 

resultString = source 

For i = 0 To UBound(myArray, 1) 
    resultString = Left(resultString, myArray(i) + i) & Chr(13) & Right(resultString, Len(resultString) - myArray(i) + i) 
Next i 

addCarraigeReturns = resultString 'The value of addCarriageReturn is correct in the immediate window here 

End Function 

In the function the value is not blank ...but when it passes it back, it says the value is blank

+1

Prüfen Sie die Rechtschreibung: addCarriageReturns vs addCarraigeReturns –

+1

Schalten Sie Option Explicit –

+0

@GordonBell die Schreibweise es war. Vielen Dank. – BobtimusPrime

Antwort

1

ich nur neugierig bin, warum du so separate Funktionen wollen?

Können Sie nur verwenden:

line = Replace(line, "SALE", "SALE" & Chr(13)) 
+0

Weil ich anscheinend ein Masochist bin und Dinge auf die härtere Art und Weise tun. :) Ich habe vergessen, dass Ersetzen ist nicht destruktiv für den Rest der Zeichenfolge, sondern betrifft nur den Teil, den Sie angeben. – BobtimusPrime

+0

Keine Sorge, passiert uns allen. :) –

Verwandte Themen