|
こんにちは。かみちゃん です。
>以上ですが(2)がまったくできていません。
>このような場合にユーザーフォームを使うのでしょうか。
Time(From)、Time(To)をComboBox(プルダウン)で選択させたいならば、
UserFormが簡単かと思います。
それで今までのスレッドを、総合すると、以下のような感じにしてはいかがでしょうか?
BeforeDoubleClickイベントのコードにしていますが、それと同等のコードが
Sampleマクロです。
Sampleマクロは、セルの書き込み部分など、できるだけ簡略にしています。
その他の部分は、できるだけ、にしもりさんが今できているものに近い形にして
あります。
'◆シートモジュール
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Cnm As String
Dim Pnm As String
Dim Mnm As String
Dim Tnm As String
' Dim ws1 As Worksheet
' Dim i As Long
If Not Application.Intersect(Range("B3:B100"), Target) Is Nothing Then
With Target
Cnm = .Offset(, -1).Value
Pnm = .Offset(0, 0).Value
Mnm = .Offset(, 3).Value
Tnm = .Offset(, 5).Value
End With
Set ws1 = Worksheets("history")
' For i = 5 To ws1.Range("B65535").End(xlDown).Row
' If IsEmpty(ws1.Cells(i, 2).Value) Then
' ws1.Cells(i, 2).Value = Cnm
' ws1.Cells(i, 3).Value = Pnm
' ws1.Cells(i, 4).Value = Mnm
' ws1.Cells(i, 9).Value = Tnm
' Exit For
' End If
' Next i
i = ws1.Range("B65536").End(xlUp).Row + 1
If i < 5 Then
i = 5
End If
ws1.Cells(i, 2).Value = Cnm
ws1.Cells(i, 3).Value = Pnm
ws1.Cells(i, 4).Value = Mnm
ws1.Cells(i, 9).Value = Tnm
Cancel = True
UserForm1.Show
End If
End Sub
'◆UserFormモジュール
Option Explicit
Private Sub CommandButton1_Click()
Dim From_Str As String
Dim To_Str As String
Dim Hours As Double
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
'Notese
ws1.Cells(i, 11).Value = Me.TextBox3.Value
End If
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
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
'◆標準モジュール
Option Explicit
Public i As Long
Public ws1 As Worksheet
Sub Sample()
If Not Application.Intersect(Range("B3:B100"), ActiveCell) Is Nothing Then
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
End With
Set ws1 = Worksheets("history")
i = ws1.Range("B65536").End(xlUp).Row + 1
If i < 5 Then
i = 5
End If
UserForm1.Show
Else
MsgBox "B3〜B100セルのいずれかをアクティブにしてください。"
End If
End Sub
>そしてsaveするとき、作業当日の日付けをシートhistoryのセルk3に書き込みたい。
とりあえず、これには、対応していません。
別対応でできます。
|
|