错误处理中的 Excel VBA 运行时错误 1004

Posted

技术标签:

【中文标题】错误处理中的 Excel VBA 运行时错误 1004【英文标题】:Excel VBA runtime-error 1004 in error handling 【发布时间】:2017-11-09 15:45:46 【问题描述】:

这是我第一次发帖,如有错误请见谅。

我在工作簿中运行以下代码来打开其他 3 个工作簿,从中复制并粘贴到原始工作簿中。 我已设置错误处理以捕获哪个工作表引发错误(如果有)以在故障排除时提供帮助。 对于第一张 2 张,一切正常。通常由于命名错误而无法找到文件时会引发错误。

但是,第三个文件“wellsFile”触发了错误处理并给了我一个

1004 对象范围_Global 失败

特别是在With Range("O34") 行。

据我所知,i=3 错误处理部分与其他 2 部分相同。

我已尝试使用 activesheet 和 activeworkbook 完全限定范围选择,并已定义应用程序的错误更改。我尝试了其他范围,这也会引发错误。 我知道 wbk.activate 和工作表激活正在工作,因为它们确实将我带到了我想要的地方。

感谢您的帮助。

Sub rateImport()

'created by Brad Chandler
'7-21-17
'goal is to take the rate sheets from desktop, copy and paste certain sections to certain sections
'of the Pricing Input sheet

Dim conName As String
Dim govName As String
Dim wellName As String
Dim conFile As String
Dim govFile As String
Dim wellsFile As String
Dim govWbk As Workbook
Dim conWbk As Workbook
Dim wellsWbk As Workbook
Dim Wbk As Workbook
Dim i As Integer    'for error assistance


On Error GoTo errorhandler

Application.ScreenUpdating = False

'setting up Con and Gov file names for opening
conName = Trim(Sheets("Dashboard").Range("O32").Value)  'removes beginning and ending spaces
conFile = "C:\Users\" & (Environ$("Username")) & "\Desktop\" & conName

govName = Trim(Sheets("Dashboard").Range("O33").Value)
govFile = "C:\Users\" & (Environ$("Username")) & "\Desktop\" & govName

wellName = Trim(Sheets("Dashboard").Range("O34").Value)
wellsFile = "C:\Users\" & (Environ$("Username")) & "\Desktop\" & wellName

'opening and copying rates over
Set Wbk = ActiveWorkbook
Wbk.Sheets("Pricing Input").Activate

    'copying from Conventional
    i = 1
    Workbooks.Open Filename:=conFile
    Set conWbk = ActiveWorkbook

    conWbk.Sheets("CSV File").Activate
        '30 year Copy
        Range("B2:F14").Copy
    Wbk.Activate
        Range("A3").PasteSpecial xlPasteValues

    conWbk.Activate
        '20 year copy
        Range("B16:F29").Copy
    Wbk.Activate
        Range("A23").PasteSpecial xlPasteValues

    conWbk.Activate
        '15 year copy
        Range("B31:F43").Copy
    Wbk.Activate
        Range("A43").PasteSpecial xlPasteValues

    'preventing save message from showing
    Application.DisplayAlerts = False
        conWbk.Close
    Application.DisplayAlerts = True

    'copying from Government
    i = 2
    Workbooks.Open Filename:=govFile
    Set govWbk = ActiveWorkbook

    govWbk.Sheets("CSV File").Activate
        '30 year copy
        Range("B5:F21").Copy
    Wbk.Activate
        Range("L3").PasteSpecial xlPasteValues

    govWbk.Activate
        '15 year copy
        Range("B31:F47").Copy
    Wbk.Activate
        Range("L23").PasteSpecial xlPasteValues

    'prevening save message from showing
    Application.DisplayAlerts = False
        govWbk.Close
    Application.DisplayAlerts = True

'opening and copying Wells Rates
Wbk.Sheets("Wells Pricing").Activate
    i = 3
    Workbooks.Open Filename:=wellsFile
    Set wellsWbk = ActiveWorkbook

    wellsWbk.Sheets("Conf Pricing").Activate
        '30,20,15 Con copy
        Range("B21:J49").Copy
    Wbk.Activate
        Range("A1").PasteSpecial xlPasteValues
    'lock term pricing
    wellsWbk.Activate
        Range("B51:H62").Copy
    Wbk.Activate
        Range("A31").PasteSpecial xlPasteValues


    wellsWbk.Sheets("Govt").Activate
        'FHA VA pricing copy
        Range("B14:K39").Copy
    Wbk.Activate
        Range("N1").PasteSpecial xlPasteValues

    wellsWbk.Activate
        'USDA pricing copy
        Range("B87:F105").Copy
    Wbk.Activate
        Range("N29").PasteSpecial xlPasteValues

    'preventing save message from showing
    Application.DisplayAlerts = False
        wellsWbk.Close
    Application.DisplayAlerts = True

    Application.ScreenUpdating = True

Exit Sub


    errorhandler:
    If i = 1 Then
        Wbk.Activate
        Sheets("Dashboard").Activate
        With Range("O32")
            .Select
            .Font.Bold = True
            .Interior.Color = RGB(253, 123, 151)
        End With

        Exit Sub
    Else
        If i = 2 Then
            Wbk.Activate
            Sheets("Dashboard").Activate
            With Range("O33")
                .Select
                .Font.Bold = True
                .Interior.Color = RGB(253, 123, 151)
            End With

            Exit Sub
        Else
            If i = 3 Then
                Wbk.Activate
                Sheets("Dashboard").Activate
                **With Range("034")**
                    .Select
                    .Font.Bold = True
                    .Interior.Color = RGB(253, 123, 151)
                End With
                Exit Sub
            End If
        End If
    End If

    End Sub

*我已经删除了一些不相关的代码

【问题讨论】:

【参考方案1】:

几个问题:

With Range("034") 周围不应该有星号(不知道你放在那里是不是为了这个问题?) O 实际上是零 - 将其更改为 O 前缀总是一个好主意 工作表的范围和(因为代码涉及多个 工作簿)工作簿,例如

With wbk.Sheets("Dashboard").Range("O34")

【讨论】:

添加了 ** 以强调错误行。关于零与 O,你是对的。在你回答之前不久,我发现了我的错误。可悲的是,除非您非常仔细地观察它们,否则几乎没有办法将它们区分开来。不过我还是觉得自己像个白痴。 这发生在我们所有人身上,不用担心。仅供参考,您可以更改字体:工具 > 选项 > 编辑器格式。不同的字体可能会使差异更清晰。【参考方案2】:

尽量不要使用激活和选择。打开工作簿后,您只需使用复制命令引用它们并使用目标命令将它们放置在另一个工作簿中,即

wb1.sheets("Sheet1").Range("A1").copy Destination wb2.("Sheet1").Range("A1")

无需激活和选择工作簿、工作表和范围。

【讨论】:

感谢您的意见!我会在未来尝试这样做。但是,它并不能解决我遇到的问题。幸运的是,我终于发现了我的错误:我输入了“0”34 作为范围引用而不是“O”34。这令人难以置信的令人沮丧,我无法相信除了宽度之外没有其他方法可以区分它们。 猴子扳手令人沮丧,而且几乎总是像这样非常简单。

以上是关于错误处理中的 Excel VBA 运行时错误 1004的主要内容,如果未能解决你的问题,请参考以下文章

解决 Excel VBA 文本文件导出中的运行时 91 错误

将公式插入单元格 VBA Excel 时出现运行时错误 1004

删除行时需要 Excel VBA 运行时错误“424”对象

excel运行VBA,出现1004错误

错误 429 excel vba activex CreateObject(“SAP.Functions”)

从 C# 运行 Excel 宏:从 VBA 捕获运行时错误