1

外部企業から毎月データを受け取り、フィールド名を連番に変更する必要があります。example contract 11 15 17 to 1 2 3. 次のコードを使用しようとしていますが、「fld.Name = (n) + 1」でフィールドを複数回定義できないというエラーが表示されます。どうすればこれを修正できますか?

Function ChangeFieldName()

Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim fld As DAO.Field
Dim n As Integer

Set db = CurrentDb
Set tbl = db.TableDefs("tdf1")

On Error Resume Next

n = 0
For Each fld In tbl.Fields
    fld.Name = (n) + 1
Next fld

Set fld = Nothing
Set tbl = Nothing
Set db = Nothing

End Function
4

1 に答える 1

1

このコードは、各フィールドの名前を に変更しようとしますn + 1が、nインクリメントされないため、実際にはすべてのフィールドの名前を に変更しようとし1ます。次の変更は、あなたが望むことをするかもしれません。

n = 1
For Each fld In tbl.Fields
    fld.Name = n
    n = n + 1
Next fld

ただし、このアプローチには他にも考慮すべき問題がいくつかあります。はFor Each、 に基づいてフィールドをループしますfld.OrdinalPosition。番号付きフィールド名が期待どおりの順序で定義されていない場合、問題が発生します。たとえば、これらのフィールドのOrdinalPostion順序は次のとおりです。15; 2. その場合、11 は 1 に名前変更されますが、15 を 2 に名前変更しようとすると、コードはエラーをスローします。

また、そのコードはすべてのフィールドの名前を数値に変更しようとします。テーブルに番号付きのフィールド名しか含まれていない場合は、問題にはなりません。ただし、保持したい他のフィールド名がテーブルに含まれている場合は、さらに作業が必要になります。

マイナーポイントは、fld.Nameテキストタイプです。フィールドの名前を数値に変更しようとすると、Access は実際には数値に相当する文字列を使用します。それは問題ないかもしれませんが、数値を自分で明示的に文字列にキャストすることをお勧めします。

fld.Name = CStr(n)

最後に、これを再考してください...

On Error Resume Next

これにより、すべてのエラーを黙って無視するように Access に指示されます。それを取り除き、代わりに適切なエラーハンドラーコードブロックを追加する必要があると思います。

于 2013-03-09T18:10:49.247 に答える