В книге находятся фигуры в виде красного квадрата - название которых включает название определенных ячеек - "ФигураI27", ФигураK34 (состоит из слова "Фигура" и названия какой-то ячейки) Эти ячейки я закрасил черным цветом. Снизу от этой ячейки идут названия листов и названия ячеек на тех листах и числа которые нужно переместить туда. Слева от этой черной ячейки располагается название макроса. Справа от черной ячейки - находится единица. Этот шаблон всегда одинаковый.
Как макросом добавить в определенные ячейки, определенных листов - числа которые стоят по левую сторону от названия ячеек, Удалить число идущее по левую сторону от ячейки (зеленая), И запустить макрос, записанный по правую сторону от ячейки (синий) ? (То есть макросу нужно как-то ориентироваться на название ячейки, которая включена в имя шейпа и потом выполнить эти арифметические операции.)
Здравствуйте. Помогите с макросом.
В книге находятся фигуры в виде красного квадрата - название которых включает название определенных ячеек - "ФигураI27", ФигураK34 (состоит из слова "Фигура" и названия какой-то ячейки) Эти ячейки я закрасил черным цветом. Снизу от этой ячейки идут названия листов и названия ячеек на тех листах и числа которые нужно переместить туда. Слева от этой черной ячейки располагается название макроса. Справа от черной ячейки - находится единица. Этот шаблон всегда одинаковый.
Как макросом добавить в определенные ячейки, определенных листов - числа которые стоят по левую сторону от названия ячеек, Удалить число идущее по левую сторону от ячейки (зеленая), И запустить макрос, записанный по правую сторону от ячейки (синий) ? (То есть макросу нужно как-то ориентироваться на название ячейки, которая включена в имя шейпа и потом выполнить эти арифметические операции.)Dalm
Держите! Модулю нужно придать нижеследующий вид, а также назначить фигурам-квадратам макросы ФигураI27_Щелчок и ФигураK34_Щелчок. В прилагаемом файле это всё уже сделано, просто тестируйте. Все макросы фигур вызывают единую подпрограмму обработки runShapeMacro, которая и "разруливает" контекст по переданному имени фигуры в Application.Caller.
Option Explicit
Sub Макрос1() [A27] = [A27] + 1 EndSub
Sub Макрос2() [A29] = [A29] + 1 EndSub
Sub ФигураI27_Щелчок()
runShapeMacro Application.Caller EndSub
Sub ФигураK34_Щелчок()
runShapeMacro Application.Caller EndSub
Sub runShapeMacro(ByVal shapeName AsString)
Dim rng As Range Dim rngCurr As Range Dim rngDest As Range Dim wksName AsString Dim cellAddr AsString Dim addr AsString Dim rowLast AsLong Dim row AsLong
addr = Replace(shapeName, "Фигура", "") Set rng = ActiveSheet.Range(addr)
'добавить в определенные ячейки, определенных листов - 'числа которые стоят по левую сторону от названия ячеек, For row = 1To rowLast
wksName = rng.Offset(row, 1) If wksName <> ""Then
cellAddr = rng.Offset(row, 0) Set rngDest = Worksheets(wksName).Range(cellAddr)
rngDest.Value = rng.Offset(row, -1) EndIf Next row
'Удалить число идущее по левую сторону от ячейки,
rng.Previous.MergeArea.Cells(1) = ""
'И запустить макрос, записанный по правую сторону от ячейки.
Application.Run CStr(rng.Offset(0, 1)) EndSub
P.S. ВАЖНО! Каждый блок фигур должен быть отделен от остальных элементов рабочего листа пустыми ячейками по всем направлениям, т.е. должен быть "островом", со всех сторон "омываемым" пустыми ячейками. Это нужно для корректного срабатывания метода Range.CurrentRegion. Проверить текущий регион можно, встав в черную ячейку с красной кнопкой и нажав Ctrl+Shift+8 (или *).
Держите! Модулю нужно придать нижеследующий вид, а также назначить фигурам-квадратам макросы ФигураI27_Щелчок и ФигураK34_Щелчок. В прилагаемом файле это всё уже сделано, просто тестируйте. Все макросы фигур вызывают единую подпрограмму обработки runShapeMacro, которая и "разруливает" контекст по переданному имени фигуры в Application.Caller.
Option Explicit
Sub Макрос1() [A27] = [A27] + 1 EndSub
Sub Макрос2() [A29] = [A29] + 1 EndSub
Sub ФигураI27_Щелчок()
runShapeMacro Application.Caller EndSub
Sub ФигураK34_Щелчок()
runShapeMacro Application.Caller EndSub
Sub runShapeMacro(ByVal shapeName AsString)
Dim rng As Range Dim rngCurr As Range Dim rngDest As Range Dim wksName AsString Dim cellAddr AsString Dim addr AsString Dim rowLast AsLong Dim row AsLong
addr = Replace(shapeName, "Фигура", "") Set rng = ActiveSheet.Range(addr)
'добавить в определенные ячейки, определенных листов - 'числа которые стоят по левую сторону от названия ячеек, For row = 1To rowLast
wksName = rng.Offset(row, 1) If wksName <> ""Then
cellAddr = rng.Offset(row, 0) Set rngDest = Worksheets(wksName).Range(cellAddr)
rngDest.Value = rng.Offset(row, -1) EndIf Next row
'Удалить число идущее по левую сторону от ячейки,
rng.Previous.MergeArea.Cells(1) = ""
'И запустить макрос, записанный по правую сторону от ячейки.
Application.Run CStr(rng.Offset(0, 1)) EndSub
P.S. ВАЖНО! Каждый блок фигур должен быть отделен от остальных элементов рабочего листа пустыми ячейками по всем направлениям, т.е. должен быть "островом", со всех сторон "омываемым" пустыми ячейками. Это нужно для корректного срабатывания метода Range.CurrentRegion. Проверить текущий регион можно, встав в черную ячейку с красной кнопкой и нажав Ctrl+Shift+8 (или *).Gustav