【问题标题】:Access - Split Field by Character访问 - 按字符拆分字段
【发布时间】:2016-06-07 22:50:15
【问题描述】:

我有一个当前只有 1 个字段的访问表,但它应该是 5 个单独的字段。该字段是文本,应在每个“;”处拆分。分号之间的每个部分可以是不同的长度。

我目前正在使用宏创建此表,因此能够通过宏添加此解决方案会很棒。但如果这是唯一的选择,我愿意在查询中使用函数。

示例: 现在: F1 00584698878941;HG1D100037;HG-G8;HG1D100037;HG-45

应该是: F1
00584698878941

F2 HG1D100037

F3 HG-G8

F4 HG1D100037

F5 HG-45

【问题讨论】:

    标签: vba ms-access macros


    【解决方案1】:

    您可以通过更新查询来执行此操作 - 但这意味着很多函数调用

    这里有一些适合你的代码:

    PREP:确保您的表格有 F1、F2、F3、F4、F5 字段

    使用“Ctrl-G”打开VB编辑器

    插入模块

    复制/粘贴代码

    Public Sub LoadTable()
    
        Const YOUR_TABLE_NAME   As String = "Table2"
        Const SQL_UPDATE_DATA   As String = "SELECT * FROM [" & YOUR_TABLE_NAME & "] WHERE F2 Is Null"
    
        Dim rs          As DAO.Recordset
        Dim strF1Data   As String
        Dim varData     As Variant
    
        Set rs = CurrentDb.OpenRecordset(SQL_UPDATE_DATA)
        With rs
            Do Until .EOF
                strF1Data = !F1
                varData = Split(strF1Data, ";")
                If UBound(varData) = 4 Then
                    .Edit
                    !F1 = varData(0)
                    !F2 = varData(1)
                    !F3 = varData(2)
                    !F4 = varData(3)
                    !F5 = varData(4)
                    .Update
                End If
                .MoveNext
            Loop
            .Close
        End With
    
        Set rs = Nothing
    End Sub
    

    PREP:修改 YOUR_TABLE_NAME 常量以匹配您的表名

    按 F5 运行它

    选择一本好的 VBA 书籍 - 你可以做的还有很多

    【讨论】:

    • 感谢 dbmitch 的快速响应。代码似乎挂了:
    • 你要说完那句话吗?它是否停在带有错误消息的行上?
    • 感谢 dbmitch 的快速响应。代码似乎挂了: Set rs = CurrentDb.OpenRecordset(SQL_UPDATE_DATA) 我假设源于: Const SQL_UPDATE_DATA As String = "SELECT * FROM [" & YOUR_TABLE_NAME & " WHERE F2 Is Null" 我更新了 "YOUR_TABLE _NAME " 与 "Compare_Files" 并在表中添加了另外 4 个字段(F2、F3、F4、F5)。另外,你对一本好的 VBA 书有什么建议?到目前为止,我一直在使用 youtube 和论坛来学习并在遇到困难时获取我需要的东西。
    • 对不起,我按回车键尝试空格...它似乎没有保留空格
    • 很好 - 我更新了我的代码 - 在 CONST 表达式中的“WHERE”之前添加一个右方括号,使其看起来像Const SQL_UPDATE_DATA As String = "SELECT * FROM [" & YOUR_TABLE_NAME & "] WHERE F2 Is Null"
    【解决方案2】:

    致 dbmitch:

    代码:

    'Public Sub LoadTable()

    Const Compare_Files   As String = "Table2"
    Const SQL_UPDATE_DATA As String = "SELECT * FROM [" & Compare_Files & "] WHERE F2 Is Null"
    
    
    Dim rs          As DAO.Recordset
    Dim strF1Data   As String
    Dim varData     As Variant
    
    Set rs = CurrentDb.OpenRecordset(SQL_UPDATE_DATA)
    With rs
        Do Until .EOF
            strF1Data = !F1
            varData = Split(strF1Data, ";")
            If UBound(varData) = 4 Then
                .Edit
                !F1 = varData(0)
                !F2 = varData(1)
                !F3 = varData(2)
                !F4 = varData(3)
                !F5 = varData(4)
                .Update
            End If
            .MoveNext
        Loop
        .Close
    End With
    
    Set rs = Nothing
    

    结束子`

    Table screenshot

    【讨论】:

    • 你应该用你的表名替换“Table1” - 而不是变量名
    • Const YOUR_TABLE_NAME As String = "Compare_Files" Const SQL_UPDATE_DATA As String = "SELECT * FROM [" & YOUR_TABLE_NAME & "] WHERE F2 Is Null"
    • 没问题 - 我应该用引用的值交换我的变量名 - 这会更有意义
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多