Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
未找到多个图纸成员或数据成员中的VBA复制范围_Vba_Excel - Fatal编程技术网

未找到多个图纸成员或数据成员中的VBA复制范围

未找到多个图纸成员或数据成员中的VBA复制范围,vba,excel,Vba,Excel,当我试图让这个脚本在4张纸中的每一张上运行时,我似乎迷失了方向。基本上,尝试将一个静态范围(按行)从列出的4张图纸中的每一张复制到另一个范围,作为硬代码,具体取决于用户的下拉选择(定义为Month1&Month2)。但随之而来的错误是 “找不到数据成员” 在sheetsArray.Cells行。“宏”表是存储下拉列表的地方,所以我相信我必须以这种方式引用定义的命名范围 Sub copyColumns() Dim months, m1, m2, sourceSht Dim Msg As Stri

当我试图让这个脚本在4张纸中的每一张上运行时,我似乎迷失了方向。基本上,尝试将一个静态范围(按行)从列出的4张图纸中的每一张复制到另一个范围,作为硬代码,具体取决于用户的下拉选择(定义为
Month1
&
Month2
)。但随之而来的错误是

“找不到数据成员”

sheetsArray.Cells
行。“宏”表是存储下拉列表的地方,所以我相信我必须以这种方式引用定义的命名范围

Sub copyColumns()

Dim months, m1, m2, sourceSht
Dim Msg As String, Ans As Variant
Dim sheetsArray As Sheets
Dim sheetObject As Worksheet

Msg = "Are you sure you want to copy/paste over to Early Warning?"

Ans = MsgBox(Msg, vbYesNo)

Select Case Ans

    Case vbYes

    months = Split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ",")
    Set sheetsArray = ActiveWorkbook.Sheets(Array("HRM", "SRM", "NRM", "Corp"))
    Set sourceSht = Worksheets("Macros")


    m1 = Application.Match(sourceSht.Range("Month1").Value, months, 0)
    m2 = Application.Match(sourceSht.Range("Month2").Value, months, 0)

    For Each sheetObject In sheetsArray

    sheetsArray.Range(sheetsArray.Cells(35, 4 + m1), sheetsArray.Cells(376, 4 + m2)).Copy
    sheetsArray.Range(sheetsArray.Cells(35, 17 + m1), sheetsArray.Cells(376, 17 + m2)).PasteSpecial xlValues

    Next sheetObject

    Case vbNo
    GoTo Quit:

End Select

Quit:

End Sub

在开始时,尝试将
SheetsArray
重新声明为
Variant
,并为其指定一些值:

Dim sheetObject As Variant
Dim sheetsArray As Variant
sheetsArray = Array("HRM", "SRM", "NRM", "Corp")
删除此行:

Set sheetsArray = ActiveWorkbook.Sheets(Array("HRM", "SRM", "NRM", "Corp"))
然后更改此选项:

sheetsArray.Range(sheetsArray.Cells(35, 4 + m1), sheetsArray.Cells(376, 4 + m2)).Copy
为此:

With worksheets(sheetobject)
    .Range(.Cells(35, 4 + m1), .Cells(376, 4 + m2)).Copy
End With

只需将循环中的两行更改为

For Each sheetObject In sheetsArray
    with sheetObject
    .Range(.Cells(35, 4 + m1), .Cells(376, 4 + m2)).Copy
    .Range(.Cells(35, 17 + m1), .Cells(376, 17 + m2)).PasteSpecial xlValues
    end with
Next sheetObject

使用此方法似乎仍然会遇到相同的错误。对不起,在键入答案时,我接到了一个电话,没有仔细检查。我已经编辑了我的回答,给出了一个“424对象必需”错误,其中“对于sheetsArray中的每个sheetObject”是。
将sheetObject作为变量变暗。
,@AspiringDeveloper