VBA:object不支持此属性或方法

时间:2017-07-13 07:55:54

标签: vba object

我编写了一个非常简单的宏,它打开另一个工作簿并从此工作簿中选择数据范围。 但是,我一直收到此警告:对象不支持此属性或方法

有什么问题?

Sub data()
Dim wb As Workbook
Dim ws As Worksheet
Dim filename As String
Dim lastrow As Integer
Dim lastcolumn As Integer
Dim range_to_copy As Range

'open workbook
filename = "C:\Users\mk\Desktop\sales report\Sales Report.xls"
Set wb = Workbooks.Open(filename)
Set ws = wb.Sheets("data")

lastcolumn = wb.ws.Cells(1, wb.ws.Columns.Count).End(xlToLeft).Column
lastrow = wb.ws.Cells(wb.ws.Roows.Count, 1).End(xlToLeft).Row

range_to_copy = Range("Cells(1,1):Cells(lastrow,lastcolumn)")

End sub

3 个答案:

答案 0 :(得分:2)

有很多不妥之处。

修改
Dim lastrow As Integer Dim lastcolumn As Integer
Integer可以存储最多32,767的数字。这对列来说不是问题,但会在行号上引发溢出错误。最好使用Long数据类型 - 数字最多为2,147,486,647。

ws变量已经引用了工作簿,因此您只需要:
lastcolumn = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

lastrow = wb.ws.Cells(wb.ws.Roows.Count, 1).End(xlToLeft).Row
Rows只有一个o 修改: xlToLeft查看最右侧的单元格并向左侧工作。在查找行时,您需要使用xlUp查看最后一个单元格并进行操作。

range_to_copy = Range("Cells(1,1):Cells(lastrow,lastcolumn)")
这是一个对象,因此您必须Set它。单元格引用用逗号分隔,不应保存为字符串。

Sub data()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim filename As String
    Dim lastrow As Long
    Dim lastcolumn As Long
    Dim range_to_copy As Range

    'open workbook
    filename = "C:\Users\mk\Desktop\sales report\Sales Report.xls"
    Set wb = Workbooks.Open(filename)
    Set ws = wb.Sheets("data")

    lastcolumn = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Set range_to_copy = ws.Range(ws.Cells(1, 1), ws.Cells(lastrow, lastcolumn))

End Sub  

注意:每个范围引用都以工作表引用开头。如果没有它,它将始终查看当前活动的工作表,因此如果您不在data工作表上,则以下将失败,因为第二个单元格引用将查看活动工作表。
ws.Range(ws.Cells(1, 1), Cells(lastrow, lastcolumn))

可能值得查看With....End With代码块。

答案 1 :(得分:0)

您的代码中存在多个错误。 尝试

object.size(x)

答案 2 :(得分:0)

定义并设置ws工作表对象后,您不再需要引用wb对象,因为ws工作表对象已完全通过{{1在Sheets("data")工作簿中。

现在,您需要做的就是使用wb语句,如下面的代码所示:

With