Excel 选择范围类的方法失败。msgBox找到了范围地址,但不会“.Select”

Excel 选择范围类的方法失败。msgBox找到了范围地址,但不会“.Select”,excel,vba,Excel,Vba,我主要在工作表2中处理命名范围,并在名为Signups的工作表中创建摘要。我主要是剪切和粘贴程序其他部分的代码。由于某些原因,VBA不会在图纸2中选择范围 在下面的代码中,SignupPairs是sheet Signups中的一个范围,NewMem是sheet 2中的一个范围 '''''''''' MsgBox "SignupPairs 2,1 " & Range("SignupPairs")(2, 1) Range("SignupPairs")(2, 1).Select MsgBox

我主要在工作表2中处理命名范围,并在名为Signups的工作表中创建摘要。我主要是剪切和粘贴程序其他部分的代码。由于某些原因,VBA不会在图纸2中选择范围

在下面的代码中,SignupPairs是sheet Signups中的一个范围,NewMem是sheet 2中的一个范围

''''''''''
MsgBox "SignupPairs 2,1 " & Range("SignupPairs")(2, 1)
Range("SignupPairs")(2, 1).Select
MsgBox "NewMem 1,1 " & Range("NewMem")(1, 1)
'Sheets("Sheet2").Range("NewMem")(1, 1).Select  'Doesn't work.
Range("NewMem")(1, 1).Select
''''''''''
添加前四行是为了调试目的。最后一句话让我尖叫着停了下来。第四行是试图具体说明我想要使用的表格;它不起作用。MsgBox正确报告SignupPairs和NewMem中单元格的内容,但我无法选择NewMem1,1来执行RangeSelection,Selection.EndxlDown.Rows.Count

奖励点:是否有人有一个链接或参考资料,可以找到一本关于VBA的好入门或手册,这样我就可以自学,而不必问这些简单的问题?假人VBA只会把我弄得一团糟


另外,在VBA编辑器中单击Select上的F1会将我发送到一个关于Select案例的页面,这似乎是一个死胡同。

由于您是VBA新手,我强烈建议您始终在代码中写下您打算做的事情作为注释。这将有助于帮助者和未来的你

我不确定您想对汇总表中的数据做什么。我建议您创建对摘要表的引用,然后可以使用命名范围中的数组

这里有一种方法,您可以将注册对和新的Mem放入数组中,然后将您正在查看的内容放入msg框中,但我假设您希望匹配它们或执行其他操作

Sub doSomethingWithSignups()
    Dim ws As Worksheet, signUps As Variant, newMems As Variant
    ' these arrays will have whatever data you have identified in the Named Ranges
    signUps = ThisWorkbook.Names("SignupPairs").RefersToRange.Value2
    newMems = ThisWorkbook.Names("NewMems").RefersToRange.Value2

    ' you can do anything with these arrays now
    MsgBox("SignupPairs 2,1 " & signUps(2, 1))
    MsgBox("NewMem 1,1 " & newMems(1, 1))
End Sub

阅读此内容您无法在非活动工作表上选择单元格,因此您必须先激活工作表或使用application.goto。由于这些是命名范围,您还可以将其数据直接获取到vba中的数组,如“ThisWorkbook.NamesSignupPairs..ReferstorRange.Value`@jessi”,这将是一个非常好的、值得向上投票的答案!我根据我的评论创建了一个答案。我希望它能帮助op推进这个项目。谢谢你的鼓励,谢谢你,杰西。我需要回顾我的代码,找出如何使用注册而不是RangeSignupPairs。由于我一直在处理这段代码,我一直在使用有意义的范围名称来帮助跟踪我正在做的事情。使用注册比使用RangeSignupPairs简单得多,但了解为什么注册在功能上更好会有帮助。我的直觉反应是,多层次的抽象会带来更多意想不到的后果。我能把报名表交给一个潜水艇吗?如果我在Sub中重新定义注册的维度,这是否适用于调用例程和其他Sub?您可以更改Sub中命名范围的维度。它是否影响其他Sub取决于何时调用Sub以及您赋予它的范围。除非你知道你有什么影响,否则我会犹豫是否改变一个命名范围的形状。您可以首先使范围变大,并使用代码检查是否为空。或者,您可以在sub的开始处动态命名范围。您完全可以在sub和函数之间传递数组以进行更多工作。好的,谢谢您的帮助。我想我开始看到问题的一部分:命名范围是工作表的一个属性,而注册是一个VBA变量,在VBA环境中工作得更好。是的!命名区域是引用一组单元格的简单方法。在我的示例中,注册是一个不在工作表上的数组。你可以很快地用数组做很多事情。Value2是什么意思?它与.Value相同吗?有没有人建议我参考一下,这样我就不用花时间问简单的问题了?