[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『変数が定義されていません』(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
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
(11) 2024/05/29(水) 10:24:39
(11) 2024/05/29(水) 10:42:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.