Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2010 vba Проблема с позиционированием графика / 19 сообщений из 19, страница 1 из 1
14.04.2015, 11:44
    #38935722
hyp1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Задачка довольно простая, но решить ее не получается.
Есть ряд листов-графиков, у которых отлавливается событие
Chart_Activate.

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

1) прокрутить скролл в 0;0, но поскольку лист имеет только график без ячеек
не работает
ActiveWindow.ScrollRow = 1
и почему-то не работает, вообще оно хоть у кого-нибудь работает?
ActiveWindow.ScrollIntoView Left:=0, Top:=0, Width:=100, Height:=100

2) и масштабировать график под размер окошка (в 2007 excel работал код, в 2010 только для чтения доступны свойства)
With Me.ChartArea
.Top = 0
.Left = 0
.Height = ActiveWindow.UsableHeight
.Width = ActiveWindow.UsableWidth
End With

У кого есть опыт/умные мысли в тему/советы поделитесь как решить проблемку
...
Рейтинг: 0 / 0
14.04.2015, 13:15
    #38935836
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Запишите макрорекордером возможные действия юзера по изгаживанию графика и изучите полученный код. И станет ясно, что сохранять и как восстанавливать.
...
Рейтинг: 0 / 0
14.04.2015, 13:20
    #38935846
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Akina,

боюсь, скроллинг не запишется ))
...
Рейтинг: 0 / 0
14.04.2015, 13:31
    #38935861
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Shocker.Proбоюсь, скроллинг не запишется ))Мне лень изучать, является скроллинг процессом в Экселе, процессом в объекте График, или мож ещё там чем. Человеку надо - вот пусть и пашет, изучает и разбирается.
...
Рейтинг: 0 / 0
14.04.2015, 13:55
    #38935904
hyp1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Не проблема, посмотрел записанные макросы.
Там где лист-график нету команд скроллинга
Там где лист с ячейками есть команды типа ActiveWindow.SmallScroll Down:=-57.

Вопрос: Можно ли на этом основании сказать, что скроллить из vba невозможно листы-графики?
...
Рейтинг: 0 / 0
14.04.2015, 14:15
    #38935944
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Нет такого понятия как лист-график.
Вероятно, речь о листе, на коем расположен некий объект (Shape?). И скорее всего скроллинг выполняется методами этого объекта, изменяя при этом его свойства, и программно соответственно тоже нужно делать так же.
Так что сперва разберись, с чем имеешь дело, поизучай объектную модель, а потом Locals Window в руки - и вперёд, смотреть, что и как изменяется при скроллинге. Поймёшь - сделаешь то же из VBA.
...
Рейтинг: 0 / 0
14.04.2015, 14:23
    #38935954
hyp1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Akina, я извиняюсь, но реально лист-график есть, а понятия нет :) как еще называть вкладку, в которой есть только график.

Почитать объектную модель можно, но хотелось отделаться небольшими временными затратами. Например, чтобы сделать те же действия на обычном листе ушло 20 минут, примерно так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Worksheet_Activate()

    Dim TopRow As Long, TopCol As Long
    
    TopRow = ActiveWindow.VisibleRange.Cells.Row
    TopCol = ActiveWindow.VisibleRange.Cells.Column
    ActiveWindow.SmallScroll ToRight:=1 - TopCol
    ActiveWindow.SmallScroll Up:=TopRow - 1
    
    With Application.ActiveSheet.Shapes(1).Chart.Parent
        .Top = 0
        .Left = 0
        .Height = ActiveWindow.UsableHeight
        .Width = ActiveWindow.UsableWidth
    End With

    ActiveWindow.Zoom = 100

End Sub

Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
14.04.2015, 14:31
    #38935971
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
AkinaНет такого понятия как лист-график.Чего-то ты сегодня жжешь )
Значешь, в чем разница, между Sheet и Worksheet? ))
...
Рейтинг: 0 / 0
14.04.2015, 14:36
    #38935985
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Shocker.ProЗначешь, в чем разница, между Sheet и Worksheet? ))ну, точнее, между коллекциями Sheets и Worksheets
...
Рейтинг: 0 / 0
14.04.2015, 14:36
    #38935986
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Shocker.ProЗнаешь, в чем разница, между Sheet и Worksheet? ))
Sheets == Worksheets + Charts
И что?
...
Рейтинг: 0 / 0
14.04.2015, 14:44
    #38936000
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
The Worksheet object is also a member of the Sheets collection. The Sheets collection contains all the sheets in the workbook (both chart sheets and worksheets).а ты говоришь, нет такого понятия

другой вопрос, что на нем нет ячеек (и связанных с ними свойств), так что скроллинг средствами объектной модели кажется мне маловероятным - надо в сторону API копать, видимо.

скроллбары, я считаю, не принадлежат при этом диаграмме, это видно визуально
...
Рейтинг: 0 / 0
14.04.2015, 15:08
    #38936039
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Да Excel скроллинг вообще не считает изменением. Скроль - не скроль, один хрен в следующий раз файл откроется строго в том же положении.
А вот, например, масштабирование - да. Считается. И в код макрорекордером - рисуется.

[quot Shocker.Pro]что скроллинг средствами объектной модели кажется мне маловероятным
Угу. Но пусть товарищ прочувствует. А потом мы ему расскажем, как сделать...

В общем, всё тривиально. Вставляем модуль, где определяем переменную. При открытии книги запоминаем в неё текущий Zoom. А при каждом Activate меняем его - сперва чуть меньше, чем был, потом ровно как был. Есссно выключив апдейт экрана. В итоге пришли-нагадили-ушли-вернулись-имеем стандартное расположение.

Если охота изменить дефолтный Zoom - придётся задать нужный и именно так сохранить файл. Ну или задать опять же в Workbook_Open.
...
Рейтинг: 0 / 0
14.04.2015, 15:20
    #38936062
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Автору нужно смасштабировать под размер окошка, а не под то, как было при открытии книги.

Собсно. Есть размер экрана, текущий размер диаграммы и текущий зум.
hyp1k
Код: vbnet
1.
2.
3.
4.
5.
6.
With Me.ChartArea
         .Top = 0
         .Left = 0
         .Height = ActiveWindow.UsableHeight
         .Width = ActiveWindow.UsableWidth
        End With

Раз нельзя записать размер диаграммы, что мешает вычислить и записать новый зум, имея эти данные?
...
Рейтинг: 0 / 0
14.04.2015, 15:31
    #38936080
hyp1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Shocker.Pro, если я вас правильно понял, то мешает то, что ширина и высота монитора требуют зума по X и Y, зум же в экселе бывает только общий на соответствие пропорций монитора и графика никак не повлиять. Поэкспериментировав, я решил перекинуть график в воркщит и защитить лист оставив разрешение "изменение объектов", чтобы скрипт мог изменять размеры.

Почему было требование у заказчика помещать графики на спец листы?! и чего я лишаюсь переходя на воркщиты?! пока не понимаю
...
Рейтинг: 0 / 0
14.04.2015, 15:36
    #38936086
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
да, интересно, что нельзя изменять размеры И ПРОПОРЦИИ диаграммы на спецлисте...
...
Рейтинг: 0 / 0
14.04.2015, 15:39
    #38936094
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
впрочем, такой возможности я не нашел и 2003-м (то есть, видимо) была только программная возможность
...
Рейтинг: 0 / 0
14.04.2015, 16:18
    #38936160
hyp1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
Угу вижу масштаб по осям, ну да в 2007 аналогично 2003, вкладки нет, программно можно менять.
...
Рейтинг: 0 / 0
14.04.2015, 19:17
    #38936405
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
hyp1k,

Если цель вместить в область - то делается только масштабом. Поэтому можно так попробовать:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub test()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 200 To 60 Step -1
        If ChartArea.Height * ActiveWindow.Zoom / 100 <= ActiveWindow.UsableHeight Then
            Exit For
        End If
        ActiveWindow.Zoom = i
    Next i
    Application.ScreenUpdating = True
End Sub
...
Рейтинг: 0 / 0
15.04.2015, 12:02
    #38936923
hyp1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel 2010 vba Проблема с позиционированием графика
The_Prist, да только пропорции экрана графиком не соблюдаются, ну и бы писал так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Chart_Activate()
    Dim minZoom As Long
    Dim addZoom As Long
    minZoom = ActiveWindow.UsableHeight * 100 / ChartArea.Height
    addZoom = ActiveWindow.UsableWidth * 100 / ChartArea.Width
    If (addZoom < minZoom) Then
        minZoom = addZoom
    End If
    ActiveWindow.Zoom = minZoom
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel 2010 vba Проблема с позиционированием графика / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]