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

时间:2015-01-08 08:41:44

标签: excel-vba vba excel

一直在寻找并有点困惑。

我有一张表(此处称为“ModelSpec”),其中填充了电视数据,标题以A5:Z5开头(示例标题标题为“部件号”,“品牌”,“尺寸”,“分辨率”)。 ..等等)。有些是数据,有些是空白单元格。

我创建了一些USERFORM,允许用户选择他们想要搜索模型规范的方式。 我现在要做的是获取位于用户选择的USERFORM文本框中的数据(“部件号”),并在“ModelSpec”表中搜索部件号(位于A6列:A列) ?)。数据行数可能会改变,我想我们需要一个FOR循环来停止空行。

找到后,整个行将被复制并仅在同一ModelSpec表的A1:Z1上粘贴值。 所以基本上我目前正在FORMS中的Private Sub工作,而不是MODULES。

从那里我有另一个代码将细节提取到其他地方。

请帮助这个迷茫的男人。

1 个答案:

答案 0 :(得分:0)

这是您的起点,拥有您需要做的所有要素。

发生了什么:

  • userForm上的Click事件启动此代码
  • 获取包含数据的工作表的最后一行
  • 遍历所有行
  • 将txtPartNumber的值与循环中当前行的A列中的值进行比较。
  • 如果找到匹配项,则显示确认消息并将搜索的行复制到同一工作表的第1行。
  • 如果未找到匹配项,请显示消息。

备注:

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

  • 如果页面上有多个匹配项,它将遍历所有行并将匹配项复制到第1行。然后复制第1行,之后找到任何匹配项,因此最后一个将匹配是你唯一看到的人。如果您希望它仅匹配FIRST,则在将搜索行复制到第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