访问:拆分文件名导入到多个列

时间:2017-05-26 23:12:30

标签: database forms ms-access access-vba

我很抱歉,如果这看起来像是一个双重帖子,但我似乎无法为我的项目找到解决方案。我在Access中创建一个简单的数据库。我有一个表单,允许用户根据他们命名的文件构建名称。他们使用组合框来进行选择。我们有一个命名协议,我试图更容易利用。 Image of my Form

我想创建一个子窗体来过滤我用VBA导入的现有文件名。我在子表单中需要的是可能存在的文件的名称和路径,以便用户可以在网络上找到它。我从下面的人那里得到了代码来收集文件名。代码很长,所以我没有添加它,但我可以,如果需要,但它工作得很好!

h1ttp://allenbrowne.com/ser-59alt.html

使用此代码,我现在可以在表中使用现有的文件名 Image of the table 到目前为止跟着我? 我认为这将是最困难的部分,但不是机会。现在我正在尝试将名称拆分为列,以便我可以通过组合框中的选择进行筛选。

Example name

12-CW-Base-Blind Corner-UH.rfa

column 1 = 12
column 2 = CW
Column 3 = Base
Column 4 = Blind Corner
Column 5 = UH

像这样的东西。 用户在Master Format Combobox中选择12。 子表格现在只显示以12开头的文件名。 用户在下一个Combobox中选择CW 子表格现在只显示开头有12-CW的文件名。 等。

根据我的研究,有几种方法可以做到这一点。

  1. 首先是在查询中直接添加Left,Mid,Right。这样做的好处是不必存储旧数据,而且接口更灵活。
  2. 其次是创建一个循环记录并将它们添加到表中的模块。
  3. 使用某种过滤器在选择时更新子表单。这甚至不会将数据存储在另一个表中。
  4. 我需要建议去哪个方向以及如何到达那里。如果有帮助,我可以分享我已经探索过的方法。他们中的大多数人都使用1和2.如果你已经读过这篇文章,那就谢谢你的时间了。

2 个答案:

答案 0 :(得分:1)

您可以创建一个小辅助函数:

Public Function FileNamePart(ByVal FileName As String, NameItem Integer) As String

    ' Strip extension, then pick part.
    FileNamePart = Split(Split(FileName, ".")(0), "-")(NameItem - 1)

End Function

然后创建一个查询:

Select 
    *, 
    FileNamePart([FName], 1) As Part1,
    FileNamePart([FName], 2) As Part2,
    FileNamePart([FName], 3) As Part3,
    FileNamePart([FName], 4) As Part4,
    FileNamePart([FName], 5) As Part5
From
    Files

然后你可以对此进行过滤。

答案 1 :(得分:0)

  1. 除非文件名的每个部分都有固定长度以及相同数量的部件,否则超过3个部件会非常困难

  2. 将搜索结果保存到另一个表格过度

  3. 查询中的动态过滤器参数:LIKE "*'" Forms!formname!tbxParameter "'*"会查找包含在文本框中输入值的所有记录,我认为渐进式过滤可以在VBA中编码,但我从未这样做过