我几乎没有VBA背景,对其整体结构了解甚少,但需要对现有电子表格进行添加/修改才能完成某些目标。该电子表格包含数百个命名范围以及数十个VBA函数和计算。访问Worksheet_SelectionChange子例程中的命名范围
现在,所有我试图做的是:
- 在表1创建一个下拉(数据验证类型) - 根据您的选择
- DONE,复制许多有名有姓的范围之一存储在工作表2中,到工作表3上的某个位置(如A1)。
要实现第2步,我开始了Worksheet_SelectionChange子例程,代码如下所示。假设两个下拉选项= ABC & XYZ。假定两个对应的命名范围为ABC_data & XYZ_data。这两个命名范围是工作簿范围。它们将被复制到标有SheetC的工作表中。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim PD As String, transferRange As Range
PD = Target.Value
Select Case PD
Case "ABC"
transferRange = ABC_data
Case "XYZ"
transferRange = XYZ_data '<~ error here, assuming "XYZ" selection
End Select
Range(transferRange).Copy ThisWorkbook.Sheets("SheetC").Range("A1")
End Sub
请帮我理解这有什么问题。当我做出选择并调试该子例程时,假设选择了XYZ,我会在transferRange = XYZ_data
行处得到“对象变量或块变量未设置”错误。看起来我无法访问此子例程中的命名范围。我应该采取什么措施?
请耐心等待我对自己在做什么的拼凑知识。
我的意思的错误是在该行:transferRange = XYZ_data – Jabberwocky 2015-02-11 02:36:51
欢迎堆栈溢出一个开始,'Range'变量必须用'Set'关键字赋值,如下所示:'Set transferRange = ABC_data'或'Set transferRange = XYZ_data' – 2015-02-11 02:38:24
谢谢。已经有进展了,添加Set取消了第一个错误,我需要一个“对象需要”的错误,之后,我将行改为:Set transferRange = ThisWorkbook.Sheets(“SheetB”)。Range(“XYZ_data”)。第二个错误然后消失了。英尺在我试图复制命名范围的最后一行发生错误。我看到以下消息:对象“_Worksheet”的方法“范围”失败。 – Jabberwocky 2015-02-11 03:10:02