|
▼mohimohi さん:
いろいろ「うんちく」を述べましたが、結局、ほとんどのコードを現在のシートのシートモジュールに書きました。
ただ、1か所、ThisWOrkbookモジュールのOpenイベントで参照しているところがありありますので
先に述べた方法で、このシートのシートコード名を MainSh に変更してください。
ThisWorkbookモジュール
Private Sub Workbook_Open()
MainSh.Init
End Sub
シートモジュール
・CommandButton1_Click を削除
・新たに以下を追加。
Public Sub Init() 'Workbook_Open から実行される
Dim WS As Worksheet
Dim x As Long
Dim ckb As OLEObject
Set WS = Sheets("Sheet2")
ComboBox2.Clear
ComboBox3.Clear
ComboBox4.Clear
ComboBox1.Value = ""
ComboBox2.Value = ""
ComboBox3.Value = ""
ComboBox4.Value = ""
WS.UsedRange.Clear
WS.AutoFilterMode = False
Range("A1").CurrentRegion.Columns("A:D").Copy WS.Range("A1")
WS.Range("E1").Value = 1
WS.Range("A1").CurrentRegion.Columns("E").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, Step:=1, Trend:=False
WS.Range("A1").AutoFilter
Set rfA = WS.AutoFilter.Range
Set rfX = WS.Cells(rfA.Rows.Count + 2, "A")
WS.Range("A1").CurrentRegion.Columns("A").Copy WS.Range("G1")
WS.Range("G1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
With WS.Range("G1").CurrentRegion
If .Rows.Count = 2 Then
ComboBox1.AddItem .Offset(1).Value
Else
ComboBox1.List = .Offset(1).Resize(.Count - 1).Value
End If
End With
For x = 1 To 8
OLEObjects("CheckBox" & x).Object.Value = False
OLEObjects("CheckBox" & x).Object.Enabled = False
Next
If dic Is Nothing Then
Set dic = CreateObject("Scripting.Dictionary")
For Each ckb In OLEObjects
If TypeName(ckb.Object) = "CheckBox" Then dic(ckb.Object.Caption) = ckb.Name
Next
End If
'一行目の値をComboBox1〜COmboBox4にセット
ComboBox1.Value = Range("A2").Value
ComboBox2.ListIndex = 0
ComboBox3.ListIndex = 0
ComboBox4.ListIndex = 0
End Sub
|
|