[[20200526142738]] 『VBAユーザーフォーム リストボックス』(こっこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAユーザーフォーム リストボックス』(こっこ)

何度もすみません><あと少しでユーザーフォームの完成に近づいているのですが
6つあるリストボックスのうち下記の1つだけ
セルの2行目以降を表示してくれません;
お分かりになられましたら教えてください・・・

lastrow = Sheets("年").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox3
.ColumnHeads = True '花
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年!" & Range("M8", "R" & lastrow).Address
End With

< 使用 Excel:Office365、使用 OS:Windows10 >


むむ動いたりうごかなかったりでこのBOXだけではないようです;

Private Sub ComboBox1_Change()
Dim lastrow As Long

astrow = Sheets("年表").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox1
.ColumnHeads = True
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年表!" & Range("A8", "F" & lastrow).Address
End With

lastrow = Sheets("年表").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox2
.ColumnHeads = True
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年表!" & Range("G8", "L" & lastrow).Address
End With
(こっこ) 2020/05/26(火) 14:57


 >Private Sub ComboBox1_Change()
 プロシージャ名が不正です。
 コマンドボタンクリックにしてみたら?
(く) 2020/05/26(火) 15:31

ちゃんと動きますけど、コンボ選択された内容を使っていないし、何のためにコンボ選択がトリガーになっているのでしょうか? 値が変わらないならば、 UserForm_Initialize時に1回セットするだけかと思います。

そして、コンボボックスの方は、選択できる項目が入っていますか? データなしだと選択できないので、イベント発生しませんよ?

あと、6列分のデータを5列に詰めようとしているので、6列目が表示されませんが、これも意味不明です。
(???) 2020/05/26(火) 15:53


(く)さん
コマンドボタンですか〜ドロップダウンで月を変えるように設定してました;ご回答ありがとうございます。

???さん
!そーですよねcomboボックス・・最初は無表示になってました;
6列のデーターの件忘れてました;ご指摘ありがとうございます。

(こっこ) 2020/05/26(火) 16:25


なんどもすみません。
リストがうまく動かなくて困ってます

Private Sub ComboBox1_Change()

Sheets("入力").Range("M1").Value = ComboBox1.Value
Label14.Caption = Sheets("年表").Range("A4").Value
Label17.Caption = Sheets("年表").Range("H5").Value
Label15.Caption = Sheets("年表").Range("O5").Value
Label18.Caption = Sheets("年表").Range("V5").Value

lastrow = Sheets("年表").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox1
.ColumnHeads = True '
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年表!" & Range("A8", "E" & lastrow).Address
End With

lastrow = Sheets("年表").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox2
.ColumnHeads = True '
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年表!" & Range("H8", "L" & lastrow).Address
End With

lastrow = Sheets("年表").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox3
.ColumnHeads = True '
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年表!" & Range("O8", "S" & lastrow).Address
End With

lastrow = Sheets("年表").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox4
.ColumnHeads = True '
.ColumnCount = 5
.ColumnWidths = "50;50;80;60;70"
.RowSource = "年表!" & Range("V8", "Z" & lastrow).Address
End With

End Sub

(そら) 2020/05/27(水) 12:10


本当に何度もすみません。別のシートにリスト3.4を作成するとちゃんと抽出するのですが
できたら"年表のシートにまとめてあるのでそれでできたらと思ってます
(そら) 2020/05/27(水) 12:17

あくまで「ComboBox1_Change」でいくようですが、それはそれとして、インデント付けた方が見やすく(=メンテナンスしやすく)ないですか?
さらにListBox1〜4はループ処理にできるとおもいます。
 (試してないですが↓みたいは感じではないでしょうか?)

    Private Sub ComboBox1_Change()
        Dim lastrow As Long
        Dim SH As Worksheet
        Set SH = Worksheets("年表")

        Sheets("入力").Range("M1").Value = ComboBox1.Value
        Label14.Caption = SH.Range("A4").Value
        Label17.Caption = SH.Range("H5").Value
        Label15.Caption = SH.Range("O5").Value
        Label18.Caption = SH.Range("V5").Value

        lastrow = SH.Cells(SH.Rows.Count, 1).End(xlUp).Row
        If lastrow < 8 Then Exit Sub

        For i = 1 To 4
            With Controls("ListBox" & i)
                .ColumnHeads = True '
                .ColumnCount = 5
                .ColumnWidths = "50;50;80;60;70"
                .RowSource = Split(SH.Range("A8:E" & lastrow).Offset(, (i - 1) * 7).Address(External:=True), "]")(1)
        End With

    End Sub

ちなみに、ニックネームは1つにしたほうが良いと思いますよ。

(もこな2) 2020/05/27(水) 15:08


もこなさん

お返事ありがとうございます。
一度試してみます><
ニックネームですよね・・しまったとあとあと気づきました。・。・
気を付けます;
(そら) 2020/05/27(水) 16:28


 ちなみに、
  2020/05/27(水) 15:08
 にレスした方のニックネームは
 「もこな2」さんです。
(OK) 2020/05/27(水) 16:51

OKさん 
ご指摘ありがとうございます。
もこな2さん
2が抜けてました;失礼しました。
(そら) 2020/05/27(水) 17:11

もこな2さんの内容で試したのですが

ループは難しいです;下記の部分でエラーになり;rowsourceプロパティエラーになります。

          .RowSource = Split(SH.Range("A8:E" & lastrow).Offset(, (i - 1) * 

Private Sub ComboBox1_Change()

        Dim lastrow As Long
        Dim SH As Worksheet
        Set SH = Worksheets("年表")
        Sheets("入力").Range("M1").Value = ComboBox1.Value
        Label14.Caption = SH.Range("A4").Value
        Label17.Caption = SH.Range("H5").Value
        Label15.Caption = SH.Range("O5").Value
        Label18.Caption = SH.Range("V5").Value
        lastrow = SH.Cells(SH.Rows.Count, 1).End(xlUp).Row
        If lastrow < 8 Then Exit Sub
        For i = 1 To 4
            With Controls("ListBox" & i)
                .ColumnHeads = True '
                .ColumnCount = 5
                .ColumnWidths = "50;50;80;60;70"
                .RowSource = Split(SH.Range("A8:E" & lastrow).Offset(, (i - 1) * 7).Address(External:=True), "]")(1)
        End With

        Next i

    End Sub

(そら) 2020/05/27(水) 17:15


失礼。ちょとミスってましたね。
「テストボタン」というコマンドボタンを追加して、↓を試してみてください
    Private Sub テストボタン_Click()

        Dim lastrow As Long, i As Long
        Dim SH As Worksheet: Set SH = Worksheets("年表")

        Stop

        lastrow = SH.Cells(SH.Rows.Count, 1).End(xlUp).Row
        If lastrow < 8 Then Exit Sub
        For i = 1 To 4
            With Controls("ListBox" & i)
                .ColumnHeads = True '
                .ColumnCount = 5
                .ColumnWidths = "50;50;80;60;70"
                .RowSource = Split(SH.Range("A8:E" & lastrow).Offset(, (i - 1) * 7).Address(External:=True), "]")(1)
            End With
        Next i

    End Sub

↑で問題がなければ、ステップ実行してなにをやっているか調べてみてください。

(もこな2) 2020/05/27(水) 18:12


もこな2さん

ありがとうございます。
早速試してみます。
(そら) 2020/05/28(木) 10:28


もこな2

ご回答ありがとうございました。無事動くようになりました。
(こっこ) 2020/05/29(金) 17:20


【ステップ実行してなにをやっているか調べて】みてください。
といいましたけど調べたんですか?

私は整理しただけなので、"動いた"のであれば、元のコードでも動いたはずですよ。
何がまずかったのかは、ご自身で検証してください。
(こちらには同じ環境がないので、原因分析のお手伝いはできません)

(もこな2 ) 2020/05/29(金) 17:33


そもそもですが、すでに指摘されているとおり、「ComboBox1_Change」で処理する案件なんでしょうか?
↓のように、もうちょい整理してみました。
    Private Sub ComboBox1_Change()
        Dim MyRNG As Range
        Dim i As Long '行番号とコントロールの番号の両方で使用

        Sheets("入力").Range("M1").Value = ComboBox1.Value
        'Label14,Label17,Label15,Label18のCaptionは、固定されているので削除

        '▼年表シートのA列最終行を調べて8行目以下なら、最初の表範囲を「MyRNG」にセットする
        With Sheets("年表")
            i = .Cells(.Rows.Count, "A").End(xlUp).Row

            If i < 8 Then
                MsgBox "データなし"
                Exit Sub
            Else
                Set MyRNG = .Range("A8:E" & i)
            End If
        End With

        '▼ListBox1〜4をループ処理
        For i = 1 To 4
            With Controls("ListBox" & i)
                .ColumnHeads = True
                .ColumnCount = 5
                .ColumnWidths = "50;50;80;60;70"
                .RowSource = Split(MyRNG.Offset(, (i - 1) * 7).Address(External:=True), "]")(1)
            End With
        Next i

    End Sub

改めてみると、「ComboBox1_Change」で変わってくるのって↓だけですよね?

 Sheets("入力").Range("M1").Value = ComboBox1.Value

(もこな2 ) 2020/05/30(土) 11:42


ComboBox1使用不正解
(vbasirazu) 2020/05/30(土) 17:04

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.