Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.05.2024
Сообщений: 13
1
Excel

Как определить номер строки, где находится кнопка макроса?

18.10.2024, 09:01. Показов 376. Ответов 10

Author24 — интернет-сервис помощи студентам
Добрый день.
Подскажите пожалуйста как определить номер строки, на которой находится кнопка?
По нажатию кнопки мне необходимо определять строку, в которой она находится.

ActiveSheet.Shapes(1).TopLeftCell.Address

Конкретный индекс передать не могу, потому как рисуется много кнопок при каждом формировании файла.
Есть ли способы как для активной ячейки только для активной фигуры узнать какие-то данные?
Или может есть какие другие способы узнать эту информацию?
Миниатюры
Как определить номер строки, где находится кнопка макроса?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2024, 09:01
Ответы с готовыми решениями:

В матрице определить минимальный элемент и номер строки, где он находится
В матрице размерами N*M определить минимальный элемент и номер строки, где он находится (N и M не...

Как определить номер строки, на которой находится выделенный текст?
Текст выделяется программно так: Memo1.SetFocus(); Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;...

как определить номер строки, в которой находится самая длинная серия одинаковых элементов?
всем добрый вечер) Задачка: В целочисленной квадратной матрице определить номер строки, в которой...

Определить номер строки и номер столбца матрицы X(5,6), на пересечении которых находится наибольший по абсолютной величине элемент.
Определить номер строки и номер столбца матрицы X(5,6), на пересечении которых находится наибольший...

10
Модератор
Эксперт MS Access
12072 / 4934 / 789
Регистрация: 07.08.2010
Сообщений: 14,461
Записей в блоге: 4
18.10.2024, 09:12 2
Цитата Сообщение от Nura55 Посмотреть сообщение
Подскажите пожалуйста как определить номер строки, на которой находится кнопка?
а зачем нужна кнопка - достаточно клика на ячейке с текстом ЭТИКЕТКА
или даже ГАЛОЧКА, чтобы выбрать группу строк и все вместе распечатать, может даже и в нужном количестве экземпляров
0
1583 / 379 / 106
Регистрация: 13.11.2008
Сообщений: 790
18.10.2024, 09:24 3
Изучайте Applcation.Caller:
Кто вызвал функцию или процедуру?
0
0 / 0 / 0
Регистрация: 08.05.2024
Сообщений: 13
18.10.2024, 09:42  [ТС] 4
Кнопка рисуется макросом только там где надо. Просто я умею только кнопки делать.

Applcation.Caller выдает "Прямоугольник: скругленные угл", но я с этой информацией ничего сделать не могу прикладного.
0
1583 / 379 / 106
Регистрация: 13.11.2008
Сообщений: 790
18.10.2024, 09:57 5
Цитата Сообщение от Nura55 Посмотреть сообщение
но я с этой информацией ничего сделать не могу прикладного
Статью по ссылке тоже прочитать не осилили? Там вроде вполне понятно описано, что с этим делать.
Плохо, что у Вас не хватило смекалки даже с подробным описанием определить, что делать с предложенным вариантом. Подсказка:
Visual Basic
1
ActiveSheet.Shapes("Прямоугольник: скругленные угл").TopLeftCell.Address
0
0 / 0 / 0
Регистрация: 08.05.2024
Сообщений: 13
18.10.2024, 10:08  [ТС] 6
читаю, но не совсем понимаю почему у меня не работает код, скопированный из статьи
Выдает ошибку еще на этой строке Set rFuncCell = Application.Caller 'ячейка с функцией
0
1583 / 379 / 106
Регистрация: 13.11.2008
Сообщений: 790
18.10.2024, 10:20 7
Цитата Сообщение от Nura55 Посмотреть сообщение
Выдает ошибку еще на этой строке Set rFuncCell = Application.Caller 'ячейка с функцией
да уж...Там ведь в самом начале прям почти Ваш случай описан - с применением кнопок и макросов на них. А Вы зачем-то взяли код из вот этой части:
Теперь рассмотрим другую ситуацию, более распространенную. Вы написали свою пользовательскую функцию
У Вас код внутри пользовательской функции(UDF)?

И там ниже в статье приведен список с пояснениями, что вернет функция в том или ином случае. Тоже должен был хоть какие-то мысли прояснить.
Исходя из всего этого вопрос: Вы макрос как вызываете - кнопкой? Или зачем Вам тогда определять положение кнопки?
Цитата Сообщение от Nura55 Посмотреть сообщение
как определить номер строки, на которой находится кнопка?
Я даже код выше привел, чтобы у Вас мысли появились - видимо, это не тот случай, когда даже прямой намек даст результат.
Но тогда непонятно, почему Вы не прикладываете ни свой код, ни свой файл - чтобы Вам прямо на Ваших данных показали вариант решения? Сами себе усложняете жизнь.
Visual Basic
1
ActiveSheet.Shapes(Applcation.Caller).TopLeftCell.Address
больше нечего предложить, т.к. совершенно неясно куда это и как и где Вы собрались потом применять.
Но это должно быть внутри кода, который вызывается каждой кнопкой напротив ячейки - тогда и будет определено имя именно той кнопки, которая была нажата для вызова макроса.
1
0 / 0 / 0
Регистрация: 08.05.2024
Сообщений: 13
18.10.2024, 11:04  [ТС] 8
есть файл, который формирует задание на работу и во время формирования этого списка к каждой строке макросом формируется автоматически кнопка к строке и автоматом назначается ей другой макрос. Этот макрос уже должен определять текущую строку, в которой находится эта кнопка и запускать печать этикеток. Если бы это все было фиксировано, то у меня даже вопросов бы не возникло.
С Caller просто еще никогда не работала, поэтому с одного щелчка не понимаю что да как. Пытаюсь разобраться.
Вызывается из процедуры обычного модуля.

К сожалению у меня еще не такой уровень познания VBA

Помогите пожалуйста осилить задачку. Вот у меня этот макрос назначается на кнопки, которые автоматически создаются в нужных строках. По первым двум строкам он все выдает адреса, но это если мы знаем конкретный индекс фигуры. Но я то не знаю. Мне вот в это значение индекса нужно передать переменную с индексом нажатой кнопки.
Куда мне нужно прописать Caller, чтобы это заработало?
Миниатюры
Как определить номер строки, где находится кнопка макроса?  
0
help
4396 / 4051 / 807
Регистрация: 13.04.2015
Сообщений: 8,870
18.10.2024, 11:17 9
Цитата Сообщение от Nura55 Посмотреть сообщение
автоматом назначается ей другой макрос
А в этот макрос нельзя параметром передать адрес кнопки?
1
1583 / 379 / 106
Регистрация: 13.11.2008
Сообщений: 790
18.10.2024, 11:25 10
Лучший ответ Сообщение было отмечено Nura55 как решение

Решение

Цитата Сообщение от Nura55 Посмотреть сообщение
Мне вот в это значение индекса нужно передать переменную с индексом нажатой кнопки
Не нужно. К фигурам можно обращаться по имени, а не обязательно по индексу.
Не хочу полстатьи сюда перецитировать - поэтому и дал ссылку. Будет желание разобраться детальнее, чтобы знать где грабли лежат - перечитаете более вдумчиво(может быть когда чуть опыта наберетесь).
Цитата Сообщение от Nura55 Посмотреть сообщение
Куда мне нужно прописать Caller, чтобы это заработало?
Без Вашего файла и полного кода - остается только гадать куда записывать, что за имена у Ваших Shapes и как к ним можно обратиться.
У Вас же есть MsgBox, который показывает Applciation.Caller. Что там отображается? Есть такая фигура на листе? А понимает ли VBA это имя? В статье о таком тоже упоминается - VBA не всегда понимает локальное имя фигур по умолчанию - чаще всего ему нужно внутреннее имя фигуры(оно на английском).
Поэтому, раз уж кнопки создаются кодом - задавайте кнопкам там же сразу имена, чтобы VBA не толковал их двояко. Только смотрите, чтобы имена кнопок не повторялись на одном листе, иначе можно получить неверный адрес ячейки.
В итоге у Вас должно быть что-то вроде этого:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub CreateShapes()
    Dim os As Shape
    Dim indx&
    
    For indx = 1 To 3
        Set os = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 20, 20 * indx, 100, 50)
        os.Name = "_macro_shape_" & indx
        'один макрос на все кнопки - там определяется автоматом к какой ячейке привязана фигура
        os.OnAction = "RunOnShape" 
    Next
End Sub
Sub RunOnShape()
    MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
End Sub
Более подробно уже не подскажу, потому что кода создания фигур у нас тоже нет - он у Вас.
1
0 / 0 / 0
Регистрация: 08.05.2024
Сообщений: 13
18.10.2024, 12:55  [ТС] 11
Да, так получилось реализовать задуманное.
При формировании кнопок сразу назначала названия со сменой индексов в названии и по ним уже получилось понять номер нужной строки. Спасибо всем за помощь.
Новую информацию обязательно приму к подробному изучение
0
18.10.2024, 12:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2024, 12:55
Помогаю со студенческими работами здесь

Определить номер области, где находится точка
17 вариант. Определить номер области, где находится точка M (x, y). Границы области отнести к...

Получить номер строки где находится искомое слово
Вообщем не получается получить номер строки где находится искомое слово, варианты указанные ниже...

Номер строки, где находится минимальный элемент матрицы
Матрицу генерирую случайными числами! Код: implementation {$R *.dfm} var A:array of Real; ...

Номер строки при нажатии в Memo, где находится курсор
как получить номер строки при нажатии в Memo где нажат курсор?

Определить номер области, где находится точка с заданными координатами
Вдруг у вас что-то выйдет ) 17 вариант. Определить номер области, где находится точка M (x, y)....

Найти квадрат максимального элемента и номер строки и столбца, где он находится
Как сделать? не понимаю вообще. 1)Найти квадрат максимального элемента и номер строки и столбца,...

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение наименьшего элемента...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru