У меня есть несколько разных ячеек (каждой из которых присваивается уникальное имя), расположенных в разных листах, содержащихся в книге с именем «Мастер». Исходные ячейки для копирования выбираются путем сопоставления их листа и диапазона с содержимым ячейки, содержащей код чертежа в целевой книге. Следующий макрос, который определенно определяет ячейку «X6» как начальную ячейку для ячеек, которые будут скопированы на листе назначения («Рисование»), из которого вызывается макрос, работает нормально:
Option Explicit
Sub Copy_DOD() 'Copy specified named range
Dim dws, sws As Worksheet ' Destination and source worksheets
Dim swb As Workbook ' Source workbook
Dim DrawingCode, swsName As String
Set dws = Worksheets("Drawing")
Set swb = Workbooks("Master.xlsm")
With dws
Application.ScreenUpdating = False
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Get Drawing Code
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DrawingCode = dws.Range("DrawingCode")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Determine Source Worksheet - DrawingCode up to character "x"
' e.g code of 1234x56 produces worksheet name "1234"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
swsName = Left(DrawingCode, (InStr(DrawingCode, "x")) - 1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copy Cells to Destination sheet
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
swb.Worksheets(swsName).Range(DrawingCode).Copy Range("X6")
End With
End Sub
Вместо используя предопределенную ячейку ("X6") в качестве начальной ячейки назначения, в которую нужно скопировать, я хочу, чтобы пользователь диктовал начальную ячейку вместо использования InputBox. Следующее успешно получает указанную ячейку назначения от пользователя, но завершается неудачно, когда дело доходит до вставки диапазона. Я знаю, что, должно быть, неправильно определяю Paste, но не могу понять, каким он должен быть. Любое руководство будет приветствоваться!
Option Explicit
Sub Copy_DOD() 'Copy specified named range
Dim dws, sws As Worksheet ' Destination and source worksheets
Dim swb As Workbook ' Source workbook
Dim DrawingCode, swsName As String
Dim DockTopLeftCell As Range
Dim dTopLeftRow, dTopLeftColumn As Integer
Set dws = Worksheets("Drawing")
Set swb = Workbooks("Master.xlsm")
With dws
Application.ScreenUpdating = False
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Get the top left cell for the dock drawing and determine row and column values
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Error Resume Next
Application.DisplayAlerts = False
Set DockTopLeftCell = (Application.InputBox("Enter the cell to be the top left corner of the dock drawing (DO NOT GO LESS THAN CELL X6)", Type:=8))
Application.DisplayAlerts = True
On Error GoTo 0
If DockTopLeftCell Is Nothing Then Exit Sub
dTopLeftRow = DockTopLeftCell.Row ' Set dock drawing row origin
dTopLeftColumn = DockTopLeftCell.Column ' Set dock drawing column origin
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Get Drawing Code
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DrawingCode = dws.Range("DrawingCode")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Determine Source Worksheet - DrawingCode up to character "x"
' e.g code of 1234x56 produces worksheet name "1234"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
swsName = Left(DrawingCode, (InStr(DrawingCode, "x")) - 1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copy Cells to Destination sheet
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
swb.Worksheets(swsName).Range(DrawingCode).Copy Range(DockTopLeftCell)
'swb.Worksheets(swsName).Range(DrawingCode).Copy Range("X6")
End With
End Sub