我对面向对象编程比较熟悉,但这是我第一次使用VBA在Office中工作,而且我完全被语法困扰了。在过去一小时左右的时间里,我一直在做一些搜索和搞乱,但是实际上遇到了一个成功运行的宏并且做了我需要的事情。
我正在尝试遍历Access表中的每个单元格并将Trim函数应用于该单元格的内容,作为奖励,我想删除字符串中的所有额外空格(如果有的话)。即" Trim this__string "
只会变成"Trim this string"
(我在那里使用下划线来表示单个,多个空格,因为StackOverflow不想显示我的多个空格)。
任何做这样的事情的代码示例,或者至少让我接近的东西,然后我可以修补它,将不胜感激。谢谢!
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
如果DCount(“Account_number”,“Field_Match_Found”)= 0那么 MsgBox(“找不到匹配项”) 其他 MsgBox(“检查表Field_Match_Found为您的输出”)
''''''''''making textbox blank for next time
Text1.Value = ""
结束功能