フォームに2つのボタンがあり、データシートの列タイトルをキャプチャし、配列に追加してチェックボックスを作成します列のタイトルに応じたキャプション。その後、この情報が以前にレポートシートに保存されているかどうかを確認し、チェックボックスをあらかじめ選択します。(VBA)動的に作成されたチェックボックスから選択したチェックボックスデータを取得するには
これはすべて以下のコードで動作しますが、私がうまくいかないのは、これらの動的に作成されたチェックボックスから選択されたデータを取得するためのボタン「OKButn」を押して、結果は レポートシートに出力されます。
このボタンのコードはフォームコードシートに保持されていますが、私が知っているところではボタンを操作できるようになっています。ボタンを動的に作成することもできますが、これをクリックするだけでコードを実行させることができます。ここ
私のコードは、これまでのところです:ここでは
Option Explicit
Public HdrArray(), HdrColArray()
Public z, y, TotalHdrs, SavedHdrsCol, SavedHdrsRow, TotalSavedHdrs As Integer
Public AddOption As Object
Sub PopulateForm()
ColumnCopyForm.Show vbModeless
ColumnCopyForm.Caption = "Column Copy Selection """
Sheets("Data").Select
'Find total number of headers
TotalHdrs = Sheets("Data").Cells(1, Columns.Count).End(xlToLeft).Column
'Find cell that records the 'required columns'
SavedHdrsCol = Sheets("Report").Range("A1:zz100").Find("Required Columns", LookIn:=xlValues).Column
SavedHdrsRow = Sheets("Report").Range("A1:zz100").Find("Required Columns", LookIn:=xlValues).Row
'Count total rows
TotalSavedHdrs = Sheets("Report").Cells(Sheets("Data").Rows.Count, SavedHdrsCol).End(xlUp).Row
For z = 0 To (TotalHdrs - 1)
'If Sheets("Data").Cells(1, 1 + z).Value = "Item Type" Then
'Delete Columns on Data Sheet
'Sheets("Data").Columns(z).EntireColumn.Delete
'Else
'Makes the array dynamic
ReDim Preserve HdrArray(TotalHdrs, z)
'Adds the Data table header label to the array (column 0)
HdrArray(0, z) = Sheets("Data").Cells(1, 1 + z).Value
'Adds the column number to the array (Column 1)
HdrArray(1, z) = z
'Adds a check box - renaming it to the column title
Set AddOption = ColumnCopyForm.Controls.Add("Forms.CheckBox.1", "LabelOpt" & z, True)
With AddOption
.Caption = HdrArray(0, z)
.Left = 10
.Width = 200
.Top = .Height * z
'Automatically selects this if the option has been previously saved to copy to report sheet
For y = 0 To (TotalSavedHdrs - 1)
If Sheets("Report").Cells(SavedHdrsRow + 1 + y, SavedHdrsCol).Value = HdrArray(0, z) Then
AddOption.Value = True
'Add info to Array
HdrArray(2, z) = 1
End If
Next y
End With
'End If
'Make button visible - and format
ColumnCopyForm.OKButn.Visible = True
With ColumnCopyForm.OKButn
.Caption = "Apply & Close"
.Top = ColumnCopyForm.Height - 50
.Left = ColumnCopyForm.Width - 130
.Width = 70
.Height = 20
.ZOrder (0)
End With
'Make button visible - and format
ColumnCopyForm.CancelButn.Visible = True
With ColumnCopyForm.CancelButn
.Caption = "Cancel"
.Top = ColumnCopyForm.Height - 50
.Left = ColumnCopyForm.Width - 50
.Width = 40
.Height = 20
.ZOrder (0)
End With
Next z
End Sub
は、ボタンのコードです...
Option Explicit
Sub OKButn_Click()
For y = 0 To (TotalHdrs - 1)
MsgBox (HdrArray(0, y) & " - " & HdrArray(2, y))
'Saves the preferences to the report sheet
If HdrArray(2, y) = "1" Then
Sheets("Report").Cells(SavedHdrsRow + 1 + y, SavedHdrsCol).Value = HdrArray(0, y)
End If
Next y
Unload ColumnCopyForm
End Sub
これは私がボタンの下で働くかもしれないと思ったのコードです...
しかし、この行のSub OKButn_Click()
For y = 0 To (TotalHdrs - 1)
Set LabelOptName = "LabelOpt" & (y + 1)
If ColumnCopyForm.LabelOptName.Value = True Then
HdrArray(2, y) = 1
End If
MsgBox (HdrArray(0, y) & " - " & HdrArray(2, y))
'Saves the preferences to the report sheet
If HdrArray(2, y) = "1" Then
Sheets("Report").Cells(SavedHdrsRow + 1 + y, SavedHdrsCol).Value = HdrArray(0, y)
End If
Next y
Unload ColumnCopyForm
End Sub
:
If ColumnCopyForm.LabelOptName.Value = True Then
私はコンパイルエラーを取得:
です助けてください。また、パブリック宣言がフォームコードシートではなく、モジュール内にあることを確認してください。 – Miqi180
上記のコードでは、ボタンが機能し、ボタン内のコードが実行されます。パブリック宣言とモジュール内の値を取得します。 ちょうど私が得る方法がわからないチェックボックスからの結果を得ること。 – R3PooC
エラーは "LabelOptName"に固有です – R3PooC