访问Worksheet_SelectionChange子例程中的命名区域

时间:2015-02-11 02:35:01

标签: excel vba

我几乎没有VBA的背景,对其整体结构知之甚少,但需要对现有的电子表格进行添加/修改以实现某些目标。这个电子表格非常庞大,有数百个命名范围,还有数十个VBA函数和计算。

目前,我所要做的就是:

  1. 在工作表1上创建一个下拉列表(数据验证类型) - DONE
  2. 根据选择,将第2页中存储的许多命名范围中的一个复制到工作表3上的某个位置(例如A1)。
  3. 为了实现第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行得到一个“对象变量或没有设置块变量”错误。看起来我无法访问此子例程中的命名范围。我应该采取什么措施?

    请充分了解我正在做的事情。

1 个答案:

答案 0 :(得分: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