Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA命名范围、作用域和相交函数_Excel_Vba_Named Ranges - Fatal编程技术网

Excel VBA命名范围、作用域和相交函数

Excel VBA命名范围、作用域和相交函数,excel,vba,named-ranges,Excel,Vba,Named Ranges,我有一个表单,用户从下拉列表中选择一个值。然后我在另一张表上搜索该值,并返回该单元格的地址。地址被提供给一个函数,该函数查看每个命名范围并查找一个交集。我在函数中加入了一些“调试”信息,只是想看看它是否正在启动,而不是。我有3张纸,它可能会看穿,所以我必须小心不要在不同的纸上寻找交叉点时抛出1004错误。我在这里不知所措。我肯定这是个愚蠢的东西,但我找不到。感谢您的帮助 For i = 1 To EndWRow For j = 1 To EndWColumn If woo

我有一个表单,用户从下拉列表中选择一个值。然后我在另一张表上搜索该值,并返回该单元格的地址。地址被提供给一个函数,该函数查看每个命名范围并查找一个交集。我在函数中加入了一些“调试”信息,只是想看看它是否正在启动,而不是。我有3张纸,它可能会看穿,所以我必须小心不要在不同的纸上寻找交叉点时抛出1004错误。我在这里不知所措。我肯定这是个愚蠢的东西,但我找不到。感谢您的帮助

For i = 1 To EndWRow
    For j = 1 To EndWColumn
        If woodSearch = Worksheets("Woods").Cells(i, j).Value Then
            
            Worksheets("Woods").Activate
            
            x = ActiveSheet.Name
            y = Worksheets("Woods").Cells(i, j).Address
            Set wMatchCell = Worksheets("Woods").Cells(i, j)
            
            If IsNamedRange(wMatchCell, woodRangeName) Then
                MsgBox "Range Name:= " & woodRangeName.Name & Chr(10) & _
                    "Range RefersTo:= " & woodRangeName
                    
                woodRangeNameString = woodRangeName.Name
                'Worksheets("Woods").Range(woodRangeNameString).Copy
                'Worksheets("Bag 1").Range("B2:H23").PasteSpecial xlPasteValuesAndNumberFormats
                'Worksheets("Bag 1").Range("B2:H23").PasteSpecial xlPasteFormats
                'Worksheets("Bag 1").Range("B2:H23").PasteSpecial xlPasteColumnWidths
                
            Else
                MsgBox "Invalid Selection. Sheet name is: " & x & " and selected address is: " & y
            End If
            
            Exit For
            
        End If
    Next j
Next i
查找命名范围函数:

Function IsNamedRange(ByVal Target As Range, ByRef NamedRange As Name) As Boolean
Dim nm As Name
Dim i As Integer
i = 7

With ThisWorkbook.Sheets(Target.Parent.Name)
    For Each nm In .Names
        Sheets("User Entry").Range("B" & i).Value = nm
        If Not Application.Intersect(Target, Range(nm)) Is Nothing Then
                IsNamedRange = True
                Set NamedRange = nm
                Exit Function
        End If
    i = i + 1
    Next nm
End With
End Function

至少,我觉得这个函数至少应该在我的工作表上打印所有命名的范围(不是真正想要的,但我把它扔进了调试),它什么都不做。Long和short是指“else”最终执行…

您可以进行一些更改,使其更通用。还更新了方法名,并将名称作为函数的返回值返回-我不确定Boolean+ByRef除了测试返回值之外还能得到什么

子测试仪()
名称为Dim nm
设置nm=GetMatchedRange(选择)
如果不是的话,nm什么都不是
调试。打印nm.Name,nm.referestorange.Address
其他的
调试。打印“无名称”
如果结束
端接头
函数GetMatchedRange(ByVal目标作为范围)作为名称
Dim nm作为名称,i作为整数,rng作为范围
'始终对目标的父工作簿进行操作
对于Target.Worksheet.Parent.Names中的每个nm
图纸(“用户输入”)。范围(“B”和i)。值=纳米
设置rng=无
出错时继续下一步
设置rng=nm.refrestorange'并非所有名称都引用范围。。。
错误转到0
如果不是,那么rng什么都不是
'此名称是否引用与目标在同一工作表上的范围?
如果rng.Parent.Name=Target.Parent.Name,则
如果不是Application.Intersect(Target,rng),则什么都不是
设置GetMatchedRange=nm
退出功能
如果结束
如果结束
如果结束
i=i+1
下一纳米
端函数

是否确保工作表上有您姓名的范围(而非参考)?如果它在工作簿上,则需要循环工作簿的名称。使用名称管理器进行检查。它们都是工作簿范围。如果我遍历整本书,那么Intersect会抛出1004错误。输入错误转到下一个?但是去哪里呢?当我签入名称管理器时,更改范围的选项为灰色。最简单的方法是重新定义名称,使范围基于工作表。通过仅使用工作表范围创建新的命名范围进行测试。作品看起来我需要删除并重新创建每个命名区域。经过测试,这也有效。感谢您的回复!我最终只是按照现在的计划重新创建了命名范围和原始作品。长话短说,不要在Mac版Excel中创建命名范围。我必须在我的Windows work笔记本电脑上创建命名范围,以便对其进行范围控制。