2016-07-11 6 views
0

現在、プロジェクトトラッキング用の一連のマクロを作成しています。これらのマクロの1つは、追跡する新しい項目ごとにフォームコントロールボタンをプログラムによって生成します。生成されたボタンが適切なデータを持つフォームを起動できるように、適切なデータにアクセスするために必要な最小限のデータで名前を付けるようにボタンを設計しました。フォームコントロールボタン名の文字数制限

私が遭遇した問題は、名前に渡されるデータが長すぎると、コードエラーが:the specified value is out of rangeとなっていることです。私はボタンに渡す代わりの識別子を考え出す必要があると思っていますが、フォームコントロールの名前には特定の文字制限があり、この制限を上げるか変更する方法は?そうでない場合は、文字数制限は特にありますか?

私は、ボタンを押したときにApplication.Callerを使用してアクセスするデータを知るために、後でプログラムが必要なので、識別データを格納するためにボタンの名前を使用します。ボタンが特定のデータセットを指すようにする代替手段はありますか?

+0

興味深いと呼ばれるクラスを持っています。私にとっては、実行時エラー1004: "ButtonクラスのNameプロパティを設定できません"で32文字になります。キャプションの制限は255と思われますが、デフォルトのキャプション "Button i"に置き換えられます。 – arcadeprecinct

+0

'.Tag'プロパティを使って、コントロールの名前の代わりにデータを保存することができます。 –

+0

@VincentG代わりに '.Tag'を使うとどのようなメリットがありますか?私は、データを保存するために名前を使用することを明確にするために私の投稿を編集しました.App.Callerを使用して別のサブ・ボタンでクリックされたボタンを確認する必要があるからです。このように '.Tag'にアクセスできますか? – RGA

答えて

2

あなたはボタンで約混乱ができた、といくつかのプロパティを使用するので、clsCustomButton

Public WithEvents btnCustomButton As MSForms.CommandButton 

Private strDataDetail1 As String 
Private strDataDetail2 As String 
Private strDataDetail3 As String 

Public Property Let DATA_DETAIL1(value As String) 
    strDataDetail1 = value 
End Property 
Public Property Let DATA_DETAIL2(value As String) 
    strDataDetail2 = value 
End Property 
Public Property Let DATA_DETAIL3(value As String) 
    strDataDetail3 = value 
End Property 

Public Function INITIALISE(btn As MSForms.CommandButton) 
    Set btnCustomButton = btn 
End Function 

Private Sub btnCustomButton_Click() 
    Module1.DATA = strDataDetail1 & "_" & strDataDetail2 & "_" & strDataDetail3 
End Sub 
+0

このカスタムタイプのボタンは新しいプロパティとしてデータを保存するという基本的な考え方はここにありますか?私はApplication.Caller(または他のサブからのいくつかの同等の "ブラインド"コール)を使用してそれにどのようにアクセスしますか? – RGA

+0

カスタムクリックで処理できるので、ボタンは不要ですが、まだボタンとして存在しているので、まだ動作するものと想定します。あなたは 'INITIALISE'で、渡されたコントロールの名前/キャプション/タグに依存する関数を設定することができます –

+0

ああ、' .OnAction'をクリックを処理する別のサブに送るのではなく、カスタムクリックそれ自体が処理を処理し、格納されている特定のボタンに必要なすべてのデータにアクセスできますか? – RGA

関連する問題