VBA:获取运行时1004:使用单元格时,对象'_Worksheet'的方法'Range'失败

时间:2015-01-06 15:54:53

标签: excel vba excel-vba runtime-error

我有2个工作表:资产和概述。

这些功能都放在一个模块中。

Public Function GetLastNonEmptyCellOnWorkSheet(Ws As Worksheet, Optional sName As String = "A1") As Range
   Dim lLastRow        As Long
   Dim lLastCol        As Long
   Dim rngStartCell    As Range

   Set rngStartCell = Ws.Range(sName)
   lLastRow = Ws.Cells.Find(What:="*", After:=Ws.Range(rngStartCell), LookIn:=xlFormulas, _
           Lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
           MatchCase:=False).Row

   lLastCol = Ws.Cells.Find(What:="*", After:=Ws.Range(rngStartCell), LookIn:=xlFormulas, _
           Lookat:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
           MatchCase:=False).Column

   Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))
End Function

从工作表概述我致电:

   Set RngAssets = GetLastNonEmptyCellOnWorkSheet(Worksheets("Assets"), "A1")

但我总是得到错误:

  

VBA:获取运行时1004:对象'_Worksheet'的方法'范围'   失败

就行:

 Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))

工作表资产上有数据。最后使用的单元格是W9(lLastRow = 9,lLastCol = 23)。

知道为什么这不起作用吗?

3 个答案:

答案 0 :(得分:12)

以下是您的问题陈述:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol))

评估最里面的括号:

ws.Cells(lLastRow, lLastCol)

范围,但范围的默认属性是.Value。除非存在与此值对应的命名范围,否则将出现错误。

相反,请尝试:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Range(Ws.Cells(lLastRow, lLastCol).Address)

或者你可以稍微简化一下:

Set GetLastNonEmptyCellOnWorkSheet = Ws.Cells(lLastRow, lLastCol)

答案 1 :(得分:1)

当我使用打击代码时,发生了相同的错误。

def get_all_articles():
    articles = Article.objects.all()
    data, errors = ArticleListSchema(many=True).dump(articles)
    return data

更改了密码,错误消失了。

Dim x As Integer
Range(Cells(2, x + 13))

答案 2 :(得分:-1)

我发现当我想要使用的范围不在活动工作表中时,则发生了错误。在您想要使用范围方法之前激活工作表,这解决了我的问题。

这是我的代码:我想为数组指定一个范围。

keyDataSheet.Activate
LANGKeywords = keyDataSheet.Range(Cells(2, 1), Cells(LANGKWCount, 1))
COLKeywords = keyDataSheet.Range(Cells(3, 2), Cells(COLKWCount, 2))
currentWB.Activate