在userform初始化时,将工作表值重新填充到用户表单中的文本框中

时间:2018-02-26 21:39:37

标签: vba excel-vba combobox excel

想知道是否有人可以帮我扭转以下代码。基本上,我有一个带有组合框的用户表单,该组合框是从工作表列中的名称列表生成的,#34; A"。提交后,将从用户表单中选择的项目填充到工作表中,从组合框中填入相应名称的行。

我希望以某种方式反转下面的代码,以便我可以将它放在" UserForm_Initialize()"如果用户关闭并在同一天重新打开,则将已保存的值重新生成回到表单上的texbox。我有一个名为" currentDate"的当前日期文本框。所以基本上如果Date = currentDate.Text比...将单元格值添加回文本框。

      Dim dn As Worksheet: Set dn = Sheets("DailyNumbers")
      Dim EmptyRow As Long
      Dim FoundVal As Range
      EmptyRow = dn.Cells(ws.Rows.Count, "B").End(xlUp).Row + 1

      ' *** Check combobox selection ***
      If procNamecombobox.ListIndex > -1 Then
      Set FoundVal = dn.Range("A1:A" & EmptyRow).Find (procNamecombobox.Value) 'find Combobox value in Column A
      If Not FoundVal Is Nothing Then 'if found
        dn.Range("B" & FoundVal.Row).Value = currentDate.Text
        dn.Range("C" & FoundVal.Row).Value = completeCount.Text 'use that  row to populate cells
        dn.Range("D" & FoundVal.Row).Value = handledCount.Text
        dn.Range("E" & FoundVal.Row).Value = wipCount.Text
        dn.Range("F" & FoundVal.Row).Value = suspendCount.Text
        Else 'if not found use EmptyRow to populate Cells
        dn.Range("A" & EmptyRow).Value = procNamecombobox.Value
        dn.Range("B" & EmptyRow).Value = currentDate.Text
        dn.Range("C" & EmptyRow).Value = completeCount.Text
        dn.Range("D" & EmptyRow).Value = handledCount.Text
        dn.Range("E" & EmptyRow).Value = wipCount.Text
        dn.Range("F" & EmptyRow).Value = suspendCount.Text
     End If
Else
    MsgBox "Please select your name"
End If

谢谢!

1 个答案:

答案 0 :(得分:0)

我想你可以使用这样的东西

.ended

顺便说一下,您的代码可以重构如下:

Option Explicit

Private Sub UserForm_Initialize()
    Dim f As Range

    With Worksheets("DailyNumbers") 'reference wanted sheet
        Set f = .Range("B1", .Cells(.Rows.Count, "B").End(xlUp)).Find(Date, lookat:=xlWhole, LookIn:=xlValues) 'search referenced sheet column B for current date
    End With
    If Not f Is Nothing Then ' if current date found
        With Me 'reference userform
            .completeCount.Text = f.Offset(, 1).value
            .handledCount.Text = f.Offset(, 2).value
            .wipCount.Text = f.Offset(, 3).value
            .suspendCount.Text = f.Offset(, 4).value
        End With
    End If

    'your other code to fill listbox
    With Worksheets("NamesArchive") ' just a guess...
        Me.procNamecombobox.List = Application.Transpose(.Range("A1", .Cells(.Rows.Count, "A").End(xlUp))) 'fill combobox with referenced sheet column A values from rows 1 down to last not empty one
    End With
End Sub