Код выполняется (копирование и вставка) на одном листе, но ничего не делает при запуске с другого листа

#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. Не стесняйтесь пометить этот ответ как правильный — чтобы все знали, что на ваш вопрос дан ответ