2

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

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

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

4

3 回答 3

4

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
于 2012-09-17T01:06:26.750 回答
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
于 2012-10-08T08:17:27.230 回答
0

If DCount("Account_number", "Field_Match_Found") = 0 Then MsgBox ("No match was found") Else MsgBox ("Check Table Field_Match_Found for your output")

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

结束功能

于 2012-10-08T08:22:54.353 回答