|
一度返信しましたが、ちょっと全体見て書き直してみます
あくまで私自身が見て、無駄だと思われる部分を修正してみますので必要に応じてご自分でカスタマイズしてください
※かなり長文になってしまいました すいません
とりあえず前回返信した【55978】の内容でやってみて成功したら、以下を読んでみてください。【55978】でエラーが出てたら意味が無いので・・・
↓このプロシージャからです
Private Sub CommandButton1_Click()
宣言等は割愛します
'With UserForm1.ListBox1
↑この下のコードでWith の意味がほとんど無いのでこの文を削除
'MyCount = Me.ListBox1.ListCount - 1
↑これも意味が無いと思うので削除
For文を書き換えます
For n = 0 To Me.ListBox1.ListCount - 1 ' ←ここ変えてます
If (Me.ListBox1.Selected(n) = True) Then
'With ListBox1
'If (.ListIndex = -1) Then
↑この2行もいらないはずです(それに付随する Else もいらない)
Set ws1 = Worksheets("history")
i = ws1.Range("B65536").End(xlUp).Row + 1
If i < 5 Then
i = 5
End If
↑この5行はループ内で毎回行われる必要が無いので、ループの外に出してみましょう
次の
With ActiveCell
から
ws1.Cells(i, 11).Value = Me.TextBox3.Value
までは多分OK(元データが分からないので・・・)
'社員番号 (社員番号が左)
'ws1.Cells(i, 12).Value = Me.ListBox1.TextColumn = 2
'名前 (名前が右)
'ws1.Cells(i, 13).Value = Me.ListBox1.TextColumn = 1
↑これを
ws1.Cells(i, 12) = Me.ListBox1.List(n,1)
ws1.Cells(i, 13) = Me.ListBox1.List(n,0)
に直す
*** まとめると
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のいずれかを選択してください。"
'ここは Exit Sub は入れなくていいのかな?
End If
Set ws1 = Worksheets("history")
i = ws1.Range("B" & Rows.Count).End(xlUp).Row + 1
If i < 5 Then
i = 5
End If
For n = 0 To Me.ListBox1.ListCount - 1
If (Me.ListBox1.Selected(n) = True) Then
With ActiveCell
から
ws1.Cells(i, 11).Value = Me.TextBox3.Value
まではそのままで
ws1.Cells(i, 12) = Me.ListBox1.List(n,1)
ws1.Cells(i, 13) = Me.ListBox1.List(n,0)
i = i + 1
'ここにひとつ End If が入るのかな?
End If
End With
End If
Next n
Unload UserForm1
End Sub
|
|