Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : その他)
UserFormのListBoxへListの範囲指定
投稿日時: 23/06/19 16:43:28
投稿者: o_taroh

ShsstがP1〜P20まで20Seetsあります、UserForm1のListBoxにList範囲を"P1"SheetのAF11〜AF20に書きました、すべてのSheetでUserForm1を呼び出すのですが"P1"SheetのAF11〜AF20のリストを有効にするのにはどうすればいいでしょうか、お願いします。
Private Sub UserForm_Activate()
    Me.ListBox1.RowSource = Sheets("P1").Range("AF10:AF20") または "AF10:AF20"
End Sub
と書いてみましたが実行時エラー'438'や'13'が出てダメでした。

回答
投稿日時: 23/06/19 17:42:50
投稿者: taitani
投稿者のウェブサイトに移動

Me.ListBox1.RowSource = Sheets("P1").Range("AF10:AF20")
 
ではなく、
Me.ListBox1.RowSource = Sheets("P1").Range("AF10:AF20").Address
 
ではいかがでしょうか。

投稿日時: 23/06/19 19:53:08
投稿者: o_taroh

taitaniさん早速ありがとうございました、Addressを追加しましたがやはりリスト無しでShowは実行されます、どうしてでしょうか?
Private Sub UserForm_Activate()をエラーメッセージ無く通過するのですがね

回答
投稿日時: 23/06/19 20:15:57
投稿者: simple

どのシートがアクティブでも、特定のシートのデータを表示するなら、

Me.ListBox1.RowSource = Sheets("P1").Range("AF10:AF20").Address(external:=True)
ではないでしょうか。

回答
投稿日時: 23/06/19 21:45:57
投稿者: WinArrow

最初に掲示したコードは、
コードペインからコピペしたものでしょうか?
 
Addressプロパティを省略したとすれば、
実行時エラーは「13」になるはず。
実行時エラー438の時のコードは、どのようなコードでしたか?
 
若し、掲示板に手入力したとすれば、
実際のコードが間違えいる可能性があります。
 
 

回答
投稿日時: 23/06/20 08:11:52
投稿者: simple

Me.ListBox1.RowSource = "P1!AF10:AF20"
で良いと思います。
流れでAddressプロパティを使った回答をしましたが。

回答
投稿日時: 23/06/20 10:03:20
投稿者: WinArrow

>Me.ListBox1.RowSource = Sheets("P1").Range("AF10:AF20").Address
 
では、
Me.ListBox1.RowSourceの「値」は、"$AF$10:$AF$20"になりシート名が付きません。
結果として、アクテイブシートと解釈されまます。
 
シートを可変にしたいものと、考えると
ユーザーフォームを表示する前に
Public mySheet As Worksheet
 
Set mySheet = Sheets("P1")
Userform1.Show
 
Private Sub UserForm_Activate()
    With mySheet
        Me.ListBox1.RowSource = .Name & "!" & .Range("F10:F20").Address(0, 0)
    End With
    MsgBox Me.ListBox1.RowSource
End Sub
 
このようにするとよいと考えます。

投稿日時: 23/06/20 14:47:02
投稿者: o_taroh

taitaniさん,simpleさん,WinArrowさんありがとうございました。
"P1!AF10:AF20"を採用させていただきます、なにせ87年使った頭でVBAも生半可な理解で覚束ない老人ですが今後ともよろしくお願いします。