Excel VBA用户表单发布数据两次…有时
我有一个用户表单,在“PostHistory”表上有一个组合框,它从“Staff”表中提取数据。当您在用户窗体上按Add时,假定在员工工作表上找到姓名,并替换姓名旁边的日期。有时,它会替换日期及其下名称旁边的日期。使用Excel 2016Excel VBA用户表单发布数据两次…有时,excel,vba,Excel,Vba,我有一个用户表单,在“PostHistory”表上有一个组合框,它从“Staff”表中提取数据。当您在用户窗体上按Add时,假定在员工工作表上找到姓名,并替换姓名旁边的日期。有时,它会替换日期及其下名称旁边的日期。使用Excel 2016 Private Sub CommandButton7_Click() Application.ScreenUpdating = False Sheets("Staff").Visible = True Sheets("Engin
Private Sub CommandButton7_Click()
Application.ScreenUpdating = False
Sheets("Staff").Visible = True
Sheets("Engine").Visible = True
Dim TargetRow As Integer
Dim nameRange As Range
Set nameRange = Sheets("Staff").Range("C3:C200")
TargetRow = Sheets("Engine").Range("D3").Value
Sheets("PostHistory").Range("B3").EntireRow.Insert Shift:=xlDown
Sheets("PostHistory").Range("B3").Value = txt_date
Sheets("PostHistory").Range("C3").Value = cb_staff
Sheets("PostHistory").Range("D3").Value = txt_post
Sheets("PostHistory").Range("E3").Value = txt_notes
If (Augment.txt_date.Text) = "" Then
GoTo Skip1
ElseIf IsNull(Augment.txt_date.Value) = False Then
End If
For Each cell In nameRange.Cells
If cell.Text = [cb_staff] Then
cell.Offset(0, -1).Value = txt_date
End If
Next
Skip1:
Unload Augment
Sheets("Staff").Visible = False
Sheets("Engine").Visible = False
Sheets("List").Visible = False
Application.ScreenUpdating = True
Augment.Show
End Sub
首先:我没有找到代码应该多次编写的原因。但是我相信下面的代码不会写任何东西两次
Private Sub CommandButton7_Click()
' 209
Dim nameRange As Range
Dim Fnd As Range
Dim Ctls() As String
Dim i As Integer
Ctls = Split("txt_Date,cb_Staff,txt_Post,txt_Notes", ",")
If Len(txt_Date) Then
With Worksheets("Staff")
Set nameRange = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
End With
Set Fnd = nameRange.Find(cb_Staff.Value, , xlValues, xlWhole)
If Not Fnd Is Nothing Then Fnd.Offset(0, -1).Value = txt_Date.Value
End If
With Worksheets("PostHistory")
.Rows(3).EntireRow.Insert Shift:=xlDown
With .Rows(3)
For i = 0 To UBound(Ctls)
.Cells(3 + i).Value = Me.Controls(Ctls(i)).Value
Me.Controls(Ctls(i)).Value = ""
Next i
End With
End With
End Sub
原则上,不需要为了读取或写入而取消隐藏工作表。此外,如果您写入的工作表是隐藏的,那么停止屏幕更新是没有意义的。最后,我确实喜欢您清除所有控件的方式,但我相信这会干扰您对组合框中列表的管理。因此,我向你们展示了上面的另一种方法
哦,是的。我创建了一个名为
Augment
的用户表单,其中包含一个组合框、3个文本框和一个CommandButton7。我希望你也有这样的衣服。哇,这衣服干净多了。我今天要尝试一下,让你知道它是如何工作的。非常感谢你,工作得像做梦一样!非常感谢你!