2016-07-11 3 views
0

Ich schreibe gerade eine Reihe von Makros für die Projektverfolgung. Eines dieser Makros generiert programmgesteuert Formularsteuerschaltflächen für jedes neu zu verfolgende Element. Um zu ermöglichen, dass die generierten Schaltflächen ein Formular mit den entsprechenden Daten starten, habe ich die zu benennenden Schaltflächen mit der minimalen Datenmenge entworfen, die für den Zugriff auf die entsprechenden Daten erforderlich ist.Zeichenbeschränkung für Formularsteuerungsknopfnamen

Das Problem, das ich habe, ist, dass, wenn die Daten an den Namen übergeben zu lange ist, die Code-Fehler sagen: the specified value is out of range. Ich denke, dass ich nur mit einem alternativen Bezeichner kommen muss, um an die Schaltfläche zu gelangen, aber in der Zwischenzeit bin ich neugierig, ob es eine bestimmte Zeichenbeschränkung für die Namen der Formularsteuerelemente gibt und ob es welche gibt Möglichkeit, dieses Limit zu erhöhen oder zu ändern? Wenn nicht, was genau ist das Zeichenlimit?

Ich benutze den Namen der Taste, um identifizierende Daten zu speichern, da ich ein späteres Programm brauche, um zu wissen, auf welche Daten mit der Application.Caller zugegriffen werden soll, wenn die Taste gedrückt wird. Gibt es eine Alternative, um einen Button auf einen bestimmten Datensatz zu zeigen?

+0

Interessant. Für mich endet es bei 32 Zeichen mit dem Laufzeitfehler 1004: "Die Eigenschaft Name der Button-Klasse konnte nicht gesetzt werden". Die Begrenzung für die Beschriftung scheint 255 zu sein, wird aber nur durch die Standardbeschriftung "Button i" ersetzt. – arcadeprecinct

+0

Sie können die Eigenschaft ".Tag" verwenden, um Daten anstelle des Namens des Steuerelements zu speichern. –

+0

@VincentG Welchen Nutzen bringt die Verwendung von '.Tag'? Ich habe gerade meinen Beitrag editiert, um klarzustellen, dass ich den Namen verwende, um Daten zu speichern, da ich in der Lage sein muss zu sehen, welcher Button in einem anderen Sub mit Application.Caller angeklickt wurde. Könnte '.Tag' auf diese Weise erreicht werden? – RGA

Antwort

2

Sie könnten Chaos über mit der Taste, und einige Eigenschaften verwenden, so haben eine Klasse namens 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

So ist der Grundgedanke hier, dass die Schaltfläche dieses benutzerdefinierten Typs die Daten als neue Eigenschaften speichern wird? Wie würde ich mit Application.Caller (oder einem ähnlichen "blinden" Anruf von einem anderen Sub) darauf zugreifen? – RGA

+0

Sie würden es nicht brauchen, wie Sie es in der benutzerdefinierten klicken konnten, aber es existiert immer noch als eine Schaltfläche, so nehme an, es würde immer noch funktionieren. Sie könnten auf der 'INITIALISE' die Funktion abhängig von dem Namen/caption/tag des Controls übergeben' c' –

+0

Oh, also anstatt ".OnAction" senden Sie es an eine separate Sub, die den Klick, der benutzerdefinierte klickt selbst würde die Verarbeitung übernehmen, und es hätte Zugriff auf alle erforderlichen Daten für diese bestimmte Schaltfläche wie gespeichert? – RGA

Verwandte Themen