【问题标题】:Excel VBA Program to Get Info From File NameExcel VBA 程序从文件名中获取信息
【发布时间】:2015-08-08 01:52:03
【问题描述】:

我创建了一个 Excel VBA 代码,其目的是从文件名中获取信息并将其导出到 excel 中。除了跳过第一个文件名之外,该代码可以正常工作。这是我第一次在 VBA 中编码,因此将不胜感激。提前致谢!

代码如下:

Sub Get_Model_File_Names()
    Dim xRow As Long
    Dim xDirect, xFname

    'DIRECTORY TO SELECT FOLDER FROM
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Please select a folder"
        .Show

        'LOCATES FILES
        If .SelectedItems.Count <> 0 Then
            xDirect = .SelectedItems(1) & "\"
            xFname = Dir(xDirect)

            'LOOPS THROUGH EACH FILE NAME IN FOLDER
            Do While xFname <> ""

                'EXTRACT INFORMATION FROM FILE NAME
                xFname = Left(Dir, 10)
                DrawingNumb = Left(xFname, 7)
                RevNumb = Mid(xFname, 10, 2)

                'INSERT INFO INTO EXCEL
                ActiveCell.Offset(xRow, 0) = DrawingNumb
                ActiveCell.Offset(xRow, 1) = RevNumb
                xRow = xRow + 1
             Loop

        End If
    End With
End Sub

【问题讨论】:

  • 我尝试将 .selecteditems (1) 更改为 (0) 并弄乱了 xRow = xRow +1 但出现了错误消息。

标签: excel vba


【解决方案1】:

移动xFname = Left(Dir, 10),使其位于ActiveCell.Offset(xRow, 1) = RevNumb之后

调用xFname = Left(Dir,10) 正在选择目录中的下一个文件。

xFname = Dir(xDirect) 在进入循环之前获取第一个文件。需要先处理那个。

我现在正在运行,没有任何错误:

Sub Get_Model_File_Names()
Dim xRow As Long
Dim xDirect, xFname

'DIRECTORY TO SELECT FOLDER FROM
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Please select a folder"
    .Show

    'LOCATES FILES
    If .SelectedItems.Count <> 0 Then
        xDirect = .SelectedItems(1) & "\"
        xFname = Left(Dir(xDirect), 10)

        'LOOPS THROUGH EACH FILE NAME IN FOLDER
        Do While xFname <> ""

            'EXTRACT INFORMATION FROM FILE NAME
            DrawingNumb = Left(xFname, 7)
            RevNumb = Mid(xFname, 10, 2)

            'INSERT INFO INTO EXCEL
            ActiveCell.Offset(xRow, 0) = DrawingNumb
            ActiveCell.Offset(xRow, 1) = RevNumb
            xFname = Left(Dir(), 10)
            xRow = xRow + 1
         Loop

    End If
End With

结束子

【讨论】:

  • 非常感谢!它可以工作,但现在第一个 RevNumb 没有出现。例如...... 9012472 jt 9012472 7 9012473 7 “jt”应该是一个数字
  • 现在您可以通过两种不同的方式获取 xFname。我不确定您的数据是什么样的,但试试这个:将 xFname = Dir(xDirect) 更改为 xFname = Left(Dir(xDirect), 10)
  • Dir 正在返回一个字符串。您可以使用 Left 和 Mid 函数来获得所需的内容。设置断点并在调试器中查看它也很有帮助。
  • 我尝试上传一张图片,以便更容易看到代码发生了什么,但我可以这样做......
  • xFname = Left(Dir(xDirect), 10) 正在获取目录中第一个文件名的左 10 个字符。我使用它是因为它类似于您在选择下一个文件名的循环中的xFname = Left(Dir,10)。也许左 10 不是你想要的。目录中的文件名是什么样的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多