一旦 A 列与 USERFORM 文本框匹配,复制一行数据

Copy a row of data once column A matches a USERFORM textbox

一直在四处寻找,有点困惑。

我有一个 sheet(此处称为 "ModelSpec"),其中包含 header 从 A5:Z5 开始的电视数据(示例 Header 标题是 "Part Number"、"Brand"、"Size"、"Resolutions"...等)。有些是数据,有些是空白单元格。

我创建了一些 USERFORM 以允许用户select他们想要如何搜索他们的模型规范。 我现在要做的是获取位于用户 select 编辑的 USERFORM 文本框中的数据 ("Part Number"),然后在 "ModelSpec" sheet 的零件号(位于 A6:A 列?)。数据的行数可能会改变,我想我们需要一个 FOR 循环来在空行处停止。

一旦找到,整行将被复制并粘贴到同一 ModelSpec sheet 的 A1:Z1 上。 所以基本上我目前正在 FORMS 中处理 Private Sub,而不是 MODULES。

从那里我有另一个代码可以将详细信息提取到其他地方的表格。

请帮助这个困惑的人。

这是您的起点,包含完成您所要求的任务所需的所有要素。

发生了什么:

  • 用户窗体上的单击事件启动此代码
  • 获取包含数据
  • 的sheet的最后一行
  • 遍历所有行
  • 将 txtPartNumber 的值与循环中当前行的 A 列中的值进行比较。
  • 如果找到匹配项,则显示确认消息并将正在搜索的行复制到相同 sheet 的第 1 行。
  • 如果找不到匹配项,则显示消息。

备注:

  • 没有处理用户输入错误。没有大写到小写,也没有限制用户选择的下拉框。一件好事(在另一个问题中)是创建一个动态下拉列表或组合框,由现有的零件号填充,限制用户输入错误。

  • 如果页面上有多个匹配项,它将遍历所有行并将匹配项复制到第 1 行。然后复制第 1 行,之后找到任何匹配项,所以最后一个将是您唯一看到的。如果您希望它只匹配第一个,则在将搜索行复制到第 1 行后立即包含一个 End 语句。我假设您的搜索列具有唯一的 ID/部件号。

代码:

Private Sub cmdSearch_Click()

Dim lastRow As Long, lCol As Long, lRow As Long
Dim sName As String

    sName = "ModelSpec"

    lastRow = Sheets(sName).Range("A" & Rows.count).End(xlUp).row

    For lRow = 6 To lastRow
        'Check to see if A(lRow) = TextBox.  Exact match required
        If Sheets(sName).Cells(lRow, "A").Text = txtPartNumber.Text Then
            MsgBox("Match Found for Part #: " & txtPartNumber.Text)
            For lCol = 1 To 26      'Loop through columns A-Z, Copy lRow to Row 1
                Sheets(sName).Cells(1, lCol) = Sheets(sName).Cells(lRow, lCol)
            Next lCol
        Else
            MsgBox("No match found for Part #: " & txtPartNumber.Text)
        End If
    Next lRow

End Sub