2015-02-11 75 views
0

我几乎没有VBA背景,对其整体结构了解甚少,但需要对现有电子表格进行添加/修改才能完成某些目标。该电子表格包含数百个命名范围以及数十个VBA函数和计算。访问Worksheet_SelectionChange子例程中的命名范围

现在,所有我试图做的是:

  1. 在表1创建一个下拉(数据验证类型) - 根据您的选择
  2. 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行处得到“对象变量或块变量未设置”错误。看起来我无法访问此子例程中的命名范围。我应该采取什么措施?

请耐心等待我对自己在做什么的拼凑知识。

+0

我的意思的错误是在该行:transferRange = XYZ_data – Jabberwocky 2015-02-11 02:36:51

+1

欢迎堆栈溢出一个开始,'Range'变量必须用'Set'关键字赋值,如下所示:'Set transferRange = ABC_data'或'Set transferRange = XYZ_data' – 2015-02-11 02:38:24

+0

谢谢。已经有进展了,添加Set取消了第一个错误,我需要一个“对象需要”的错误,之后,我将行改为:Set transferRange = ThisWorkbook.Sheets(“SheetB”)。Range(“XYZ_data”)。第二个错误然后消失了。英尺在我试图复制命名范围的最后一行发生错误。我看到以下消息:对象“_Worksheet”的方法“范围”失败。 – Jabberwocky 2015-02-11 03:10:02

回答

0

试一下这个(注意我说的目的地:=位希望解决您的最终错误:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim PD As String, transferRange As Range 
PD = Target.Value 
Select Case PD 
    Case "ABC" 
     Set transferRange = ThisWorkbook.Sheets("SheetB").Range("ABC_data") 
    Case "XYZ" 
     Set transferRange = ThisWorkbook.Sheets("SheetB").Range("XYZ_data") 
End Select 
Range(transferRange).Copy Destination:=ThisWorkbook.Sheets("SheetC").Range("A1") 
End Sub 
+0

我试过这个,但仍然收到“Method Range ...”错误。看起来,在四处看到明确定义源工作表等等,所以我最后一行改为:ThisWorkbook.Sheets(“SheetB”)。Range(transferRange).Copy Destination:= ThisWorkbook.Sheets(“SheetC “).Range(” A1" )。现在,我有一个“应用程序定义或对象定义的错误”! – Jabberwocky 2015-02-11 03:25:42

+0

我认为你已经测试了丹最后的建议? – 2015-02-11 03:36:21

+0

不,我还没有尝试过,但我现在可以报告它确实有效。谢谢。 – Jabberwocky 2015-02-11 04:19:20