Я согласен с brettdj, трудно понять, чего вы пытаетесь достичь.
Крис исправил две ваши ошибки, но не объяснил, что вторая поправка, которая, как я подозреваю, является причиной проблемы.
В вашем коде вы используете Range("E7").Value
. Это относится к ячейке E7 в активном листе активной книги. Крис изменил это на oWS.Range("E7").Value
, что является улучшением, но oWS не был инициализирован, поэтому его недостаточно.
Мой опыт работы с несколькими книгами заключается в том, что вы должны держать полный контроль. Я подозреваю, что ваша ошибка в том, что Excel смотрит на неправильный E7. Вышеуказанные шаги устраняют это и любые подобные ошибки.
Шаг 1
Убедитесь, что имеется только одна рабочая книга открыта в начале, проверяя, что WorkBooks.Count = 1
. Если вы разрешаете открывать две или более книги, вам понадобится код для проверки того, что активная рабочая книга является той, которую вы хотите. Так что-то вроде:
If WorkBooks.Count > 1 Then
Call MsgBox("Please close other workbooks then try again.", vbYesOnly)
Exit Sub
End If
Шаг 2
Перед тем, как открыть любую другую книгу, запись, которая является главной книгой.
Dim WBkMaster As WorkBook
WBkMaster = ActiveWorkBook
Шаг 3
Всегда можно найти в книгах и листах в явном виде. Например:
With WBkMaster
With Sheets("x1")
.Range("E7").Value = ...
' Extract data from Sheet x1 to variables here
End With
With Sheets("x2")
' Extract data from Sheet x2 to variables here
End With
End With
Set WBkDestination = Application.Workbooks.Open(arkusz)
With WBkDestination
With Sheets("x3")
' Save data for Sheet x3 from variables here
End With
With Sheets("x4")
' Save data for Sheet x4 from variables here
End With
. Close
End With
oWB = Nothing ' Ensure no reference to closed workbook
Существует и другие подходы к копированию данных между рабочими листами и книгами, но не дает достаточно информации, чтобы рекомендовать какой подход будет наиболее подходящими. Ключевая проблема заключается в том, что вы должны полностью указать, какой лист и какую книгу вы хотите адресовать.
Непонятно (по крайней мере для меня), что вы ищете, и чего вам здесь не хватает. «E7» будет обновляться - и перезаписываться - с каждым новым именем рабочего стола (not sheet), которое вы открываете. Какие значения вы хотите скопировать?И на тот же лист, новый лист и т. Д.? Пожалуйста, напишите больше информации – brettdj
Почему бы не открыть другой wb в том же сеансе Excel? Кроме того, вы должны квалифицировать все свои Range() с соответствующей книгой, в противном случае возникнет путаница ... –