#excel #vba #copy-paste #worksheet
#excel #vba #копировать-вставить #рабочий лист
Вопрос:
Это должно быть легко исправить, но я не могу найти проблему.
У меня есть 2 листа «DispoData» и «Неактивный». Я хочу исправить и скопировать дату из «A1» в ‘DispoData’ в «C8: E8» на «Бездействующем» листе.
Код работает абсолютно нормально, если у меня активен лист ‘DispoData’ и я запускаю код, но если я нахожусь на любом другом листе и запускаю его, ячейки «C8: E8» на ‘Бездействующем листе’ пусты.
Dim wbTemplate As Workbook
Dim ws As Worksheet, wsDispoData As Worksheet, wsDormant As Worksheet
Set wbTemplate = Workbooks("Makro Stock Management Bundle TEMPLATE.xlsm")
Set wsDispoData = wbTemplate.Worksheets("DispoData")
Set wsDormant = wbTemplate.Worksheets("Dormant Stock")
Application.ScreenUpdating = False
'Add date from Dispo to Dormant sheet, convert to date and delete other writing
With wsDispoData.Range("A1")
.FormulaR1C1 = Left(Range("A1"), 10)
.Copy wsDormant.Range("C8:E8")
End With
Application.CutCopyMode = False
wsDormant.Range("C8:E8").NumberFormat = "dd.mm.yyyy"
Я хочу, чтобы код выполнялся независимо от того, какой лист активен.
Кода много, поэтому я снова активирую обновление экрана только в конце. Я запускал код шаг за шагом, и все работает, за исключением части вставки, ничего не делает, если я не запускаю код с активным листом ‘DispoData’.
Комментарии:
1.
Left(Range("A1"), 10)
—Range("A1")
является неквалифицированным и неявно ссылается наA1
наActiveSheet
.2. Большое спасибо! Я просто поместил ‘wsDispoData.’ перед вторым диапазоном («A1»). Спасибо @BigBen
Ответ №1:
Исправленная версия: с помощью формы справки @BigBen.
With wsDispoData.Range("A1")
.FormulaR1C1 = Left(wsDispoData.Range("A1"), 10)
.Copy wsDormant.Range("C8:E8")
End With
Комментарии:
1. Не стесняйтесь пометить этот ответ как правильный — чтобы все знали, что на ваш вопрос дан ответ