[[20240528152105]] 『変数が定義されていません』(11) ページの最後に飛ぶ

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

 

『変数が定義されていません』(11)

Private Sub CommandButton4_Click()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim foundRow2 As Range
    Dim lb As MSForms.ListBox
    Dim itemCount As Long
    Dim selectedItems() As String ' 選択されたアイテムを格納する配列

    ' 使用するワークシートを設定します
    Set ws = ActiveSheet
    ' A列で「件名」がある行を検索します
    Set foundRow2 = ws.Columns("A:B").Find(What:="≪件名≫", LookIn:=xlValues, LookAt:=xlWhole)

    If Not foundRow2 Is Nothing Then
        ' シートから情報を取得し、ユーザーフォームに表示
        ws.Cells(foundRow2.Row, "C").Value = TextBox1.Text
        ws.Cells(foundRow2.Row - 1, "C").Value = TextBox2.Text
        ws.Cells(foundRow2.Row - 2, "C").Value = TextBox3.Text
        ws.Cells(foundRow2.Row - 3, "C").Value = TextBox4.Text
    Else
        MsgBox "件名が見つかりませんでした。"
    End If

    ' 選択されたアイテムを取得
    itemCount = 0
    For i = 0 To lb.ListCount - 1
        If lb.Selected(i) Then
            ReDim Preserve selectedItems(itemCount)
            selectedItems(itemCount) = lb.List(i)
            itemCount = itemCount + 1
        End If
    Next i

    ' 選択されたアイテムをセルに書き込む
    ws.Cells(lastRow - 5, "C").Value = Join(selectedItems, ", ")

    ' 選択を解除
    For i = 0 To lb.ListCount - 1
        lb.Selected(i) = False
    Next i

    ' その他の処理
    ws.Cells(foundRow2.Row - 6, "C").Value = TextBox5.Text
    ws.Cells(foundRow2.Row - 7, "C").Value = TextBox6.Text
    Me.Hide
End Sub

実行すると変数が定義されていませんと出るのですが、どこがおかしいのか分からず苦戦しております

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


>実行すると変数が定義されていませんと出るのですが、
そのの行でマクロがストップし反転表示されませんか。
反転表示された文字列は何ですか。

(IT) 2024/05/28(火) 17:07:56


 >For i = 0 To lb.ListCount - 1
 ここの
 i
 が定義されていないようだが?

(ねむねむ) 2024/05/28(火) 17:13:50


自分も多分だけどiが宣言されてないからだと思う
ついでに、lbは何もsetされてないし、ws.Columns("A:B")は:が全角だけど大丈夫?
(む) 2024/05/28(火) 17:20:00

 moduleの冒頭に Option Explicitを入れておくと
 デバッグ -  xxxxのコンパイル を実行すると、
 宣言漏れの変数がハイライトするので、便利です。血眼になって探す必要なし。

 なお、これを自動化しておく方法があります。
 オプション -  編集 - 変数の宣言を強制する
 にチェックを入れておくと、
 moduleを作成したときに、自動的に Option Explicit が挿入されます。
 これを推奨します(かなりのFAQです)。

(xyz) 2024/05/28(火) 17:53:36


既に必要な回答は得られていると思いますが何点か。

■1
xyzさんから案内があるところですが↓なんかも読んでみると、よりわかりやすいかと思います。

 【参考】
http://officetanaka.net/excel/vba/beginner/06.htm

■2
提示のコードを整理すると↓みたいな感じでもよいように思います。

    Private Sub CommandButton1_Click()
        Dim 発見セル As Range
        Dim buf As String
        Dim i As Long
        Dim lb As MSForms.ListBox

        With ActiveSheet
            Set 発見セル = .Range("A:B").Find(What:="≪件名≫", LookIn:=xlValues, LookAt:=xlWhole)
            If 発見セル Is Nothing Then
                MsgBox "件名が見つかりませんでした。"
                'Exit Sub ここで抜けなくてよいのか?
            End If

            For i = 0 To lb.ListCount - 1
                If lb.Selected(i) Then
                    buf = buf & lb.List(i) & ","
                    lb.Selected(i) = False
                End If
            Next i
            If Len(buf) > 0 Then buf = Left(buf, Len(buf) - 1)

            .Cells(発見セル.Row - 3, "C").Resize(4).Value = WorksheetFunction.Transpose(Array(TextBox4.Text, TextBox3.Text, TextBox2.Text, TextBox1.Text))
            .Cells(発見セル.Row - 7, "C").Resize(3).Value = WorksheetFunction.Transpose(Array(TextBox6.Text, TextBox5.Text, buf))
            Me.Hide
        End With
    End Sub

(もこな2) 2024/05/28(火) 20:08:23


そのの行でマクロがストップし反転表示されませんか。
反転表示された文字列は何ですか。
反転表示はPrivate Sub CommandButton4_Click()ここです。
皆さんありがとうございます。
一旦試してみます

(11) 2024/05/29(水) 10:24:39


iと℔の宣言&SetとRow行調節したらうまくいきました!!!
ありがとうございました

(11) 2024/05/29(水) 10:42:10


コメント返信:

[ 一覧(最新更新順) ]


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