VBA错误代码 – 800A01A8:所需对象':'select

运行此vba代码时出现此错误。 其种类的语法错误。 请帮助我。 这是脚本。 脚本所做的是将数据从一列复制到另一列并select复制的列。

Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objWorkbook = objExcel.Workbooks.Open("C:\Users\pc\Report\report_20120912.xls") Set ws = objWorkbook.Worksheets("Data") Set SelRange = objExcel.Selection ws.Range("F2:F1000").AdvancedFilter 2,,ws.Range("M2"),True ws.Range("N1") = ws.Range("A1") ws.Range("O1") = ws.Range("B1") //Below line has the bug ws.Range("M2").Select selection=objExcel.Selection col1=selection.End(xlDown) //showing error on this line ws.Range(selection,col1).Select n = ws.Range.Count ws.Range("S2").Select 

我看到你已经把问题标记为Excel / Excel-VBA

如果你在VBA Excel中这样做,那么你不需要使用CreateObject来创build另一个Excel实例。 你也可以使用当前的实例

看到这个代码

 Sub Sample() Dim objWorkbook As Workbook, ws As Worksheet Set objWorkbook = Workbooks.Open("C:\Users\pc\Report\report_20120912.xls") Set ws = objWorkbook.Worksheets("Data") With ws ' '~~> Rest of the code ' End With End Sub 

正如我的评论中提到的,抛出Selection / Select你的代码。 它不仅会减慢你的代码,而且会给你带来运行时错误。 看到这个链接 。 我已经评论下面的代码,以便你不会有任何理解它的问题。 🙂

你上面的代码也可以写成( 我没有testing过这个代码

 Option Explicit Sub Sample() Dim objWorkbook As Workbook, ws As Worksheet Dim lRow As Long, n As Long Dim mRange As Range '~~> Open the workbook Set objWorkbook = Workbooks.Open("C:\Users\pc\Report\report_20120912.xls") '~~> Set the sheet that you want to work with Set ws = objWorkbook.Worksheets("Data") With ws .Range("F2:F1000").AdvancedFilter 2, , .Range("M2"), True .Range("N1").Value = .Range("A1").Value .Range("O1").Value = .Range("B1").Value '~~> Find the last row lRow = .Range("M" & .Rows.Count).End(xlUp).Row '~~> Set your range Set mRange = .Range("M2:M" & lRow) n = mRange.Count End With End Sub 

如果您注意到您实际上不需要使用。 Selection或使用Selection

Application上的Selection属性是一个对象,所以你需要使用Set来分配它。 更改

 selection=objExcel.Selection 

 Set selection=objExcel.Selection 

下一行应该工作。

以下行是可疑的:

 selection=objExcel.Selection 

selection可能被认为是Application的全局Selection (propery)。 但是你不能指定它; 它是只读的。 用小写字母拼写表示Excel在这里是困惑的。 此外,您将需要使用Set来分配一个对象。