Вот пример того, как вы начнете изменять свой код, чтобы правильно ссылаться на объекты Workbooks & Worksheet.
wb
= лист в вашей книге, где вы будете запускать макрос из
ib
= лист в вашей книге импорта, куда вы будете импортировать значения из
Вам нужно будет обновить имя листа при установке wb
на лист, куда будут идти ваши значения. Прямо сейчас оно установлено на Destination Sheet
.
Как только вы сделаете это один раз, вам нужно будет обратиться к wb
и ib
для остальной части вашего кода. Поэтому, когда вы ссылаетесь на диапазон на листе ib
BHARReport
, просто используйте ib.Range("....")
и аналогично для своей основной книги wb.Range("....")
Для конкретного примера вы можете уменьшить ниже:
Workbooks(oBHA).Sheets("BHAReport").Range("D9:D" & nRange + 1).Copy
Workbooks(BookName).Worksheets(SheetName).Range("AZ65").PasteSpecial xlPasteValues
Кому:
ib.Range("D9:D" & LRow).Copy
wb.Range("AZ65").PasteSpecial xlPasteValues
в результате значительно легче следовать коду. Это значительно облегчает отладку кода , , поскольку вы действительно можете следить за происходящим.
Option Explicit
Sub ImportBHA()
Dim wb As Worksheet, ib As Worksheet
Dim LRow As Long, Fullpath as String
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Title = "Select the BHA Report"
.Filters.Clear
.Filters.Add "Excel Files", "*.xls; *.xlsx", 1
.Show
Fullpath = .SelectedItems.Item(1)
If .SelectedItems.Count < 1 Then Exit Sub
End With
'Make sure the sheet names are correct here
Set wb = ThisWorkbook.Sheets("Destination Sheet")
Set ib = Workbooks.Open(Fullpath).Sheets("BHARReport")
LRow = ib.Range("C" & ib.Rows.Count).End(xlUp).Offset(1).Row
wb.Range("Az60").Value = ib.Range("I4").Value
ib.Range("D9:D" & LRow).Copy
wb.Range("AZ65").PasteSpecial xlPasteValues