0

多くのテキスト ボックスを必要とする vb2010 でアプリケーションを作成しています。各テキスト ボックスの名前を一意の識別子に変更するには、非常に時間がかかります。たとえば、TextBox1 の名前を txtName1 に変更するのは、多数ある場合、時間のかかるプロセスです。

これをスピードアップして、一意の ID 番号を持つユーザー フレンドリーな名前を付ける方法はありますか? それとも、それぞれを耕すだけの問題ですか?

4

2 に答える 2

3

コントロールには常に意味のある名前を割り当てるようにしてください。このアプローチに従うと、コンピューターはそれを支援できないことがわかるため、手動で行う必要があります。TextBox1あなたの場合、を識別する必要があることをどのように知っていnameますか?

txtName1は、コントロールの名前としても適切ではありません。なぜなら、a)その名前が開発者に伝わらず、b)なにが1? 名前の最初の部分、つまりファーストネームを意味しますか? それともリストの最初の人の名前?コントロールの名前をできるだけ短くする、データベースのフィールド名と一致させる、または別の理由など、他の考慮事項がない限り、適切な名前は (a) と b) のそれぞれのtxtCustomerFirstNameようにtxtFirstCustomerFullNameなります)

出典:私は、1000 以上のテキストボックスを備えた保険管理用のエンタープライズ クラスのアプリケーションを開発しました。現時点では、問題が発生した場合の主なサポート窓口です。私の経験から、コントロールの名前付けは、ほとんどの時間を費やす場所ではありません。

補足として、デザイナーを使用してコントロールの名前を手動で変更すると、コード内のすべての使用箇所の名前も変更されます。必要な作業を大幅に削減します。

于 2013-01-19T17:34:03.300 に答える
2

試してみてください:私は今PCの前にいるので編集します;)上記の答えが何を言っているかを考えるのは確かに良いことです。とにかく、ここに知っておくべきことがあります。テキストボックスやその他のコントロールをExcelシートに追加するとEmbedded、画像のようなタイプになります。

ここに画像の説明を入力してください

通常、コントロールがテキストボックスであるかどうかを確認する場合は、17を使用できます。これは、テキストボックスのmso形状タイプの列挙型であるmsoTextBoxを表します。ただし、これらの埋め込まれたフォームタイプコントロール(フォーム2.0)はシェイプであり、各タイプを異なる値で区別しませんが、共通の12msoMixedShapesを表すタイプ列挙型です。次の2番目のコードは、に対して機能しますが、Excelシートの形状(テキストボックス)に対して同じように解決するのは困難です...リンクをクリックして、すべてのMsoShapeType列挙を表示します。FORM

シートのShapeテキストボックスに意味のある名前を付けたい場合は、次の1つの方法があります。

Option Explicit

Sub reNameMeaningfully()
Dim shp As Shape
Dim arrNames As Variant
Dim i As Integer

    arrNames = WorksheetFunction.Transpose(Sheets(1).Range("D2:D7").Value)
    '-- assuming that you have exact number of names for the exact number of controls

    For i = LBound(arrNames) To UBound(arrNames)
        Set shp = Sheets(1).Shapes(i)
        '-- we can't check Type here. So we check if default-name begins with Text
        If shp.Name Like "Text*" Then
            shp.Name = arrNames(i)
        End If
    Next i

End Sub

出力:

ここに画像の説明を入力してください

それらのtecboxがにある場合は、Formこれを試してください。同じロジックを使用して、すべての名前を範囲内に配置し、それを反復処理できます;)

Dim Cont as Control
Dim i as integer
i = 1
 For Each Cont In Me.Controls
     If TypeName(Cont) = "TextBox" Then 
          Cont.name = "txt" & i '-- Rename 
     End If 
 Next Cont 
于 2013-01-19T14:09:49.370 に答える