![](/img/trans.png)
[英]Run-time error '1004' : Method 'Range' of object'_Global' failed
[英]Method 'Range' of Object'_Global' Failed when run for the 2nd time
我遇到错误问题:
对象'_Global'的方法'范围'失败
...第二次运行时的一段代码。
整个程序是通过访问查询从 SQL 数据库中导出信息并创建源表,然后导出到 excel 电子表格,源表包含来自 14 个不同位置的信息。 因此,Excel 电子表格创建了 14 次(并最终通过电子邮件发送给 14 个不同的人)
为了测试代码,我把它放在一个 Do While 循环中来模拟必须运行多次的代码,几十年来我没有做过任何编程,所以我很生疏,那部分代码失败了是:
.Cells.EntireRow.EntireColumn.Sort key1:=Range("G2"), order1:=xlDescending, Header:=xlYes
完整代码:
Private Function Open_Excel_Spreadsheet()
Dim Cnt As Integer 'Counter
Cnt = 1
Do While Cnt < 4
Dim oExcel As Excel.Application
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
Dim LastRow As Long
Dim FirstNewRow As Long
Dim i As Integer 'Row counter in the range of 2 to FirstNewRow
i = 2
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open([MyDocsPath], , ReadOnly:=False)
Set oSheet = oBook.Worksheets(1)
oExcel.Visible = True
'Find the last used row in Column A and set LastRow and FirstNewRow variables
With oSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
FirstNewRow = LastRow + 1
Debug.Print Cnt; FirstNewRow
'Format the Spreadsheet
With oSheet
.Sort.SortFields.Clear
' Next line generates "Method 'Range' of Object'_Global' Failed" the second time it runs
.Cells.EntireRow.EntireColumn.Sort key1:=Range("G2"), order1:=xlDescending, Header:=xlYes
.Cells(FirstNewRow, 5) = "=sum(E2:E" & [LastRow] & ")"
.Cells(FirstNewRow, 6) = "=sum(F2:F" & [LastRow] & ")"
For i = 2 To FirstNewRow
.Cells(i, 7) = "=IF(+E" & [i] & "=0,0,Round(((+E" & [i] & "-F" & [i] & ")/E" & [i] & ")*100,2))"
Next i
.Range("E1:G1").EntireColumn.NumberFormat = "#,##0.00_);[Red]-#,##0.00"
.Range("a1").EntireRow.EntireColumn.AutoFit
End With
'Save Workbook and drop Excel
oBook.Close True
Cnt = Cnt + 1
Loop
End Function
实际上, Range("G2")
可能指也可能不指oSheet工作表上的 G2 单元格。 唯一可以确定的是,它指的是工作表上当前拥有ActiveSheet 属性的 G2 单元格。
试试看,
.Cells.EntireRow.EntireColumn.Sort key1:=.Range("G2"), order1:=xlDescending, Header:=xlYes
注意.Range("G2")
而不是Range("G2")
。 这明确引用了With... End With 语句引用的工作表上的 G2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.