错误1004方法"范围" '工作表' _失败了

时间:2015-12-23 00:27:11

标签: excel vba excel-vba

大家好我无法解决这个错误。

错误已在线:lambda

上面的代码搜索表"男性"和女性"对于A,K和M列的匹配。如果所有3列匹配,则将两张纸上的行复制并粘贴在纸张上#34;混合" 。

有谁知道这个解决方案?任何帮助表示赞赏!

lastrmale = malesheet.Range("A" & malesheet.Range("A1").SpecialCells(xlLastCell).Row + 1).End(xlUp).Row

3 个答案:

答案 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

让自己成为一个RangeWorksheet的函数,并返回代表最后一行的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