【问题标题】:VBA to Trim all Cells in an Access TableVBA修剪访问表中的所有单元格
【发布时间】:2012-09-09 05:49:46
【问题描述】:

我在面向对象编程方面相对有经验,但这是我第一次在 Office 中使用 VBA 工作,我完全被语法难住了。在过去的一个小时左右,我一直在做一些搜索和处理它,但实际上很难获得一个成功运行并满足我需要的宏。

我正在尝试遍历 Access 表中的每个单元格并将 Trim 函数应用于该单元格的内容,作为奖励,我想删除字符串中的所有额外空格(如果有)。 IE。 " Trim this__string " 将简单地变成"Trim this string" (我用下划线表示单个的多个空格,因为 StackOverflow 不想显示我的多个空格)。

任何做这样的事情的代码示例,或者至少让我接近然后我可以修改它的任何代码示例,将不胜感激。谢谢!

【问题讨论】:

    标签: vba ms-access loops trim


    【解决方案1】:

    如果 DCount("Account_number", "Field_Match_Found") = 0 那么 MsgBox ("未找到匹配项") 别的 MsgBox("检查表 Field_Match_Found 的输出")

    ''''''''''making textbox blank for next time
    Text1.Value = ""
    

    结束函数

    【讨论】:

      【解决方案2】:

      选项比较数据库

      Private Sub Command3_Click()
      Call findField(Text1.Value)
      End Sub
      
      
      Public Function findField(p_myFieldName)
      Dim db As Database, _
          tb As TableDef, _
          fd As Field
      
       '''''''''Clearing the contents of the table
       DoCmd.RunSQL "delete * from Field_Match_Found"
      
      Set db = CurrentDb
      For Each tb In db.TableDefs
          For Each fd In tb.Fields
              If fd.Name = p_myFieldName Then
      
                  strsql = "INSERT INTO Field_Match_Found Values (""" & tb.Name & """, """ & fd.Name & """)"
      
                  DoCmd.RunSQL strsql
      
              End If
          Next fd
      Next tb
      Set fd = Nothing
      Set tb = Nothing
      Set db = Nothing
      

      【讨论】:

        【解决方案3】:

        您可以在查询中使用Trim() 函数删除前导和尾随空格。

        UPDATE YourTable
        SET text_field = Trim(text_field);
        

        如果您将在 Access 会话中执行此操作,则可以使用 Replace() 将两个空格的序列替换为一个空格。

        UPDATE YourTable
        SET text_field = Replace(text_field, '  ', ' ');
        

        但是,您可能需要多次运行 Replace() 查询才能将所有连续的空格字符减少到一个。

        您还可以使用用户定义的函数进行基于正则表达式的替换。不过,我不知道这是否值得。而且用户定义的函数也只能在 Access 应用程序会话中使用。

        我忽略了“表格中的每个单元格”方面。这使得这更具挑战性,我认为您无法使用标准宏或查询来解决它。但是,您可以使用 VBA 代码检查 TableDef,并遍历其字段...然后在数据类型为文本或备忘录的任何字段上调用您的 Trim 和/或 Replace 操作。

        这是一个粗略的代码大纲,用于识别给定表格的哪些字段是文本类型。

        Public Sub FindTextFields(ByVal WhichTable As String)
            Dim db As DAO.Database
            Dim tdf As DAO.TableDef
            Dim fld As DAO.Field
            Set db = CurrentDb
            Set tdf = db.TableDefs(WhichTable)
            For Each fld In tdf.Fields
                If fld.Type = dbText Or fld.Type = dbMemo Then
                    Debug.Print "Do something with " & fld.Name
                End If
            Next
            Set fld = Nothing
            Set tdf = Nothing
            Set db = Nothing
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-20
          • 1970-01-01
          相关资源
          最近更新 更多