繁体   English   中英

对象'_Global'的方法'Range'在第二次运行时失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM