Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313

Как использовать макрос, который увеличивает/уменьшает картинку при щелчке на ней

26.06.2014, 22:40. Показов 7784. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Внизу приведён макрос, который нашёл на просторах инета, и он почему-то не запускается.
А макрос должен увеличивать/уменьшать картинку при щелчке на ней!
У меня Microsoft Office 2007.
И правильно ли я добавил макрос?
Я выбрал в excel: Разработчик-Visual Basic, и потом в VBA выбрал Insert - Module, и ввёл этот код в окно модуля.
Картинка естественно есть в excelе.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Sub ZoomImage()
     ' Ìàêðîñ äëÿ óâåëè÷åíèÿ / óìåíüøåíèÿ êàðòèíîê â Excel, ïî ùåë÷êó íà íèõ
    ' © 2013 EducatedFool     ExcelVBA.ru/code/ZoomImages
 
     Const ZOOM_RATIO# = 3    ' êîýôôèöèåíò óâåëè÷åíèÿ èçîáðàæåíèÿ
    Const STEPS_COUNT& = 20    ' êîëè÷åñòâî ïðîìåæóòî÷íûõ øàãîâ ïðè óâåëè÷åíèè
    Const ZOOM_SPEED# = 2   ' ñêîðîñòü óâåëè÷åíèÿ / óìåíüøåíèÿ êàðòèíêè ( îò 0 äî 10)
 
     On Error Resume Next: Err.Clear: Dim sha As Shape, s_sha As Shape, i&
     Set s_sha = ActiveSheet.Shapes(Application.Caller)
     If Err Then Exit Sub    ' âûõîä, åñëè ìàêðîñ âûçâàí íå ùåë÷êîì íà êàðòèíêå
 
     If s_sha.Name Like "BigImage_*" Then    ' ùåë÷îê íà óâåëè÷åííîé êàðòèíêå
        With s_sha
             cx1# = .Left + .Width / 2: cy1# = .Top + .Height / 2
             dw# = .Width / STEPS_COUNT&
             dt# = ZOOM_SPEED# / 50 / STEPS_COUNT&
 
             For i& = 1 To STEPS_COUNT&    ' â öèêëå óìåíüøàåì êàðòèíêó
                t = Timer: .Width = .Width - dw#
                 .Left = cx1# - .Width / 2: .Top = cy1# - .Height / 2
                 While Timer - t < dt#: DoEvents: Wend
             Next i
             .Delete    ' à ïîòîì óäàëÿåì å¸
        End With
 
     Else    ' ùåë÷îê íà èñõîäíîé êàðòèíêå, - ñîçäà¸ì å¸ êîïèþ, è óâåëè÷èâàåì
        For Each sha In ActiveSheet.Shapes
             If sha.Name Like "BigImage_*" Then sha.Delete
         Next
 
         Set sha = s_sha.Duplicate    ' ñîçäàåì êîïèþ êàðòèíêè
        sha.Top = s_sha.Top: sha.Left = s_sha.Left    ' ïîìåùàåì êîïèþ ïîâåðõ èñõîäíîé
        sha.Name = "BigImage_" & Timer    ' ïåðåèìåíîâûâàåì èçîáðàæåíèå
        sha.LockAspectRatio = 1
 
         ' åñëè åñòü çàêðåïë¸ííûå ñòîëáöû è ñòðîêè
        TopRowsHeight# = Range("1:1").RowHeight    ' çàêðåïëåíà ïåðâàÿ ñòðîêà
        LeftColumnsWidth# = 0    ' çàêðåïë¸ííûõ ñòîëáöîâ íåò
 
         With sha
             cx1# = .Left + .Width / 2: cy1# = .Top + .Height / 2
 
             cx2# = Columns(ActiveWindow.ScrollColumn).Left - LeftColumnsWidth# + _
                    ActiveWindow.Width / 2 * 100 / ActiveWindow.Zoom
             cy2# = Rows(ActiveWindow.ScrollRow).Top - TopRowsHeight# + _
                    ActiveWindow.Height / 2 * 100 / ActiveWindow.Zoom
 
             dw# = .Width * (ZOOM_RATIO# - 1) / STEPS_COUNT&
             dx# = (cx2# - cx1#) / STEPS_COUNT&: dy# = (cy2# - cy1#) / STEPS_COUNT&
             cx# = cx1#: cy# = cy1#: dt# = ZOOM_SPEED# / 50 / STEPS_COUNT&
 
             For i& = 1 To STEPS_COUNT&
                 t = Timer: cx# = cx# + dx#: cy# = cy# + dy#
                 .Width = .Width + dw#: .Left = cx# - .Width / 2: .Top = cy# - .Height / 2
                 While Timer - t < dt#: DoEvents: Wend
             Next i
         End With
     End If
End Sub
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2014, 22:40
Ответы с готовыми решениями:

Работа со строками: создать метод, который увеличивает или уменьшает дату на определённое количество дней
Создать метод, который увеличивает или уменьшает дату на определённое количество дней(передаётся во входном параметре), результатом работы...

Макрос, который увеличивает значение ячейки А на 1 при изменении ячейки В
Добрый день. Я написал макрос, который увеличивает значение ячейки А на 1 при изменении ячейки В, но почему то значение изменяется...

Резидентная программа, которая при нажатии определенных клавиш уменьшает/увеличивает курсор
Здраствуйте! У меня возникла проблема с реализацией резидентной программы , которая при нажатии ALT+Z/ALT+X уменшает/увеличивает курсор....

31
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
26.06.2014, 23:08
Лучший ответ Сообщение было отмечено Аксима как решение

Решение

А Вы назначили макрос щелчку по картинке или вызываете через Alt+F8 ?
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.06.2014, 23:15
Она есть Like "BigImage_*"?
Показали бы файл с картинкой и нерабочим кодом - а то там может быть 100 причин...

Добавлено через 6 минут
P.S.Хотя нет, не так... Посмотрел файл по ссылке, это уже имя копии будет.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
26.06.2014, 23:18
Кстати, рабочий макрос, только что проверил.
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.06.2014, 07:12  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
А Вы назначили макрос щелчку по картинке или вызываете через Alt+F8 ?
а как надо назначить?
Как можно загрузить сюда файл excel, чтобы показать лист ?
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 07:20
Цитата Сообщение от phpk Посмотреть сообщение
а как надо назначить?
Щелчок правой кнопкой по рисунку, выбираете "Назначить макрос", в появившемся окне выбираете свой макрос.
1
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.06.2014, 07:25  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
Щелчок правой кнопкой по рисунку, выбираете "Назначить макрос", в появившемся окне выбираете свой макрос.
ясно, благодарю.
А как назначить этот макрос, если рисунков очень много?
Придётся каждому рисунку отдельно назначать макрос правой кнопкой?
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 07:38
Цитата Сообщение от phpk Посмотреть сообщение
ясно, благодарю.
А как назначить этот макрос, если рисунков очень много?
Придётся каждому рисунку отдельно назначать макрос правой кнопкой?
А что вам мешает выделить все рисунки и и также назначить им всем этот макрос одни действием?

Добавлено через 3 минуты
А можно написать макрос для назначения макроса всем картинкам на листе.
1
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.06.2014, 16:54  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
А можно написать макрос для назначения макроса всем картинкам на листе.
подскажите пожалуйста, как написать такой макрос?
Очень нужно, потому что с выделением не очень удобно.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 17:01
Можно так

Visual Basic
1
2
3
4
5
6
Sub Назначить_макрос()
    For i = 1 To 1000' примерное количество рисунков на листе
        On Error Resume Next
        ActiveSheet.Pictures(i).OnAction = "ZoomImage"
    Next
End Sub
1
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.06.2014, 17:06  [ТС]
извините за немного умный вопрос, но а куда вставить этот макрос?
В тот же модуль, в котором и ZoomImage, или в VBA двойным щелчком на активном листе?
В VBA я не очень разбираюсь
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 17:08
Можно в тот же модуль.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
27.06.2014, 17:08
Я бы On Error Resume Next из цикла вынес.
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 17:12
Цитата Сообщение от Hugo121 Посмотреть сообщение
Я бы On Error Resume Next из цикла вынес.
Да,да конечно.
И как он там оказался?
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.06.2014, 17:47  [ТС]
вот файл, в котором почему-то на один рисунок работает макрос, а на остальные нет!
Лист Microsoft Office Excel.rar
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 17:52
On Error Resume Next нужно было вынеси за прелелы цикла, а не убирать совсем.

Visual Basic
1
2
3
4
5
6
  Sub Назначить_макрос()
    On Error Resume Next
    For i = 1 To 1000 ' примерное количество рисунков на листе
        ActiveSheet.Pictures(i).OnAction = "ZoomImage"
    Next
End Sub
1
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.06.2014, 18:06  [ТС]
всёравно не хочет почему-то
Лист Microsoft Office Excel.rar
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
27.06.2014, 18:10
Цитата Сообщение от phpk Посмотреть сообщение
всёравно не хочет почему-то
Все у Вас работает, просто макрос нужно запустить хотя бы раз

Alt F8 выбираете макрос "Назначить_макрос" и нажимаете кнопку "выполнить"
1
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
28.06.2014, 19:00  [ТС]
добавил код для автоматической подгонки размера рисунка под размер ячейки, но он почему-то не работает!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("I:I,J:J,K:K"), Target) Is Nothing Then
    If Application.Dialogs(xlDialogInsertPicture).Show Then
        With Selection
      .ShapeRange.LockAspectRatio = msoFalse
            .Width = Target.Width
            .Height = Target.Height
        End With
    End If
End If
End Sub
т.е. при наведении на ячейки I,J,K должен происходить выбор и вставка рисунка в ячейку, а не работает
вот файл
Лист Microsoft Office Excel.rar
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
28.06.2014, 19:30  [ТС]
разобрался

Добавлено через 9 минут
кстати, как заставить макрос ZoomImage() при увеличении сделать немного больше высоту?
ширина нормальная, а надо увеличить высоту рисунка.
т.е. когда анимация увеличения закончится, надо чтобы высота рисунка была больше.
Подскажите, как это реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.06.2014, 19:30
Помогаю со студенческими работами здесь

При щелчке на кнопку сменить текст на ней
Первый вопрос: Кнопка называется Старт, вот я нажал на неё, нужно что бы название поменялась на Стоп и наоборот, как такое сделать?

Разработать функцию, которая уменьшает в N раз число, кратное N, а остальные увеличивает на единицу
Задача: Разработать функцию f(x), которая число, кратное 5, уменьшает в 5 раз, а остальные числа увеличивает на 1. #include...

Макрос, который вставляет картинку в документ Word
Возникла следующая проблема, есть простой макрос, который вставляет графический файл, в документ, но вот непонятно как заставить макрос...

Padding уменьшает фоновую картинку
Когда в 20 строчке padding-top: 0, проблем не возникает и фоновая картинка растянута на всю высоту сайта 1024px, но как только она...

Плагин Magic Zoom уменьшает исходную картинку
Использую плагин Magic Zoom вот отсюда: https://www.magictoolbox.com/magiczoom/integration/ На Joomla 3 с JoomShoping 4.10.0. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru