Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Некрасиво.

1. Проверяйте возвращаемое значение методом .Show() и обрабатывайте только True:
Код: Выделить весь код
If .Dialogs(xlDialogEditColor).Show(…) Then
    …
End If
2. Метод «.Dialogs(xlDialogEditColor).Show(40, …)» не просто показывает диалог выбора цвета для указанного индекса палитры Рабочей книги, но и действительно меняет его. Это есть совсем нехорошо. Посему недостаточно просто использовать данный метод и забыть про последствия. Необходимо предварительно сохранить текущий цвет из указанного индекса палитры, использовать метод, получить выбранный цвет, вернуть сохранённый цвет индексу палитры. Наподобие:
Код: Выделить весь код
Option Explicit

Dim lngSelectedColor As Long                                  'переменная уровня модуля для использования её внутри формы

Private Sub btnGetColor_Click()
    Const intColorIndex = 40
    Dim lngPrevColor As Long
    
    
    lngPrevColor = ThisWorkbook.Colors(intColorIndex)
    
    If Application.Dialogs(xlDialogEditColor).Show(intColorIndex, 255, 0, 0) Then
        lngSelectedColor = ThisWorkbook.Colors(intColorIndex) 'получаем выбранный код цвета
        btnGetColor.BackColor = intResult                     'назначаем цвет специально выделенной кнопке
        ThisWorkbook.Colors(intColorIndex) = lngPrevColor
    End If
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:26, 23-05-2016 | #13