|
▼ume さん:
とりあえずコードの不要なところ(と思われるところ)を消し、1つにできるところは1つに。
といった変更を行いました。ロジック自体はかえていません。ComboBox2に対してChange1イベントのほかに
Clickイベントがあるのはなぜかな?とも思いますが、そこも変えていません。
ユーザーフォームモジュールをすべていれかえて、ここからスタートしませんか?
これをベースにして、umeさんの意図通りになっていないところをチューニングしていきましょう。
Option Explicit
Dim shデータ As Worksheet
Dim レコード数 As Long
Private Sub UserForm_initialize()
Dim x As Long
ComboBox1.List = _
Array("Aさん", "Bさん", "Cさん", "Dさん", "Eさん", "Fさん", "Gさん", "Hさん", "Iさん", "Jさん", "Kさん", "Lさん")
ComboBox2.RowSource = "Sheet1!B1:B12"
TextBox1.Value = Worksheets("Sheet1").Range("N11").Value '備考
TextBox4.Value = Worksheets("Sheet1").Range("I11").Value '日にち
Set shデータ = Worksheets("新築工事台帳")
レコード数 = shデータ.Range("A1").CurrentRegion.Rows.Count - 1
If レコード数 = 0 Then
MsgBox "データがないので実行できませんよ〜〜"
SpinButton1.Enabled = False
Exit Sub
End If
With SpinButton1
.Max = レコード数
.Min = 1
End With
Calendar1.Value = Date
End Sub
Private Sub ComboBox2_Change()
Dim i As Long
Dim myArray As Variant
Dim z As Variant
With ComboBox2
z = Application.Match(.Text, Evaluate(.RowSource), 0)
End With
If IsNumeric(z) Then
TextBox1.Value = Worksheets("Sheet1").Range("N" & z).Value
TextBox4.Value = Worksheets("Sheet1").Range("I" & z).Value
CBSet False 'まずすべてオフ
Select Case z
Case 1
CBSet True '工事開始のお知らせ すべてTrue
Case 2
CBSet 2, 19, 35 '地鎮祭のお知らせ
Case 3
CBSet 3, 4, 18 '仮設トイレ、水道、電気依頼
Case 4
CBSet 1, 34 'コンテナ設置依頼
Case 5
CBSet 1, 3, 4, 8, 9, 10, 16, 17 '業者打合せ
Case 6
CBSet 20, 22 'FRP 及び 防蟻 工事依頼
Case 7
CBSet 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 '木工事終了 及び コンテナ撤去依頼
Case 8
CBSet 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 24, 34 '足場払い日程連絡
Case 9
CBSet 3, 4, 7, 8, 9, 10, 11, 12, 13, 16, 17, 23 '清掃のお知らせ
Case 10
CBSet 1, 3, 4, 17, 23 '社内検査日程連絡
End Select
End If
End Sub
Private Sub CommandButton1_Click()
Dim myMSG As String
Dim myFlg As Boolean
Dim x As Long
Dim r As Long
Dim c As Long
Dim z As Long
Dim i As Long
Worksheets("FAX送信のご案内").Range("H12").Value = ComboBox1.Value '送信者転記
Worksheets("FAX送信のご案内").Range("C16").Value = ComboBox2.Value '用件転記
Worksheets("FAX送信のご案内").Range("A19").Value = TextBox4.Value '日にち項目転記
Worksheets("FAX送信のご案内").Range("C20").Value = TextBox1.Value '備考転記
Worksheets("FAX送信のご案内").Range("C21").Value = TextBox2.Value '備考転記
Worksheets("FAX送信のご案内").Range("C23").Value = TextBox3.Value '備考転記
Worksheets("FAX送信のご案内").Range("C19").Value = Format(Calendar1.Value, "ggge年mm月dd日(aaa)") 'カレンダーから摘出
Worksheets("FAX送信のご案内").Range("C17").Value = TextBox7.Value + "邸 新築工事" '工事名転記
Worksheets("FAX送信のご案内").Range("C18").Value = TextBox8.Value '工事場所転記
Worksheets("FAX送信のご案内").Range("H17").Value = TextBox9.Value '監督名転記
If Calendar1.Visible = False Then '工事開始のお知らせ '★Falsee
Worksheets("FAX送信のご案内").Range("C19:I19").ClearContents
Else
Calendar1.Visible = True
End If
i = SpinButton1.Value - 1
myFlg = False
Sheets("FAX送信のご案内").Range("B2:I10").ClearContents
For x = 1 To 35 'チェックボックスの番号
If Me.Controls("CheckBox" & x).Value = True Then
myMSG = myMSG & Me.Controls("CheckBox" & x).Caption & vbCrLf
myFlg = True
z = z + 1
r = ((z - 1) \ 4) + 2
c = (((z - 1) Mod 4) + 1) * 2
Sheets("FAX送信のご案内").Cells(r, c).Value = Sheets("新築工事台帳").Cells(i, x + 5).Value
End If
Next x
If myFlg = True Then
myMSG = myMSG & "宛てで宜しいですか?"
If MsgBox(myMSG, vbInformation + vbYesNo) = vbYes Then
Me.Hide
ActiveWindow.ActiveSheet.PrintPreview
Me.Show vbModeless
End If
Else
myMSG = "いずれにもチェックが入っていません"
MsgBox myMSG
End If
End Sub
Private Sub CommandButton2_Click()
Worksheets("FAX送信のご案内").PrintOut
End Sub
Private Sub SpinButton1_Change()
データ表示 SpinButton1.Value
End Sub
Private Sub ComboBox2_Click()
If ComboBox2.Text = Worksheets("Sheet1").Range("B1").Value Then '工事開始のお知らせ
Calendar1.Visible = False
Worksheets("FAX送信のご案内").Range("C19:I19").ClearContents
Else
Calendar1.Visible = True
End If
End Sub
Private Sub データ表示(x As Long)
TextBox5.Value = x & "/" & レコード数
TextBox6.Value = shデータ.Range("A" & x + 1).Value
TextBox10.Value = Worksheets("新築工事台帳").Cells(SpinButton1.Value, 41).Value
End Sub
Private Sub CBSet(ParamArray idx())
' : True すべて True
' : Fasle すべて False
' : n,n,n Trueにする番号
Dim x As Variant
Dim fg As Boolean
Dim ck As Long
Dim myColor As Long
myColor = &H0&
ck = CLng(idx(0))
If ck = -1 Then
fg = True 'True
myColor = &HFF&
End If
For x = 1 To 35 'CheckBox1〜CheckBox35
Me.Controls("CheckBox" & x).Value = fg
Me.Controls("CheckBox" & x).ForeColor = myColor
Next
If ck < 1 Then Exit Sub 'すべてTrueまたはFalse
For Each x In idx
Me.Controls("CheckBox" & x).Value = True
Me.Controls("CheckBox" & x).ForeColor = &HFF&
Next
End Sub
|
|