VBA, чтобы открыть рабочую книгу, скопировать определенные ячейки в заданные c листы и закрыть исходную рабочую книгу - PullRequest
0 голосов
/ 03 апреля 2020

Я создал рабочую книгу, которую отправляю другим сотрудникам, чтобы они записывали определенные элементы. Пользователь сохранит рабочую книгу как «STATS (номер значка)» и отправит ее обратно. Я копирую ячейки из их книг (Sheet1.range ("B4: B29") и .Range ("F1: G2)" и вставляю их в основную рабочую книгу (STATS Total) на вкладках, которые названы по фамилии каждого сотрудника. пытаясь автоматизировать открытие многочисленных отправляемых мне книг (все в одной папке), скопируйте данные, затем вставьте их в те же ячейки (B4: B29 и F1: G2 на их именных листах, затем закройте «исходные» рабочие книги). Чтобы помочь, я поместил полный путь к каждой «исходной» книге в ячейке («I2» на их листе в основной книге. Поэтому в основной книге есть лист с именем «Smith», а в I2 - путь к рабочей книге). он послал меня. Это код, который я пробовал, но я не могу заставить его работать. Что я должен делать по-другому?

Sub CopyAndPaste()
Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet

Set x = Workbook(Sheet6.Range("I2").Text) 'copied book
Set y = ThisWorkbook 'pasted to this book


Set ws1 = x.Sheet1 'copied from
Set ws2 = y.Sheets("copied to")

ws1.Cells.Copy ws2.Cells
y.Close True
x.Close False
End Sub

1 Ответ

0 голосов
/ 03 апреля 2020

Вы должны использовать:

Sheet6.Range("I2").value

Вместо:

Sheet6.Range("I2").text 

Более того, вам нужно открыть книгу, если она еще не открыта (и я думаю, что это не случай, если вы должны сделать это для нескольких рабочих книг). Таким образом, вы могли бы иметь:

Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim input_workbook as String

Set y = ActiveWorkbook 'I consider this as the workbook you launch the macro from
input_workbook = Sheet6.Range("I2").value 

'I guess Sheet6 is in workbook y ... 
'in any case, it should represent a folder path with the workbook name, 
'like "C:\Documents\MyExcelFile.xlsx"

Set x = workbooks.open(filename:=input_workbook) 'The input workbook that you need to open

'... rest of the code ...

Надеюсь, это поможет!

# 1 РЕДАКТИРОВАТЬ

Чтобы ответить на ваш вопрос, теперь вы можете просто использовать x и у как рабочие тетради. Таким образом, вы можете иметь:

Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = y.sheets("your_y_sheet_name")
Set ws2 = x.sheets("your_x_sheet_name")

Затем вы можете использовать эти переменные для передачи данных:

ws1.range("B1:C10").value = ws2.range("B1:C10").value

Это сделает ваш диапазон B1: C10 в ws1 (wb y) равным один в ws2 (wb x). Это абсолютно быстрее, чем копирование / вставка. Итак, если у вас есть фиксированный диапазон для перевода из x в y, просто используйте это так (просто используйте правильные диапазоны; они должны иметь одинаковый размер).

Как только вы закончили с x книгой, не забудьте закрыть ее:

x.close
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...