Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2009, 17:19   #1
nemoomen
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 58
По умолчанию Определение разрешения экрана

Господа, пожалуйста наставьте на путь истинный!

Рабочая программа используется на компах в офисе с разными мониторами. Задумал програмное определение разрешения монитора и "подгонку" под его размеры основной страницы книги.
В одной книжке нашел примерно следующее

Код:
Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
    
Private Sub Workbook_Open()

    x = GetSystemMetrics(SM_CXSCREEN)
    y = GetSystemMetrics(SM_CYSCREEN)
    If x = 768 Then ActiveWindow.Zoom = 80
    ActiveWindow.Zoom = 100

End Sub
При запуске-закрытии книги вылезает ошибка (в приложении)

Где ошибся?
Изображения
Тип файла: jpg error.jpg (14.2 Кб, 160 просмотров)
nemoomen вне форума Ответить с цитированием
Старый 15.03.2009, 18:55   #2
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от nemoomen Посмотреть сообщение
разрешения монитора и "подгонку" под его размеры основной страницы книги.
Я использую такой макрос от SAS
Код:
Private Sub Workbook_Open()
    Application.EnableEvents = False
Dim i As Integer, xK As Long
i = 11: xK = 23 ': x = 115 'Масштаб для все листов
            For L = 1 To 16
            Sheets(L).Select
            'If L = 8 Then xK = 22
            If L = 14 Then xK = 21: i = 9
            If L > 14 Then xK = 23
    R = ActiveCell.Row
    C = ActiveCell.Column
    Range(Cells(1, 1), Cells(xK, i)).Select
    ActiveWindow.Zoom = True
    Cells(R, C).Select
    xK = 23
            Next
Application.EnableEvents = True
End Sub
valerij вне форума Ответить с цитированием
Старый 15.03.2009, 19:19   #3
nemoomen
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 58
По умолчанию

Понятно, но не совсем то.

Valerij, вы знаете, какого размера(маштаба) должны быть листы и представленным кодом, после открытия книги, приводите маштаб листов к константе.

У меня несколько другая задача:
Определив программно размерность используемого монитора, подогнать маштаб ПЕРВОЙ страницы книги под максимальное заполнение экрана монитора.

Маленький скин с видом первого листа прилагаю.
Изображения
Тип файла: jpg first page 1.jpg (39.6 Кб, 177 просмотров)
nemoomen вне форума Ответить с цитированием
Старый 15.03.2009, 19:40   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от nemoomen Посмотреть сообщение
У меня несколько другая задача:
Определив программно размерность используемого монитора, подогнать маштаб ПЕРВОЙ страницы книги под максимальное заполнение экрана монитора..
У меня 4 -монитора, 17' прямоугольник, 19' квадрат, 19' прямоугольник и 15'. На любом мониторе, моя книга открывается с полным заполнением экрана, которое я задал в макросе
valerij вне форума Ответить с цитированием
Старый 15.03.2009, 19:59   #5
nemoomen
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 58
По умолчанию Решено!

Спасибо, Valerij !

В итоге составлен следующий код:
Код:
Private Sub Workbook_Open()

Application.ScreenUpdating = False 'отключил обновление экрана
Application.EnableEvents = False
    
Dim i As Integer, xK As Long
i = 24: xK = 31
Sheets(1).Range(Cells(1, 1), Cells(xK, i)).Select
ActiveWindow.Zoom = True
Range("A1").Select

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
Спасибо за идею! И Вам и SAS!
nemoomen вне форума Ответить с цитированием
Старый 15.03.2009, 23:05   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В Вашем случае всё делается проще:
Код:
Sub testZoom()
    Set ra = Selection    ' запоминаем выделенную область листа
    [a1:g1].Select    ' выделяем нужное количество столбцов
    ActiveWindow.Zoom = True ' устанавливаем масштаб по выделению
    ra.Select ' восстанавливаем прежнее выделение на листе
End Sub
Или даже так:
Код:
Sub testZoom()
    [a1:g1].Select: ActiveWindow.Zoom = True
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.03.2009, 00:20   #7
nemoomen
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 58
По умолчанию

Интересно, ну просто для собственного развития, почему всетаки первый код ошибку выдавал?
(вдруг пригодится, если освоить)
nemoomen вне форума Ответить с цитированием
Старый 16.03.2009, 00:25   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
почему всетаки первый код ошибку выдавал?
Вставь этот код в новый программный модуль (а не в модуль листа или книги, как ты делал это раньше)
Код:
Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0, SM_CYSCREEN = 1

Private Sub Workbook_Open()
    x = GetSystemMetrics(SM_CXSCREEN)
    y = GetSystemMetrics(SM_CYSCREEN)
    MsgBox "Разрешение экрана " & x & " * " & y
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 16.03.2009, 02:40   #9
nemoomen
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 58
По умолчанию

Для того чтобы код сработал при открытии необходимо:

Код:
Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0, SM_CYSCREEN = 1
разместить в новом модуле, а
Код:
Private Sub Workbook_Open()
    x = GetSystemMetrics(SM_CXSCREEN)
    y = GetSystemMetrics(SM_CYSCREEN)
    MsgBox "Разрешение экрана " & x & " * " & y
End Sub
в модуле "ЭтаКнига"

Моя благодарность EducatedFool за разъяснения!
nemoomen вне форума Ответить с цитированием
Старый 16.03.2009, 22:49   #10
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вставь этот код в новый программный модуль (а не в модуль листа или книги, как ты делал это раньше)
Игорь, а как это делается, просвети?
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с установкой разрешения экрана andrei111_05 Компьютерное железо 4 26.03.2009 00:03
разрешения общего доступа и ntfs разрешения Zerone Свободное общение 4 16.02.2009 17:05
Смена разрешения экрана san72 Помощь студентам 3 05.06.2008 12:38
Определение разрешения монитора(ов) lamonana Общие вопросы Delphi 2 09.03.2008 18:56
как сделать так что при изменении разрешения экрана программа работала... Victor[famas] Общие вопросы Delphi 7 13.02.2008 12:48