2015-07-28 230 views
2

我将文件名从文件夹存储到数组中。然后,我试图从文件名中删除字符串的“.xlsx”部分,并将它们打印到电子表格中。 我很难从每个数组元素中删除“.xlsx”子字符串。我被引导认为Replace函数是最好的,但还没有成功。混乱的区域由'HERE注释指示vba - 从每个字符串数组中删除子字符串

Sub Example() 

    Dim FName As String 
    'Array to store filenames. 
    Dim arNames() As String 
    Dim myCount As Integer 
    Dim i As Integer 

    FName = Dir("G:\ExampleFolder\*.xls*") 
    ' Run until there are no more filenames. 
    Do Until FName = "" 
     'Increment 
     myCount = myCount + 1 
     'Actively store filenames into an array. 
     ReDim Preserve arNames(1 To myCount) 
     arNames(myCount) = FName 
     FName = Dir 
    Loop 

    'Print array details to sheet. 
    For i = LBound(arNames) To UBound(arNames) 
    Next i 

    'Create a random excel sheet to print the file names. 
    Set o = CreateObject("excel.application") 
    ' Activate new excel spreadsheet. 
    o.Visible = True 
    o.Workbooks.Add 
    'Edit string in array. 

    'HERE 
    Dim LResult As String 
    'LResult = Replace(arNames, ".xlsx", "") 

    o.sheets("sheet1").Range("A1:" & ConvertToLetter(i) & "1").Value = arNames 

End Sub 



    Function ConvertToLetter(iCol As Integer) As String 
    Dim iAlpha As Integer 
    Dim iRemainder As Integer 
    iAlpha = Int(iCol/27) 
    iRemainder = iCol - (iAlpha * 26) 
    If iAlpha > 0 Then 
     ConvertToLetter = Chr(iAlpha + 64) 
    End If 
    If iRemainder > 0 Then 
     ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) 
    End If 
End Function 

回答

5

的原因是,你正在试图通过可变arNames这是一个字符串数组,应该是String功能Replace的第一参数(注意之间的差字符串和字符串数组)。

您需要更换这些代码行:与一个

Dim LResult As String 
'LResult = Replace(arNames, ".xlsx", "") 

For i = LBound(arNames) To UBound(arNames) 
    arNames(i) = Replace(arNames(i), ".xlsx", "") 
Next i 
+0

完美,非常感谢你! – AMorton1989

0

Next i是放错了地方?;我想,你希望从A1水平文本,以取代'Print array details to sheet.下的一切:

'// create an instance once; 
Set o = CreateObject("excel.application") 
o.Visible = True 
o.Workbooks.Add 

'// get the startcell 
Dim startCell As Range 
Set startCell = o.Sheets("sheet1").Range("A1") 

'// loop removing the extension and writing 
For i = LBound(arNames) To UBound(arNames) 
    startCell.Offset(0, i - 1).Value = Mid$(arNames(i), 1, InStrRev(arNames(i), ".")) 
Next 
相关问题