|
▼カウボーイズ さん:
ご指摘にありがとうございます。
条件を整理し、
1.UserFomrははじめからひらいている必要ある
2.Userformのボタンclickイベントで諸項目の代入がはじまる
ことが判ったので以下のようにロジック変えました。
おおきな一歩であります。
また、最終ゴールにむけ以下の条件を追加しました。
3.リストボックスで選択された名前と社員番号を、それぞれ(a2:a51)と(b2:b51)からws1に代入
4.リストボックスで複数選択されてる場合は、Mycount=nになるまでループして代入
でもうんともすんともいいません。どこが悪いかどなたかご教示くださいませんか。
ListboxのプロパティのColumnCountは2にしてあります。
(標準モジュール)
Sub Sample()
UserForm1.Show
End Sub
---------------------------------------------
(ユーザーフォーム)
Option Explicit
Public i As Long
Public ws1 As Worksheet
Public MyCount As Integer
Public n As Long
Private Sub UserForm_Initialize()
Calendar1.Value = Date
' カレンダーの日付をセルにセットする
Dim i As Integer
Me.ListBox1.RowSource = Worksheets("member").Range("a2:b51").Address(external:=True)
Me.TextBox1.Value = Date
With Me.ComboBox1
For i = 1 To 24
.AddItem i
Next
End With
With Me.ComboBox2
For i = 0 To 45 Step 15
.AddItem i
Next
End With
With Me.ComboBox3
For i = 1 To 24
.AddItem i
Next
End With
With Me.ComboBox4
For i = 0 To 45 Step 15
.AddItem i
Next
End With
End Sub
Private Sub Calendar1_Click()
TextBox1.Value = Calendar1.Value
' カレンダーの日付をセルにセットする
End Sub
Private Sub CommandButton1_Click()
Dim From_Str As String
Dim To_Str As String
Dim Hours As Double
If Not Application.Intersect(Range("C3:C104"), ActiveCell) Is Nothing Then
Else
MsgBox "Programのいずれかを選択してください。"
End If
With UserForm1.ListBox1
MyCount = Me.ListBox1.ListCount - 1
For n = 0 To MyCount
If (Me.ListBox1.Selected(n) = True) Then
With ListBox1
If (.ListIndex = -1) Then
Set ws1 = Worksheets("history")
i = ws1.Range("B65536").End(xlUp).Row + 1
If i < 5 Then
i = 5
End If
With ActiveCell
ws1.Cells(i, 2).Resize(, 3).Value = Array(.Offset(, -1).Value, .Value, .Offset(, 3).Value)
ws1.Cells(i, 2).Offset(, 7).Value = .Offset(, 5).Value
If Me.ComboBox1.Value <> "" And Me.ComboBox2.Value <> "" Then
From_Str = Me.ComboBox1.Value & ":" & Me.ComboBox2.Value
End If
If Me.ComboBox3.Value <> "" And Me.ComboBox4.Value <> "" Then
To_Str = Me.ComboBox3.Value & ":" & Me.ComboBox4.Value
End If
If From_Str <> "" And To_Str <> "" Then
Hours = (CDate(To_Str) - CDate(From_Str)) * 24
'Date
ws1.Cells(i, 5).Value = Me.TextBox1.Value
'Time(From)
ws1.Cells(i, 6).Value = CDate(From_Str)
'Time(To)
ws1.Cells(i, 7).Value = CDate(To_Str)
'Hours
ws1.Cells(i, 8).Value = (CDate(To_Str) - CDate(From_Str)) * 24
'Place
ws1.Cells(i, 10).Value = Me.TextBox2.Value
'Notes
ws1.Cells(i, 11).Value = Me.TextBox3.Value
'社員番号 (社員番号が左)
ws1.Cells(i, 12).Value = Me.ListBox1.TextColumn = 2
'名前 (名前が右)
ws1.Cells(i, 13).Value = Me.ListBox1.TextColumn = 1
End If
End With
End If
End With
End If
Next n
End With
Unload UserForm1
End Sub
Private Sub UserForm_Deactivate()
Unload UserForm1
End Sub
|
|