前提・実現したいこと
Excel VBAにて呼び出し元のフォームの値を引き継いで、子フォームのリストボックスやラベルに値を引き継ぐコードを書いています。
親フォームから子フォームを呼び出した際に、子フォーム内にあるPrivate Sub UserForm_Activate()における、並び替えの関数がなぜか飛ばされて実行されてしまい、ラベルの値をうまく更新することができずにいます。
(並び替えの関数(フィルタオプション)は
Sheets("児童マスタ").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:M2"), CopyToRange:=Range("A10:M10"), Unique:=True
のコードです。これが飛ばされて次に移ってしまいます)
この原因と対処法について教えていただきたいです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
エラーメッセージは出ていません。
呼び出し元(親フォーム)のボタンのコード
Excel
1 2Private Sub btnInd_Click() 3 '親フォーム 4 With frmCRecordSearch.lstRecord 5 Dim targetRow As Integer 6 targetRow = .ListIndex 7 8 Dim indForm As frmIndAll 9 Set indForm = New frmIndAll 10 11 Call indForm.ShowWithParams( _ 12 .List(targetRow, 1), _ 13 .List(targetRow, 2), _ 14 .List(targetRow, 3), _ 15 .List(targetRow, 4), _ 16 .List(targetRow, 5), _ 17 .List(targetRow, 9) _ 18 ) 19 End With 20End Sub
呼び出し先(子フォーム)のフォームのコード
'frmIndAll Public Sub ShowWithParams( _ nenCaption As String, _ kumiCaption As String, _ numCaption As String, _ sexCaption As String, _ nameCaption As String, _ remark As Variant _ ) Me.lblNen.Caption = nenCaption Me.lblKumi.Caption = kumiCaption Me.lblNum.Caption = numCaption Me.lblSex.Caption = sexCaption Me.lblName.Caption = nameCaption Me.lblRemark = remark UserForm_Initialize Me.Show End Sub Private Sub UserForm_Initialize() Dim t As String t = "記録検索" '記録日付の新しい順にソートして抽出 Worksheets("記録検索").Activate Range("B2:M2").Clear Range("O2").Clear Range("H2").Value = Me.lblName.Caption '抽出 Sheets("ポートフォリオ").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:O2"), CopyToRange:=Range("A10:N10"), Unique:=True '抽出結果をソート SortChildI "A10" '「記録一覧」リストボックスの設定 With lstIndRecord .Clear 'リストボックス内のクリア .ColumnCount = 10 .ColumnWidths = "70;20;20;20;20;60;60;60;100;0" .TextAlign = fmTextAlignLeft .Font.Size = 10 Dim startRow As Integer Dim LastRow As Integer startRow = 11 LastRow = Worksheets(t).Range("A65536").End(xlUp).Row Dim i As Integer For i = startRow To LastRow .AddItem Cells(i, 3) '日付 .List(.ListCount - 1, 1) = Cells(i, 4).Value '年 .List(.ListCount - 1, 2) = Cells(i, 5).Value '組 .List(.ListCount - 1, 3) = Cells(i, 6).Value '出席番号 .List(.ListCount - 1, 4) = Cells(i, 7).Value '性別 .List(.ListCount - 1, 5) = Cells(i, 8).Value '氏名 .List(.ListCount - 1, 6) = Cells(i, 10).Value 'カテゴリ .List(.ListCount - 1, 7) = Cells(i, 11).Value '詳細カテゴリ .List(.ListCount - 1, 8) = Cells(i, 12).Value '記録内容 .List(.ListCount - 1, 9) = Cells(i, 13).Value '備考 Next End With '日付を記入 txtDate.Text = Format(Now, "mm/dd") End Sub Private Sub UserForm_Activate() '記録数のラベルの設定 '名前と出席番号を抽出条件にして抽出 Worksheets("児童抽出").Activate With lstIndRecord Range("B2:H2").Clear Range("J2:M2").Clear Range("G2").Value = .List(0, 5) Range("D2").Value = .List(0, 3) End With '抽出(フィルタオプション) Sheets("児童マスタ").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:M2"), CopyToRange:=Range("A10:M10"), Unique:=True '各ラベルの更新 Dim aInt As Integer Dim pInt As Integer Dim nInt As Integer Dim oInt As Integer With Me aInt = Range("J11").Value .lblAllRecord.Caption = aInt pInt = Range("K11").Value .lblPRecord.Caption = pInt nInt = Range("L11").Value .lblNRecord.Caption = nInt oInt = Range("M11").Value .lblOtherRecord.Caption = oInt If aInt <> 0 Then .lblPRatio.Caption = pInt / aInt * 100 .lblNRatio.Caption = nInt / aInt * 100 End If End With End Sub
「これが飛ばされて次に移ってしまいます」を具体的に記載してください。
ステップ実行時に直前の「End With」から、直後の「With Me」へ移るということでしょうか??
そもそも、ブレークポイント、ステップ実行をご存知でしょうか??
'抽出(フィルタオプション)
Sheets("児童マスタ").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A1:M2"), CopyToRange:=Range("A10:M10"), Unique:=True
のみを飛ばして次へ移ってしまいます。
ステップインで一つずつ確認したところ、そのように見えた、ということです。
では、「Sheets("児童マスタ").Range("A1") ・・・」にブレークポイントをセットして実行しても、
そこでは止まらないのでしょうか??
はい、そういうことになります。
逆に、直前の「End With」、直後の「With Me」にブレークポイントをセットすると、そこでは止まるのでしょうか??
※あり得ない動作に出会った時は、基本的な事を1つずつ確認していくものなので。