- Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
277 :デフォルトの名無しさん[sage]:2015/10/10(土) 03:55:34.16 ID:uc7CQwkx - 昨日からVBAの学習を始めた者です。
<質問内容> リストボックスにsheet2のA1:A13に入力されている内容を一覧表示したいのですが、何故かsheet1のA1:A13の内容が表示されてしまいます。 どの様な原因が考えられるでしょうか。お手数ですがご教授願いますm(__)m (シートは「sheet1」、「sheet2」、「sheet3」があります) <環境> Windows7 home premium(64bit)+Excel2007 <作成手順> 1.「挿入>ユーザフォーム」からユーザーフォームを作成 2.「ツールボックス>リストボックス」からリストボックスを作成 3.作成したユーザーフォームを選択した状態でコードを表示し、以下のコードを入力 Option Explicit Private Sub UserForm_Initialize() Dim objsheet As Worksheet Set objsheet = ThisWorkbook.Worksheets(3) ListBox1.RowSource = objsheet.Range("a1:a13").Address ListBox1.MultiSelect = fmMultiSelectExtended End Sub 4.上記コードを標準モジュール(Module1)から以下の様に呼び出し実行 Sub Test() ユーザーフォーム.Show End Sub
| - Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
278 :277[sage]:2015/10/10(土) 04:07:02.62 ID:uc7CQwkx - 申し訳御座いません。作成手順の内容に一箇所誤記がございました。
誤: Set objsheet = ThisWorkbook.Worksheets(3) 正: Set objsheet = ThisWorkbook.Worksheets(2) 正しくは上記の通りです。 Worksheetsをインデックス指定、シート名指定とそれぞれ数パターン試してみたのですが ("sheet2")、("sheet3")や(2)、(3)の場合でも、sheet1のA1:A13の内容が表示されてしまいます。 以上
| - Excel VBA 質問スレ Part38 [転載禁止]©2ch.net
301 :277[sage]:2015/10/10(土) 21:43:42.05 ID:uc7CQwkx - なるほど!!
Addressプロパティはシート名を含まないセル座標を返す仕様なんですね。 Range.Address プロパティのリファレンスを見ただけではそこまで気付けませんでした。 まずは、以下の方法で試してみようと思いますが処理速度を考慮した 様々な記述方法をご紹介頂いたので今後の参考にしたいと思います。 (速いに越したこと無いですからね) ・Listbox1.List = Worksheets("Sheet2").Range("A1:A13").Value ・.ListBox1.AddItem.Cells(i,0) = Objsheet.Cells(i,1) ・objsheet.Range("a1:a13").Address(1,1,1,1) ・RowSource = "Sheet2!A1:A13" ご回答下さった皆さん、本当に有難うございましたm(__)m
|
|