大家好我无法解决这个错误。
错误已在线:lambda
上面的代码搜索表"男性"和女性"对于A,K和M列的匹配。如果所有3列匹配,则将两张纸上的行复制并粘贴在纸张上#34;混合" 。
有谁知道这个解决方案?任何帮助表示赞赏!
lastrmale = malesheet.Range("A" & malesheet.Range("A1").SpecialCells(xlLastCell).Row + 1).End(xlUp).Row
答案 0 :(得分:1)
如错误所述,您的范围定义错误。
请将此行视为正确的示例:
occupied
请注意,范围将解析为A1,A2,..等
对于抛出错误的行,引用的范围是什么单元格?
If (malesheet.Range("A" & i).value = ...
尝试分解该操作的各个部分以确认值是否符合预期。 设置断点或将值写入其他单元格以进行调试: e.g。
malesheet.Range("A" & malesheet.Range("A1").SpecialCells(xlLastCell).Row + 1).End(xlUp).Row
确认基础值后,您可以对该范围的测试进行硬编码。
答案 1 :(得分:1)
爆炸的路线是一项任务。该作业的右侧是值表达式;价值表达只要你可以制作它们,VBA就不会感觉到什么。但是它们越长,它们在破坏时就越难以阅读,维护和修复:
lastrmale = malesheet.Range("A" & malesheet.Range("A1").SpecialCells(xlLastCell).Row + 1).End(xlUp).Row
您在该表达式中有不少于6个成员调用:
malesheet.Range("A" & ...)
malesheet.Range("A1")
[Range].SpecialCells(xlLastCell)
[Range].Row
[Range].End(xlUp)
[Range].Row
让自己成为一个Range
或Worksheet
的函数,并返回代表最后一行的Long
。
现在你有:
lastrmale = malesheet.Range("A" & FindLastRow(malesheet.Range("A1")) + 1).Row
也可能是:
Dim rename_me As Long
rename_me = FindLastRow(malesheet.Range("A1")
lastrmale = malesheet.Range("A" & rename_me + 1).Row
这看起来很愚蠢,因为你之后的行号只是rename_me + 1
。
答案 2 :(得分:0)
我相信在下面的代码中你试图找出最后一行。 但我认为它不会起作用
lastrmale = malesheet.Range("A" & malesheet.Range("A1").SpecialCells(xlLastCell).Row + 1).End(xlUp).Row
它假设是
lastrmale = malesheet.cells.SpecialCells(xlLastCell).Row + 1
顺便说一下,单元格或范围(" A1")都是相同的
malesheet.cells.SpecialCells(xlLastCell).Row + 1 = malesheet.Range("A1").SpecialCells(xlLastCell).Row + 1
或我最喜欢的方法
lastrmale = malesheet.Range("A:A").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row