我编写了一个非常简单的宏,它打开另一个工作簿并从此工作簿中选择数据范围。 但是,我一直收到此警告:对象不支持此属性或方法
有什么问题?
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
答案 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