Имею проблему в работе с OLEObjects. Создал СкроллБар на листе, определил его основные свойства, дал имя связанной ячейке:
[vba]
Код
Sub Create_SB() Dim ScBar As ScrollBar Set ScBar = ActiveSheet.ScrollBars.Add(48, 15, 240, 15) '(Left,Top,Width,Height) With ScBar .Name = "Scroll Bar 1" .Value = 0 'текущее значение в связанной ячейки и начальное положение ползунка .Min = 1 'минимум .Max = 50 'максимум .SmallChange = 1 'шаг изменения .LargeChange = 10 'шаг изменения по страницам .LinkedCell = Cells(2, 7).Address 'связь с ячейкой .LinkedCell = "G7" .Display3DShading = True End With Cells(2, 7).Font.Color = RGB(255, 0, 0) 'цвет цифры в связанной ячейке Cells(2, 7).Name = "Main_Scroll" End Sub
[/vba]
А как теперь добраться до его свойств? К примеру, требуется, получить имя связанной ячейки и занести его в переменную.
Имею проблему в работе с OLEObjects. Создал СкроллБар на листе, определил его основные свойства, дал имя связанной ячейке:
[vba]
Код
Sub Create_SB() Dim ScBar As ScrollBar Set ScBar = ActiveSheet.ScrollBars.Add(48, 15, 240, 15) '(Left,Top,Width,Height) With ScBar .Name = "Scroll Bar 1" .Value = 0 'текущее значение в связанной ячейки и начальное положение ползунка .Min = 1 'минимум .Max = 50 'максимум .SmallChange = 1 'шаг изменения .LargeChange = 10 'шаг изменения по страницам .LinkedCell = Cells(2, 7).Address 'связь с ячейкой .LinkedCell = "G7" .Display3DShading = True End With Cells(2, 7).Font.Color = RGB(255, 0, 0) 'цвет цифры в связанной ячейке Cells(2, 7).Name = "Main_Scroll" End Sub
[/vba]
А как теперь добраться до его свойств? К примеру, требуется, получить имя связанной ячейки и занести его в переменную.Vostok
Как-то смысл ускользает - если сами кодом задаёте ячейку, то зачем кодом искать её имя, он ведь известно? Но как вариант - перебором: [vba]
Код
Sub tt() Dim x As Object For Each x In Application.Names If x.RefersTo = Range(ActiveSheet.ScrollBars(1).LinkedCell).Name Then Debug.Print x.Name: Exit For Next End Sub
[/vba]
Как-то смысл ускользает - если сами кодом задаёте ячейку, то зачем кодом искать её имя, он ведь известно? Но как вариант - перебором: [vba]
Код
Sub tt() Dim x As Object For Each x In Application.Names If x.RefersTo = Range(ActiveSheet.ScrollBars(1).LinkedCell).Name Then Debug.Print x.Name: Exit For Next End Sub
Как-то смысл ускользает - если сами кодом задаёте ячейку, то зачем кодом искать её имя, он ведь известно?
Не известно. У меня Лист, а на нём 13 диаграмм. Под каждой свой скроллбар и связанная с ним ячейка с именем. Пользователь вызывает Форму и делает выбор трёх диаграмм (из этих 13-ти) для копирования на новый лист. Какие это будут диаграммы - не известно. Но к каждой копируемой диаграмме нужно отложить в сторонку имя связанной ячейки её скроллбара для дальнейшего кода. Но всё равно, СПАСИБО за рабочий вариант.
Как-то смысл ускользает - если сами кодом задаёте ячейку, то зачем кодом искать её имя, он ведь известно?
Не известно. У меня Лист, а на нём 13 диаграмм. Под каждой свой скроллбар и связанная с ним ячейка с именем. Пользователь вызывает Форму и делает выбор трёх диаграмм (из этих 13-ти) для копирования на новый лист. Какие это будут диаграммы - не известно. Но к каждой копируемой диаграмме нужно отложить в сторонку имя связанной ячейки её скроллбара для дальнейшего кода. Но всё равно, СПАСИБО за рабочий вариант.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Среда, 13.05.2015, 09:08
Name.Name это круто! По "Не известно" - так ведь когда пишите код и привязываете скролбары - имена ячеек известны, можно их сразу и отложить в сторонку. Или пользователи имеют привычку их переименовывать?
Name.Name это круто! По "Не известно" - так ведь когда пишите код и привязываете скролбары - имена ячеек известны, можно их сразу и отложить в сторонку. Или пользователи имеют привычку их переименовывать?Hugo
так ведь когда пишите код и привязываете скролбары - имена ячеек известны, можно их сразу и отложить в сторонку.
Ок. Отложил. А дальше? Во-первых - нужно где-то на лист записывать эти имена. А потом, всё равно нужно знать какое именно имя из 13-ти отложенных нужно достать в нужное время. Другое дело при выборе диаграммы для .Copy откладывать только те имена, которые связаны с выбранной Диаграммой и вносить его в массив. Менее трудоёмкое занятие и более оперативное. Вы просто не видите Задачи в Полном Объёме, иначе Вы бы со мной согласились. А привести здесь задачу в полном файле не могу из-за его огромнейшего объёма.
так ведь когда пишите код и привязываете скролбары - имена ячеек известны, можно их сразу и отложить в сторонку.
Ок. Отложил. А дальше? Во-первых - нужно где-то на лист записывать эти имена. А потом, всё равно нужно знать какое именно имя из 13-ти отложенных нужно достать в нужное время. Другое дело при выборе диаграммы для .Copy откладывать только те имена, которые связаны с выбранной Диаграммой и вносить его в массив. Менее трудоёмкое занятие и более оперативное. Вы просто не видите Задачи в Полном Объёме, иначе Вы бы со мной согласились. А привести здесь задачу в полном файле не могу из-за его огромнейшего объёма.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Среда, 13.05.2015, 09:19
Лист с диаграммами уже давно построен. Нет там больше никакого массива. (И таких листов у меня 10 штук. На каждом по 13-26 диаграмм.) И когда юзер выбирает нужные диаграммы с разных листов, строится Новый лист, на который ложатся эти диаграммы, но в нужной последовательности и порядке следования, согласно стратегии Анализа. Поэтому ActiveSheet тут вообще ни каким боком. Говорю же не подходит этот номер
Лист с диаграммами уже давно построен. Нет там больше никакого массива. (И таких листов у меня 10 штук. На каждом по 13-26 диаграмм.) И когда юзер выбирает нужные диаграммы с разных листов, строится Новый лист, на который ложатся эти диаграммы, но в нужной последовательности и порядке следования, согласно стратегии Анализа. Поэтому ActiveSheet тут вообще ни каким боком. Говорю же не подходит этот номер Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Среда, 13.05.2015, 09:39
Не понимаю... Если на каждый скроллбар свой код - то имя можно сразу жёстко указать. Если в коде выявляется номер скроллбара - то по номеру можно взять имя из массива. Но в общем т.к. есть Name.Name - то это оптимально, не нужно ведь лазить за этим свойством 100000 раз в цикле.
Не понимаю... Если на каждый скроллбар свой код - то имя можно сразу жёстко указать. Если в коде выявляется номер скроллбара - то по номеру можно взять имя из массива. Но в общем т.к. есть Name.Name - то это оптимально, не нужно ведь лазить за этим свойством 100000 раз в цикле.Hugo