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 访问工作表中的命名区域\u SelectionChange子例程_Excel_Vba - Fatal编程技术网

Excel 访问工作表中的命名区域\u SelectionChange子例程

Excel 访问工作表中的命名区域\u SelectionChange子例程,excel,vba,Excel,Vba,我几乎没有VBA方面的背景,对其整体结构了解甚少,但需要对现有的电子表格进行添加/修改,以实现某些目标。这个电子表格非常庞大,有数百个命名范围,以及数十个VBA函数和计算 现在,我想做的就是: 在工作表1上创建下拉数据验证类型-完成 根据选择,将表2中存储的多个命名范围中的一个复制到表3中的位置,如A1。 为了实现步骤2,我启动了一个工作表选择更改子程序,代码如下。假设有两个下拉选项=ABC和XYZ。假设两个对应的命名范围为ABC_数据和XYZ_数据。这两个命名范围属于工作簿范围。将其复制到标有

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

现在,我想做的就是:

在工作表1上创建下拉数据验证类型-完成 根据选择,将表2中存储的多个命名范围中的一个复制到表3中的位置,如A1。 为了实现步骤2,我启动了一个工作表选择更改子程序,代码如下。假设有两个下拉选项=ABC和XYZ。假设两个对应的命名范围为ABC_数据和XYZ_数据。这两个命名范围属于工作簿范围。将其复制到标有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
请帮助我理解这有什么问题。当我进行选择并调试此子程序时,我会在transferRange=XYZ_数据行(假设XYZ选择)处获得一个对象变量或With block variable not set error。看起来我无法访问此子例程中的命名范围。我应该采取什么步骤


请记住我的拼凑知识。

试试这张便条,我添加了Destination:=位,希望能修复您的最终错误:

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

我的意思是错误在以下行:transferRange=XYZ_dataWelcome to Stack Overflow!首先,必须使用Set关键字为范围变量赋值,如下所示:Set transferRange=ABC_data或Set transferRange=XYZ_data谢谢。已经取得了进展。添加集合删除了第一个错误,而是给了我一个对象必需的错误。在此之后,我将行更改为:Set transferRange=thiswook.SheetsSheetB.RangeXYZ_data。第二个错误随后消失了。现在,我在最后一行出现了一个错误,我试图在指定的范围内进行复制。我看到以下消息:对象的方法范围\u工作表失败。嗯。。。目前无法测试,但从外观上看,transferRange已经是一个Range对象,因此我认为不需要使用Range来包装它。您是否在transferRange.Copy ThisWorkbook.SheetsSheetC.RangeA1中遇到同样的错误?是的,这很有效。谢谢。我试过了,但仍然得到了方法范围。。。错误环顾四周后,似乎最好显式定义源工作表等,因此我将最后一行更改为:ThisWorkbook.SheetsSheetB.RangeTrange.Copy Destination:=ThisWorkbook.SheetsSheetC.RangeA1。现在,我有一个应用程序定义或对象定义的错误!我想你已经测试过丹的最后一个建议了吗?不,我还没有试过,但我现在可以报告它确实有效。谢谢