Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在.Find之后存储范围值_Excel_Vba_Find_Range - Fatal编程技术网

Excel 在.Find之后存储范围值

Excel 在.Find之后存储范围值,excel,vba,find,range,Excel,Vba,Find,Range,这是一个更大的代码的一部分,这两个代码都基于输入文本进行过滤,然后根据与保修子类型相关的值创建小计,这适用于多个不同的工作表,并且都有效 可能存在许多不同的子类型 我分别检查每一个,首先检查“担保总额”的精确匹配情况(这应该在AJ列上) 如果存在,我希望将该范围值存储在变量(GaRangeID)中,以便应用该范围的偏移量来获取其他列中的两个数值,并将其粘贴到另一个工作簿上 如果它不存在,我想终止这个发现,并找到另一个完全匹配的案例 我猜我弄乱了。查找内部语法以搜索正确的范围 Dim GaRa

这是一个更大的代码的一部分,这两个代码都基于输入文本进行过滤,然后根据与保修子类型相关的值创建小计,这适用于多个不同的工作表,并且都有效

可能存在许多不同的子类型

我分别检查每一个,首先检查“担保总额”的精确匹配情况(这应该在AJ列上)

  • 如果存在,我希望将该范围值存储在变量(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”)
部分无效。