Создание минимального, полного и проверяемого примера (см. https://stackoverflow.com/help/mcve) увеличивает ваш шанс получить быстрый ответ и получить хорошие ответы.
Решение
-Изменение типа данных с варианта на диапазон
- адаптировать размер диапазона
полезно:
добавив что-то вроде Sub SampleData()
, вы упростите нашу жизнь, и мы сможем увидеть вашу проблему безтратить много времени на воссоздание вашей проблемы.
Ошибка 424 во время выполнения действительно произошла во время моего теста с вашим кодом до создания четкой ссылки на лист с исходными данными.
Добавляя actWs
до Set SAPNum = actWs.Range(Cells(3, 2), Cells(NRows, 2))
эта ошибка исчезла, даже если исходная таблица данных не была выбрана в начале CreateMatDump
.
Option Explicit
Sub SampleData()
Dim actCell As Range
For Each actCell In Sheets(1).Range("A1:R15")
actCell.Value = actCell.Address
Next actCell
On Error Resume Next
Workbooks.Add
If Sheets("Dump").Name <> "Dump" Then
Worksheets.Add After:=Sheets(1)
Sheets(2).Name = "Dump"
End If
On Error GoTo 0
With Sheets("Dump")
.Range("A1").Value = "SAPNum"
.Range("B1").Value = "MatType"
.Range("C1").Value = "MatGroup"
.Range("D1").Value = "UOM.Value"
.Range("E1").Value = "MPN.Value"
.Range("F1").Value = "MatDesc"
.Range("A:F").ColumnWidth = 14
End With
ActiveWorkbook.SaveAs "C:\temp\dumpfile.xlsx"
End Sub
Sub CreateMatDump()
Dim DumpFile As Workbook 'SAP Material Dump File
Dim actWb As Workbook
Dim actWs As Worksheet
Dim NRows As Long
Dim SAPNum As Range, MatType As Range, MatGroup As Range, UOM As Range, MPN As Range, MatDesc As Range
Set actWb = ThisWorkbook
Set actWs = ThisWorkbook.Sheets(1)
actWb.Activate
actWs.Select
'Count rows
NRows = actWs.Cells(Rows.Count, 14).End(xlUp).Row
'Copy values to arrays
Set SAPNum = actWs.Range(Cells(3, 2), Cells(NRows, 2))
Set MatType = actWs.Range(Cells(3, 6), Cells(NRows, 6))
Set MatGroup = actWs.Range(Cells(3, 11), Cells(NRows, 11))
Set UOM = actWs.Range(Cells(3, 10), Cells(NRows, 10))
Set MPN = actWs.Range(Cells(3, 14), Cells(NRows, 14))
Set MatDesc = actWs.Range(Cells(3, 9), Cells(NRows, 9))
Debug.Print "SAPNum : "; SAPNum.Address
Debug.Print "MatType : "; MatType.Address
Debug.Print "MatGroup : "; MatGroup.Address
Debug.Print "UOM : "; UOM.Address
Debug.Print "MPN : "; MPN.Address
Debug.Print "MatDesc : "; MatDesc.Address
'Open SAP Material Dump File
'Set DumpFile = Workbooks.Open(Filename:="R:\BURNABY\SAP Templates (Parts Upload & Batch PR Entry)\SAP Material Dump - Test.xlsx")
Set DumpFile = Workbooks.Open(Filename:="c:\temp\dumpfile.xlsx")
'Set DumpFile = ActiveWorkbook
'Print arrays to SAP Material Dump File
With DumpFile.Sheets(2)
SAPNum.Copy 'to:
.Range("A2").PasteSpecial Paste:=xlPasteValues
MatType.Copy 'to:
.Range("B2").PasteSpecial Paste:=xlPasteValues
MatGroup.Copy 'to:
.Range("C2").PasteSpecial Paste:=xlPasteValues
UOM.Copy 'to:
.Range("D2").PasteSpecial Paste:=xlPasteValues
MPN.Copy 'to:
.Range("E2").PasteSpecial Paste:=xlPasteValues
MatDesc.Copy 'to:
.Range("F2").PasteSpecial Paste:=xlPasteValues
End With
End Sub