2017-08-28 7 views
1

以下のコードでは、userformの保存ボタンのクリックに「dLblQty」というラベルを追加しています。このボタンには、セルA27からA28までの値を割り当てる必要があります。 しかし、これはランタイムエラー '438'を与えます:オブジェクトはこのプロパティまたはメソッドをサポートしていません。 これを行う正しい方法をお勧めします。以下はVBAユーザーフォームにダイナミックラベルを追加して特定のセル値を割り当てる方法

は抜粋です:

Dim strCap As String 

strCap = Worksheets("Tax Invoice - Intra State").Range("A1").Value 

Dim dLblQty As Control 
Set dLblQty = UserForm1.Controls.Add("Forms.Label.1", "dLblQty", True) 
With dLblQty 
    .Top = 20 
    .Left = 20 
    .MultiLine = True 
    .Height = 100 
    .Caption = strCap 
End With 
+0

なぜセルを変更すると、クリックごとに値を取得するのですか?それがその列の最後の値である場合は、Lastrowという概念を使用して調べます。 – Luuklag

+3

'.EnterKeyBehavior'はTextBoxコントロールの唯一の有効なプロパティのようです:https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/enterkeybehavior-property –

+0

@ J.Foxはい私は同意します。そのため、今すぐEnkeykeybehaviorプロパティを削除しました。しかし、私の質問はまだあります。 – curiousBrain

答えて

0

Labelコントロールがmultilineプロパティやメソッドを持っていないため、エラーがスローされます。残りのスニペットは完全に機能します。

+0

奇妙なことに、以前は試しても '.MultiLine = True'が残っていましたが、今はエラーになっています。私はなぜそれが間違っているのだろうと思うが、 –

0

これらのコードは、テキストボックスのプロパティであるため、マルチラインとエンタングルキービヘイビアの削除時に間違いなくエラーになります。しかし、これは、動的ラベルを追加し、動的にセル値を割り当てるという私の問題を解決しませんでした。

数回試した後、私は何が間違っていたのか理解しました。 MSForms.labelクラスのオブジェクトとして自分のラベルを宣言しましたが、これはトリックでした。以下はその解決策です:

Dim strCap As String 
Dim dLblItem As MSForms.Label 

strCap = Worksheets("Tax Invoice - Intra State").Range("B1").Value 

Set dLblItem = UserForm1.Controls.Add("Forms.Label.1", "dLblItem", True) 
With dLblItem 
    .Top = 20 
    .Left = 20 
    '.MultiLine = True 
    '.EnterKeyBehavior = True 
    .Height = 100 
    .Caption = strCap 
    .BackColor = &HFF& 
    .ForeColor = &H8000& 
End With 
関連する問題