Некрасиво.
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