Excel 在.Find之后存储范围值
这是一个更大的代码的一部分,这两个代码都基于输入文本进行过滤,然后根据与保修子类型相关的值创建小计,这适用于多个不同的工作表,并且都有效 可能存在许多不同的子类型 我分别检查每一个,首先检查“担保总额”的精确匹配情况(这应该在AJ列上)Excel 在.Find之后存储范围值,excel,vba,find,range,Excel,Vba,Find,Range,这是一个更大的代码的一部分,这两个代码都基于输入文本进行过滤,然后根据与保修子类型相关的值创建小计,这适用于多个不同的工作表,并且都有效 可能存在许多不同的子类型 我分别检查每一个,首先检查“担保总额”的精确匹配情况(这应该在AJ列上) 如果存在,我希望将该范围值存储在变量(GaRangeID)中,以便应用该范围的偏移量来获取其他列中的两个数值,并将其粘贴到另一个工作簿上 如果它不存在,我想终止这个发现,并找到另一个完全匹配的案例 我猜我弄乱了。查找内部语法以搜索正确的范围 Dim GaRa
- 如果存在,我希望将该范围值存储在变量(GaRangeID)中,以便应用该范围的偏移量来获取其他列中的两个数值,并将其粘贴到另一个工作簿上
- 如果它不存在,我想终止这个发现,并找到另一个完全匹配的案例
。查找内部语法以搜索正确的范围
Dim GaRangeID作为范围
将WBModeloA1设置为工作表
将WBModeloA2设置为工作表
设置WBModeloA1=工作簿(“ModeloAnalisis.xlsm”).工作表(“卡特拉1”)
设置WBModeloA2=工作簿(“ModeloAnalisis.xlsm”).工作表(“卡特拉3”)
“GPB
作为字符串的Dim stresearch
最后一排一样长
strearch=“担保总额”
lastrow=WBevoDeuM.Range(“AJ”和Rows.Count).End(xlUp).Row
设置GaRangeID=WBevoDeuM.Range(“AJ1”、“AJ”和lastrow)。查找(What:=strearch,LookIn:=xlFormulas,LookAt:=xlPart,SearchOrder:=xlByRows,SearchDirection:=_
xlNext,MatchCase:=False,SearchFormat:=False)
如果不是,GaRangeID什么都不是
WBModeloA1.Range(“E67”)=GaRangeID.Offset(0,-3.Range(“A1”)
WBModeloA1.Range(“E67”).Value=WBModeloA1.Range(“E67”).Value/1000
WBModeloA2.Range(“H91”)=GaRangeID.Offset(0,-21.Range(“A1”)
WBModeloA2.Range(“H91”).Value=WBModeloA2.Range(“H91”).Value/1000
其他的
如果结束
“GPA
设置GaRangeID=Cells.Find(What:=“WarrantyPrefB Total”,After:=ActiveCell,LookIn_
:=xlFormulas,LookAt:=xlWhole,SearchOrder:=xlByRows,SearchDirection:=_
xlNext,MatchCase:=False,SearchFormat:=False)
如果不是,GaRangeID什么都不是
WBModeloA1.Range(“E65”)=GaRangeID.Offset(0,-3).Range(“A1”)
WBModeloA1.Range(“E65”).Value=WBModeloA1.Range(“E65”).Value/1000
WBModeloA2.Range(“H90”)=GaRangeID.Offset(0,-21.Range(“A1”)
WBModeloA2.Range(“H90”).Value=WBModeloA2.Range(“H90”).Value/1000
其他的
如果结束
我之所以显示它重复相同的结构,但随后又有另一个find,是因为我以前用另一种方式定义了“find”部分
下面的方法正确地将小计粘贴到另一个工作簿上,但我放弃了它,因为它总是将GaRangeID设置为活动单元格,当搜索没有得到任何结果时,活动单元格保持为找到的旧小计,因此它只将A的值粘贴到B上
Cells.Find(What:="WarrantyPrefB Total", After:=ActiveCell, LookIn _
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Set GaRangeID = ActiveCell
除了稍微简化代码并使用xlValues
而不是xlFormulas
作为LookIn
参数之外,我没有什么可以提供的
Sub Tester()
Dim f As Range
Dim WBModeloA1 As Worksheet
Dim WBModeloA2 As Worksheet
Dim wsData As Worksheet, rngSearch As Range
'use "ThisWorkbook" if it's where your code lives
Set WBModeloA1 = ThisWorkbook.Sheets("Cartera 1")
Set WBModeloA2 = ThisWorkbook.Sheets("Cartera 3")
Set wsData = ThisWorkbook.Sheets("Data") 'the sheet you're searching
'define a range to search
Set rngSearch = wsData.Range(wsData.Range("AJ1"), _
wsData.Cells(Rows.Count, "AJ").End(xlUp))
'if you have multiple of these following blocks you really need a loop
Set f = rngSearch.Find(what:="WarrantyPrefA Total", LookIn:=xlValues, _
lookat:=xlWhole, MatchCase:=False)
If Not f Is Nothing Then
WBModeloA1.Range("E67") = f.Offset(0, -3).Value / 1000
WBModeloA2.Range("H91") = f.Offset(0, -21).Value / 1000
End If
Set f = rngSearch.Find(what:="WarrantyPrefB Total", LookIn:=xlValues, _
lookat:=xlWhole, MatchCase:=False)
If Not f Is Nothing Then
WBModeloA1.Range("E65") = f.Offset(0, -3).Value / 1000
WBModeloA2.Range("H90") = f.Offset(0, -21).Value / 1000
End If
End Sub
没有工作表限定符的Cells.Find()
将默认为活动工作表-这可能会导致问题,因此第一步是更新代码,以便在引用任何范围/单元格时始终使用特定的工作表/范围。在本例中,worksheetReference.Range(“AJ:AJ”).find()
首先,对于回复,我继续尝试解决它,并找到了相同的解决方案,我添加了Dim WBevoDeuM作为工作表
定义它并Set GaRangeID=WBevoDeuM.Range(“AJ:AJ11000”)。find[…]
但仍然没有结果。我添加了一个如果GaRangeID为空,那么MsgBox“在单元格中找不到值”&vbCrLf
并且有效地证明了它即使在单元格中也找不到值。AJ上的信息在第1行有一个标题,如果它是相关信息。你能用修改后的代码更新问题吗?如果找不到该值,则单元格中该值的搜索值肯定有问题。如果将代码中的值复制/粘贴到单元格中,是否找到该值?如果找到值GaRangeID.Offset(0,-21)。范围(“A1”)
不是有效的范围地址。范围(“A1”)
部分无效。