运行此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
答案 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
来分配对象。