1

运行此 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
4

3 回答 3

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从你的代码中抛出。它不仅会减慢您的代码速度,还会给您带来运行时错误。请参阅此链接。我已经注释了下面的代码,以便您理解它不会有任何问题。:)

你上面的代码也可以写成(我没有测试过代码

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

于 2012-10-03T09:17:33.440 回答
0

Selectionon 属性Application是一个对象,所以你需要使用它Set来分配它。改变

selection=objExcel.Selection

Set selection=objExcel.Selection

下一行应该可以工作。

于 2012-10-03T08:57:47.310 回答
0

以下行是可疑的:

selection=objExcel.Selection

selection可能应该是全局Selection属性(的Application)。但是你不能分配给它;它是只读的。小写的拼写s表示 Excel 在这里混淆了。此外,您需要使用Set来分配对象。

于 2012-10-03T09:00:56.560 回答