vba - 从每个Strings元素数组中删除子字符串

时间:2015-07-28 12:01:32

标签: excel vba excel-vba

我将文件夹中的文件名存储到数组中。然后我尝试从文件名中删除字符串的“.xlsx”部分,并将它们打印到电子表格中。 我很难从每个数组元素中删除“.xlsx”子字符串。我被认为替换功能是最好的,但还没有成功。混淆区域由'HERE评论

表示
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

2 个答案:

答案 0 :(得分:5)

原因是你试图将作为字符串数组的变量arNames作为函数Replace的第一个参数传递,该函数应该是String(注意数组之间的差异)字符串和字符串)。

您需要替换这些代码行:

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

与那一个:

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

答案 1 :(得分: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
相关问题