2

私はオブジェクト指向プログラミングの経験が比較的豊富ですが、OfficeでVBAを使用するのはこれが初めてであり、構文に完全に困惑しています。私は過去1時間ほど検索と操作を行ってきましたが、実際に正常に実行され、必要な処理を実行するマクロを取得するのに問題がありました。

Accessテーブルのすべてのセルをループして、そのセルのコンテンツにTrim関数を適用しようとしています。ボーナスとして、文字列内の余分なスペースをすべて削除したいと思います(存在する場合)。" Trim this__string "つまり、単純になります( StackOverflow"Trim this string"は複数のスペースを表示したくないため、アンダースコアを使用して個々の複数のスペースを表しました)。

このようなことを行うコード例、または少なくとも私を近づけてそれをいじくり回すことができる何かのコード例をいただければ幸いです。ありがとう!

4

3 に答える 3

4

Trim()クエリ内の関数を使用して、先頭と末尾のスペースを削除できます。

UPDATE YourTable
SET text_field = Trim(text_field);

Accessセッション内からこれを行う場合はReplace()、2つのスペースのシーケンスを1つのスペースに置き換えるために使用できます。

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

Replace()ただし、連続するすべてのスペース文字を1つだけにするために、そのクエリを複数回実行する必要がある場合があります。

また、ユーザー定義関数を使用して正規表現ベースの置換を行うこともできます。しかし、それが努力する価値があるかどうかはわかりません。また、ユーザー定義関数は、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( "一致が見つかりませんでした")Else MsgBox( "出力のテーブルField_Match_Foundを確認してください")

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

終了機能

于 2012-10-08T08:22:54.353 に答える