Как сбросить активную ячейку в ячейку, на которой запускается макрос? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь создать макрос, который берет данные из фиксированных ячеек на другом листе, которые я обновляю, и вводит данные в другой лист. Каждый день я помещаю новые данные в исходный лист, и они будут переноситься на второй лист в виде данных тех дней (одна строка). Это требует, чтобы исходная ячейка, из которой я запускаю макрос, была фиксированной точкой отсчета. Как сбросить активную ячейку в ячейку, из которой я нажал клавишу макроса?

Я пробовал Startcell = activecell или подобные вещи, но они не дали результатов. Я не очень хорошо разбираюсь в VBA, поэтому это может быть ошибка форматирования, из-за которой это не работает.

Sub Macro15()
'
' Macro15 Macro
'
' Keyboard Shortcut: Ctrl+Shift+Q
'
    Sheets("MACRO (insert data)").Select
    Range("G4:Q4").Select
    Selection.Copy
    Sheets("Jun-2019").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("MACRO (insert data)").Select
    Range("W4:AG5").Select
    Selection.Copy
    Sheets("Jun-2019").Select
    Range("C42").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("O10:Y10").Select
    Selection.Copy
    Startcell.Offset(0, 11).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

Если бы кто-то мог помочь мне, просто верните активную ячейку в начальную ячейку после «Range (« O10: Y10 »). Select» и «Selection.Copy», что было бы здорово.

1 Ответ

0 голосов
/ 25 июня 2019

Как то так, не проверял. Обратите внимание, что после первого назначения copyRange неясно, куда вам нужно вставить / передать данные. Вам нужно обновить destSheet.Range(" ??? "), чтобы он ссылался на правильный адрес, а не " ??? ".

Обратите внимание, что мы ничего не выбираем и не активируем. Мы используем тот факт, что Значения из диапазона могут быть непосредственно назначены другому диапазону равного размера, просто выполнив что-то вроде rng2.Value = rng1.Value. Дополнительная информация о копировании значений между книгами / рабочими листами: здесь .

Я объявил релевантные переменные, которые должны упростить поддержку кода (например, теперь есть только ОДНО место, где вам нужно изменить имена таблиц в последующие месяцы и т. Д.)

Dim StartCell as Range
Dim copyRange as Range
Dim dataSheet as Worksheet   '## MACRO (insert data)
Dim destSheet as Worksheet   '## Jun-2019
Set dataSheet = Sheets("MACRO (insert data)")
Set destSheet = Sheets("Jun-2019")

Set StartCell = ActiveCell

'First, copy G4:Q4 values
Set copyRange = dataSheet.Range("G4:Q4")
' Update the ??? with the destination for this data from G4:Q4
destSheet.Range(" ??? ").Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value

'Second, copy W4:AG5 values:
Set copyRange = dataSheet.Range("W4:AG5")
destSheet.Range("C42").Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value

' ## Now set copy O10:Y10 from Jun-2019 worksheet
Set copyRange = destSheet.Range("O10:Y10")
' Finally put these values in the StartCell area
StartCell.Offset(0,11).Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...