Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 检查文件名是否包含字符串_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 检查文件名是否包含字符串

Vba 检查文件名是否包含字符串,vba,excel,excel-2010,Vba,Excel,Excel 2010,在我的项目中,我在excel表格的第一列有一个产品列表,我定期从网站下载产品图片,然后将它们存储在每个项目的不同名称文件夹中。下载过程结束后,我会删除不必要的图像文件 删除过程后,我想知道文件夹中每个产品还剩下多少个图像 示例: 第一列中的我的产品名称列表>>> 我的图像文件夹>>> 我想要的是每个产品文件夹中的图像数>>> 如果我使用excel公式将每个产品的图像数量写在第二列,对应的产品名称单元格旁边,我将很容易看到任何产品缺少图像。之后,我将报告具有零图像的产品列表 图像的所有名称都由

在我的项目中,我在excel表格的第一列有一个产品列表,我定期从网站下载产品图片,然后将它们存储在每个项目的不同名称文件夹中。下载过程结束后,我会删除不必要的图像文件

删除过程后,我想知道文件夹中每个产品还剩下多少个图像

示例:

第一列中的我的产品名称列表>>>

我的图像文件夹>>>

我想要的是每个产品文件夹中的图像数>>>

如果我使用excel公式将每个产品的图像数量写在第二列,对应的产品名称单元格旁边,我将很容易看到任何产品缺少图像。之后,我将报告具有零图像的产品列表

图像的所有名称都由两部分组成:productname和*,*是一个数字。因为产品名称与图像文件的名称不同,所以“图像数”列中的值必须是名称包含产品名称的图像数

这是否可行?我有VBA的基本知识

这里是我尝试使用@Miguel_-Ryu方法时得到的结果

我写的函数>>>

我的文件夹>>>

我得到的错误>>>


模块>>

尝试此函数,它返回包含strofind的文件计数

你可以这样称呼它: fileCount=loopthroughfilescontc:\yourPath\yourFiles\,yourString

编辑: 以宏的形式运行上述操作

Sub countFiles()

    Set last = Range("A:A").Find("*", Cells(1, 1), searchdirection:=xlPrevious)

    For n = 2 To last.Row
        Cells(n, 2).Value = loopThroughFilesCount("C:\Users\yalinbah\Desktop\boyner\gör‌​‌​seller2\Tekstil\", Cells(n, 1).Value)
    Next

End Sub

Function loopThroughFilesCount(dirFolder As String, strToFind As String) As Double

    Dim filePath As Variant
    filePath = Dir(dirFolder)
    While (filePath <> "")
        If InStr(filePath, strToFind) > 0 Then
            filesCount = filesCount + 1
        End If
        filePath = Dir
    Wend

    loopThroughFilesCount = filesCount

End Function

“productimages”是什么类型的文件?您有多少此类文件,它们是如何分发的?您是如何达到预期效果的?文件包含其他文件意味着什么?你是说productimages是一个文件夹吗?这些文件名在哪里?它们是否已经在电子表格中的某个位置,或者是否需要VBA来遍历该文件夹?这个问题不清楚。@johncleman为我糟糕的描述道歉。我指的是文件夹中的图像文件。我编辑了描述。@Jochen我编辑了描述。@BahadırYalın,你试过我的答案了吗?它应该能满足你的需要。你需要帮助实现它吗?我把截图放在描述上,你能看一下吗。我写错函数了吗。我希望写入我的文件夹路径并选择cell以插入stringA2单元格,然后函数将显示单元格A2中包含字符串的图像文件的数量。之后,我将复制并粘贴该函数到列上的单元格B@BahadırYalın,我编辑了作为宏运行的代码,尝试一下,如果你有任何错误或什么的,告诉我。非常感谢,它可以工作,我只是理解代码。它读取第一列并在第二列写入数字。如果我增强代码,是否可以使宏在窗口上询问单元格和文件夹路径,以便在产品名称未放在第一列时运行宏。假设我的列表在B1到B5之间,我不希望宏在单元格B5之后运行,并且数字放在C1到C5之间。是的,你需要更改Sub,你可以做一些类似InputBox或自定义表单的事情来获得范围。然后将For n=2的长度调整为*您的最后一行*,并调整单元格上的列*您选择的列*值。如果你想问另一个问题,我会帮你,否则别人会抢先问:谢谢你,我自己试试。我想,我必须为实现提出新的问题,就像我之前的评论一样。你注意到为什么作为一个函数,我不能在一个单元格上运行这个代码了吗?
Sub countFiles()

    Set last = Range("A:A").Find("*", Cells(1, 1), searchdirection:=xlPrevious)

    For n = 2 To last.Row
        Cells(n, 2).Value = loopThroughFilesCount("C:\Users\yalinbah\Desktop\boyner\gör‌​‌​seller2\Tekstil\", Cells(n, 1).Value)
    Next

End Sub

Function loopThroughFilesCount(dirFolder As String, strToFind As String) As Double

    Dim filePath As Variant
    filePath = Dir(dirFolder)
    While (filePath <> "")
        If InStr(filePath, strToFind) > 0 Then
            filesCount = filesCount + 1
        End If
        filePath = Dir
    Wend

    loopThroughFilesCount = filesCount

End Function