2016-09-14 10 views
2

フォームに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

私はコンパイルエラーを取得:

+0

です助けてください。また、パブリック宣言がフォームコードシートではなく、モジュール内にあることを確認してください。 – Miqi180

+0

上記のコードでは、ボタンが機能し、ボタン内のコードが実行されます。パブリック宣言とモジュール内の値を取得します。 ちょうど私が得る方法がわからないチェックボックスからの結果を得ること。 – R3PooC

+0

エラーは "LabelOptName"に固有です – R3PooC

答えて

0

を見つけていない メソッドまたはデータメンバは、この作業を取得するためのコントロールをループについてのヒントに感謝を管理!それが唯一の `OKButn_Click(なのでここで

は、作業を行うボタンのコードは`それは、明示的なデータ型で、すべてのパブリック変数を宣言することから始めて、そのかどうかを確認、動作していないです)...

Sub OKButn_Click() 
z = 0 
y = 0 
'Loops through the controls on the form, to get values of the Checkboxes 
    For Each ctlLoop In ColumnCopyForm.Controls 
'Checks to see if the value is true so it can be recorded 
    If ctlLoop.Value = True Then 
    'Records the column title in the correct place for future referencing 
     Sheets("Report").Cells(SavedHdrsRow + 1 + y, SavedHdrsCol).Value = HdrArray(0, z) 
     y = y + 1 

    End If 
    z = z + 1 
    Next ctlLoop 


Unload ColumnCopyForm 
End Sub 
関連する問題