热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.Find之后存储范围值

向大家致意,这是一个较大的代码的一部分,该代码均基于输入文本进行过滤,

向大家致意,这是一个较大的代码的一部分,该代码均基于输入文本进行过滤,然后从与保修子类型相关的值中创建小计,将其应用于多个不同的工作表,并且都能奏效。

由于可能存在 MANY 个不同的Warranties子类型,因此我继续逐一检查每个子项,首先检查“ WarrantyPrefA Total”的确切匹配情况(这应该在AJ列上)(如果存在),我希望它将该范围值存储在变量(GaRangeID)中,以便我可以应用该范围的偏移量来获取其他列中存在的2个数值并将其粘贴到另一个工作簿上。如果不存在,我希望它终止该查找,然后继续查找另一个完全匹配的情况。但是它不起作用。我的猜测是我正在弄乱.find内部语法以在不正确的范围内进行搜索。

Dim GaRangeID As Range
Dim WBModeloA1 As Worksheet
Dim WBModeloA2 As Worksheet
Set WBModeloA1 = Workbooks("ModeloAnalisis.xlsm").Sheets("cartera 1")
Set WBModeloA2 = Workbooks("ModeloAnalisis.xlsm").Sheets("cartera 3")

'GPB

Dim strSearch As String
Dim lastrow As Long
strSearch = "WarrantyPrefA Total"
lastrow = WBevoDeuM.Range("AJ" & Rows.Count).End(xlUp).Row
Set GaRangeID = WBevoDeuM.Range("AJ1","AJ" & lastrow).Find(What:=strSearch,LookIn:=xlFormulas,LookAt:=xlPart,SearchOrder:=xlByRows,SearchDirection:= _
xlNext,MatchCase:=False,SearchFormat:=False)
If Not GaRangeID Is Nothing Then
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
Else
End If

'GPA

Set GaRangeID = Cells.Find(What:="WarrantyPrefB Total",After:=activeCell,LookIn _
:=xlFormulas,LookAt:=xlWhole,SearchFormat:=False)
If Not GaRangeID Is Nothing Then
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
Else
End If

'之所以显示它重复相同的结构,是因为我以前用另一种方式定义了“查找”部分,所以后来又发现了另一个原因。

采用以下方式将小计正确粘贴到其他工作簿上,但我将其丢弃,因为它始终将GaRangeID设置为活动单元格,当搜索一无所获时,活动单元格仍为找到了旧的小计,因此只将WarrantyA的值粘贴到B上。

Cells.Find(What:="WarrantyPrefB Total",LookIn _
:=xlFormulas,SearchDirection:= _
xlNext,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",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

推荐阅读
author-avatar
麦豪小仙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有