如何使用.Find和Offset调试VBA代码?
我正在练习VBA,我的代码需要一些帮助/更正。 在这个任务中,我将创建一个搜索工具,从组合框中查找每个工作表中的选定值。每个结果都列在第一页上 问题:如何使用.Find和Offset调试VBA代码?,vba,excel,Vba,Excel,我正在练习VBA,我的代码需要一些帮助/更正。 在这个任务中,我将创建一个搜索工具,从组合框中查找每个工作表中的选定值。每个结果都列在第一页上 问题: 在代码中,我定义了.Find方法,范围为rFound。在每个工作表上,搜索值位于D列。我想将行从列B复制到E。我已经评论了一次尝试,我是如何尝试用偏移量选择该范围的,但我收到了一个错误。为什么以及如何解决这个问题 当我想粘贴(列出)结果时,我希望它从第1页第3行列K开始。运行代码后,它选择正确的目标,但不粘贴任何内容。如何解决这个问题 我还尝试在
.Find
方法,范围为rFound
。在每个工作表上,搜索值位于D列
。我想将行从列B
复制到E
。我已经评论了一次尝试,我是如何尝试用偏移量选择该范围的,但我收到了一个错误。为什么以及如何解决这个问题K
开始。运行代码后,它选择正确的目标,但不粘贴任何内容。如何解决这个问题getOwner
的行
Dim ws As Worksheet, OutputWs As Worksheet, wsLists As Worksheet
Dim rFound As Range ', getOwner As Range
Dim strName As String
Dim count As Long, LastRow As Long
Dim IsValueFound As Boolean
'Dim cboSelectName As ComboBox
Dim a As String
IsValueFound = False
Set OutputWs = Worksheets("Teszt") '---->change the sheet name as required
LastRow = OutputWs.Cells(Rows.count, "A").End(xlUp).Row
Set wsLists = Worksheets("Lists")
a = ComboBox1.Value
On Error Resume Next
strName = a
If strName = "" Then Exit Sub
For Each ws In Worksheets
If ws.Name <> "Output" Then
With ws.UsedRange
Set rFound = .Find(What:=strName, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole)
If Not rFound Is Nothing Then
Application.Goto rFound, True
IsValueFound = True
'MsgBox rFound.Row
rFound.EntireRow.Copy
'Rfound keres - rFound.Range(rFound(Offset(-2,")),rFound.Offset(1,"")).Copy ' ---> This is a suggestion
OutputWs.Cells(LastRow + 2, 11).PasteSpecial xlPasteAll
'getOwner.Range(K2, R2).Copy ' attempt to copy the header for each search result
'getOwner.Cells(LastRow + 1, 6).Paste
Application.CutCopyMode = False
LastRow = LastRow + 1
End If
End With
End If
Next ws
On Error GoTo 0
If IsValueFound Then
OutputWs.Select
MsgBox "Search Complete!"
Else
MsgBox "Value not found"
End If
Dim ws As Worksheet,OutputWs As Worksheet,wslist As Worksheet
Dim rFound As Range',getOwner As Range
将strName设置为字符串
按长度计算,最后一行按长度计算
Dim IsValueFound为布尔值
'Dim cboSelectName作为组合框
像线一样变暗
IsValueFound=False
设置OutputWs=工作表(“Teszt”)”--->根据需要更改工作表名称
LastRow=OutputWs.Cells(Rows.count,“A”).End(xlUp).Row
设置wsLists=工作表(“列表”)
a=ComboBox1.Value
出错时继续下一步
strName=a
如果strName=“”,则退出Sub
对于工作表中的每个ws
如果ws.Name是“输出”,那么
使用ws.UsedRange
设置rFound=.Find(What:=strName,After:=.Cells(1,1),LookIn:=xlValues,LookAt:=xlWhole)
如果没有找到,那就什么都不是了
Application.Goto-rFound,True
IsValueFound=True
'MsgBox rFound.Row
rFound.EntireRow.Copy
'Rfound keres-Rfound.Range(Rfound(Offset(-2)”),Rfound.Offset(1)”)。Copy'-->这是一个建议
OutputWs.Cells(LastRow+2,11).PasteSpecial xlPasteAll
'getOwner.Range(K2,R2).Copy'尝试复制每个搜索结果的标题
'getOwner.Cells(LastRow+1,6).粘贴
Application.CutCopyMode=False
LastRow=LastRow+1
如果结束
以
如果结束
下一个ws
错误转到0
如果找到了,那么
OutputWs.Select
MsgBox“搜索完成!"
其他的
MsgBox“未找到值”
如果结束
您正在选择整行,但正在将其粘贴到K列。如果您复制整行,则只能将其复制到A列。这就是它不起作用的原因。因此,我建议您使用偏移部分。
在偏移量中,第一部分是行,第二部分是列。
你可以这样做
Dim sth as Range
set sth = .range(.rfound.offset(0,-2),.rfound.offset(0,1)).copy
但是我不确定。这方面不是很好。我不完全确定你在哪里复制什么,但是复制
rFound
的行到列K
的输出
的单元格应该是应用程序。Intersect(rFound.EntireRow,rFound.sheet.Range(“B:E”)。复制OutputWs.cells(LastRow+2,“K”)
。或rFound.EntireRow.Cells(1,“B”)、rFound.EntireRow.Cells(1,“E”)、Copy OutputWs.Cells(LastRow+2,“K”)
。或rFound.EntireRow.Cells(1,“B”)。Resize(1,4)。Copy OutputWs.Cells(LastRow+2,“K”)
。最后一个正在使用rFound.EntireRow.Cells(1,“B”)。Resize(1,4)。复制不幸的是,搜索没有…你能告诉我为什么代码不搜索下拉列表值吗?在我的excel工作表中,我想列出每个工作表上出现的所有名称,这些名称是从下拉列表中选择的。我在第2页的每行中创建了一个类似4个相同名称的示例。当我运行代码时,它只显示第一个r结果。这是为什么?它们都在工作,并且做完全相同的事情。因为Find
一次只找到一个匹配项。如果你想要所有匹配项,你可以。