Excel VBA 1004命名范围公式出错

问题描述 投票:-1回答:1

我正在修改一个程序,但是我得到了一个我无法解决的错误。

错误是1004

码:

Source_1_Criteria = "Factuur"
Source_1_Name = Range("MDM_MDM_Tool_List").Find(what:=Source_1_Criteria).Offset(0, 2).Value
Source_1_Area = Range("MDM_MDM_Tool_List").Find(what:=Source_1_Criteria).Offset(0, 4).Value

ActiveWorkbook.Names.Add Name:=Source_1_Name, RefersTo:=Source_1_Area

最后一行给出了错误。我知道它在3行中的东西。 3行中的结果导致单元中当前内容的错误

=VERSCHUIVING(archief!$A$2;0;0;1;AANTALARG(archief!$A$2:archief!$Y$2))

当我将内容更改为=archief!$A$2时,代码可以正常工作。但是当我手动将公式复制/粘贴到命名区域时,它可以工作....

所以我的计算:公式=工作代码=工作

那两个在一起

错误1004

excel vba excel-vba
1个回答
0
投票

你应该用=VERSCHUIVING(archief!$A$2;0;0;1;AANTALARG(archief!$A$2:archief!$Y$2))代替的公式应该是这样的: -

= ADDRESS(2; 1 ;;;“存档”)&“:”和ADDRESS(2; NUMBER(存档!$ A $ 2:$ Y $ 2))

下面是我彻底测试的代码。它适用于我昨天提供的公式(上图)。您可以使用编辑/替换在以下代码中恢复原始变量名称。

Option Explicit

Private Sub Dutch()
    ' 05 Jan 2018

    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim SrcCrit As String
    Dim SrcName As Variant
    Dim SrcArea As String
    Dim Sp() As String
    Dim Rng As Range

    Set Wb = ActiveWorkbook                 ' could be ThisWorkbook
    Set Ws = ActiveSheet                    ' could be another sheet
    SrcCrit = "Factuur"
    Set Rng = Ws.Range("ToolList").Find(What:=SrcCrit)
    If Not Rng Is Nothing Then
        SrcName = Rng.Offset(0, 2).Value
'        Debug.Print SrcName
        SrcArea = Rng.Offset(0, 4).Value
'        Debug.Print SrcArea
        Sp = Split(SrcArea, "!")
        If UBound(Sp) Then
            If Left(Sp(0), 1) = "'" Then Sp(0) = Mid(Sp(0), 2)
            If Right(Sp(0), 1) = "'" Then Sp(0) = Left(Sp(0), Len(Sp(0)) - 1)
        Else
            Sp = Split(Ws.Name & "|" & Sp(0), "|")
        End If

        Set Rng = Wb.Worksheets(Sp(0)).Range(Sp(1))
'        Debug.Print Rng.Worksheet.Name, Rng.Address
        On Error Resume Next
        Wb.Names(SrcName).Delete
        On Error GoTo 0
        Wb.Names.Add Name:=SrcName, RefersTo:=Rng
'        With Wb.Names(SrcName)
'            Debug.Print .Name, .RefersTo
'        End With
    End If
End Sub

我发现错误1004在上面的上下文中有点复杂,因为当工作簿中存在错误的名称时会发生这样的错误,例如可能是由原始代码创建的。在这种情况下,错误表示工作簿中存在无法识别的元素,这可能与您要测试运行的代码完全无关。这种性质的1004错误通常是由兼容性问题引起的,甚至与名称无关。谷歌为_xlfn IERROR

在开发上面的代码时我遇到了持续的1004错误,因为我已经将找到的范围中的偏移命名为“first”到“4th”,它将“second”分配给新的命名范围。 Wb.Names("Second").Name正确地返回“第二”但Wb.Names(ScrName).Name三角错误1004 - 只是你的投诉。当我发现SECOND()是一个工作表函数并更改了偏移单元格中的名称时,错误就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.