一旦 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
一直在四处寻找,有点困惑。
我有一个 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