用户窗体基于企业价值识别正确的工作表

我有一个工作簿,其中包含客户端信息。每个客户都有一张工作表,每张工作表都标有客户的唯一ID。我想要启动一个UserForm,用户将从cobo box中选择一个客户端。然后,来自相应工作表最后一行的数据填充UserForm。用户窗体基于企业价值识别正确的工作表

在同一工作簿中的其他代码中,我使用的是脚本字典,但这些字典都与特定工作表中的特定范围相关联。我不知道如何编写UserForm以在所有工作表中搜索与cobo_ClientID字段中的值相同的名称,然后从MAX行更新日期的行中引入正确的数据元素。

下面是我一直在使用在其他领域的脚本辞典的例子:

Set coboDict = CreateObject("Scripting.Dictionary") 

With coboDict

For Each cStatsClientID In ws1.Range("StatsClientID")

If Not .exists(cStatsClientID.Value) Then

.Add cStatsClientID.Value, cStatsClientID.Row

Else

If CLng(cStatsClientID.Offset(, -2).Value) > CLng(ws1.Range("B" & .Item(cStatsClientID.Value))) Then

.Item(cStatsClientID.Value) = cStatsClientID.Row

End If

End If

Next cStatsClientID

Me.cobo_ClientID.List = Application.Transpose(.keys)

End With

回答:

从另一个论坛时提供的LASTROW链接,以及一些建议之间,我觉得我有解决方案。这个问题似乎与我如何设置LastRow以及找到正确的表单有关。

Private Sub cobo_ClientID_Change() 

Dim Sht As String

Dim LastRow As Long

Sht = Me.cobo_ClientID

With ActiveSheet

LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row

End With

txt_Name = Sheets(Sht).Range("E" & LastRow).Value

txt_DPPymtAmt = Sheets(Sht).Range("H" & LastRow).Value

End Sub

回答:

此代码将查看每个工作表名称并在组合框中列出它们。当您选择其中一张工作表时,它将采用最后一行的值并将它们放置在表格上的文本框中。

添加这些控件到窗体:

  • 组合框称为命名txtColAtxtColBtxtColCcmbSheets
  • 三个文本框。

-

Private Sub UserForm_Initialize() 

Dim wrkSht As Worksheet

'Populate the combo-box with sheet names.

For Each wrkSht In ThisWorkbook.Worksheets

With Me.cmbSheets

.AddItem wrkSht.Name

End With

Next wrkSht

End Sub

'Will place the values from the last row columns A:C in textboxes on the form.

Private Sub cmbSheets_Change()

Dim rLastCell As Range

Dim shtSelected As Worksheet

'Set a reference to the sheet selected by the combo box.

Set shtSelected = ThisWorkbook.Worksheets(cmbSheets.Value)

Set rLastCell = LastCell(shtSelected)

With shtSelected

Me.txtColA = .Cells(rLastCell.Row, 1)

Me.txtColB = .Cells(rLastCell.Row, 2)

Me.txtColC = .Cells(rLastCell.Row, 3)

End With

End Sub

'This function can be placed in a normal module.

'Finds the last cell given a worksheet reference.

Public Function LastCell(wrkSht As Worksheet) As Range

Dim lLastCol As Long, lLastRow As Long

On Error Resume Next

With wrkSht

lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column

lLastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row

If lLastCol = 0 Then lLastCol = 1

If lLastRow = 0 Then lLastRow = 1

Set LastCell = wrkSht.Cells(lLastRow, lLastCol)

End With

On Error GoTo 0

End Function

注 -如果任何一个值,需要特定的格式化然后应该复印时使用该命令FORMAT被添加。
E.g.如果一个单元格的日期为2016年5月1日的01/05/2016,那么它将在文本框中显示为5/1/2016(转换为美国日期格式)。
使用代码Me.txtColC = Format(.Cells(rLastCell.Row, 3), "dd-mmm-yy")将在窗体上显示日期为01-May-16
同样的货币应该被添加为Me.txtColB = Format(.Cells(rLastCell.Row, 2), "Currency")否则£15将显示为。

如果你想排除某些表看看SELECT CASE...END SELECT代码块(或IF...ELSE...END IF

如果你想在片改变为您在组合框中选择不同的值,只是增加shtSelected.Select到的结束cmbSheets_Change()事件。

以上是 用户窗体基于企业价值识别正确的工作表 的全部内容, 来源链接: utcz.com/qa/265288.html

回到顶部