VBA错误代码 - 800A01A8:需要对象':'选择

时间:2012-10-03 08:50:40

标签: excel vba excel-vba

运行此vba代码时出现此错误。它的语法错误。请帮帮我。这是脚本。 做什么脚本,将数据从一列复制到另一列,然后选择复制的列。

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

3 个答案:

答案 0 :(得分:1)

我发现您已将问题标记为Excel / Excel-VBA

如果您在VBA Excel中执行此操作,则无需使用CreateObject创建另一个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从代码中删除。它不仅会减慢代码速度,还会给您带来运行时错误。见link。我已经对下面的代码进行了评论,以便您在理解它时不会遇到任何问题。 :)

您的上述代码也可以写成(我还没有测试代码

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

如果您发现实际上不需要使用.Select或使用Selection

答案 1 :(得分:0)

Selection上的Application属性是一个对象,因此您需要使用Set进行分配。变化

selection=objExcel.Selection

Set selection=objExcel.Selection

并且下一行应该有用。

答案 2 :(得分:0)

以下行是可疑的:

selection=objExcel.Selection

selection可能应该是全球Selection属(Application)。但你无法分配它;它是只读的。小写s的拼写表明Excel在这里很困惑。此外,您需要使用Set来分配对象。