Добрый день уважаемые форумчане!!! Прошу вас разъяснить с чем связано не активность кнопки вставить на вкладке разработчик при нажатой кнопки режим конструктора??? [img][/img] обращался к ГУГЛУ но не могу найти ответа (((( или просто плохо ищу возможно
Добрый день уважаемые форумчане!!! Прошу вас разъяснить с чем связано не активность кнопки вставить на вкладке разработчик при нажатой кнопки режим конструктора??? [img][/img] обращался к ГУГЛУ но не могу найти ответа (((( или просто плохо ищу возможноlebensvoll
А если Конструктор отжать, то Вставить активна? Если нет, то посмотрите: 1. Не выделено ли несколько листов сразу? 2. Не стоит ли защита листа? 3. Нет ли общего доступа к файлу и разрешения нескольким пользователям редактировать? 4. Такое безобразие везде или только в этой книге ?
Если на все вопросы ответ "нет", то попробуйте скопировать этот лист в отдельную книгу и положить сюда
А если Конструктор отжать, то Вставить активна? Если нет, то посмотрите: 1. Не выделено ли несколько листов сразу? 2. Не стоит ли защита листа? 3. Нет ли общего доступа к файлу и разрешения нескольким пользователям редактировать? 4. Такое безобразие везде или только в этой книге ?
Если на все вопросы ответ "нет", то попробуйте скопировать этот лист в отдельную книгу и положить сюда_Boroda_
Был код для Worksheet_Change и Worksheet_SelectionChange, где ничего особенного не проиходило (проверки там всякие и все). Проект большой, файл не цепляется.
Поправлюсь:
Был код для Worksheet_Change и Worksheet_SelectionChange, где ничего особенного не проиходило (проверки там всякие и все). Проект большой, файл не цепляется.SGerman
Мудрость приходит со старостью. Но иногда старость приходит одна :)
Сейчас внимательнее просмотрел код SelectionChange: в нем проверяется, с какой строки ушел фокус и для старой строки пвыполняется проверка всех ячеек и изменение цвета фона тех из них, где были обнаружены ошибки. При этом собственно перемещения фокуса не происходит.
Так вот, если окраски не было (для строк заголовка), то функция "Вставить" остается активной, а если была, то неактивной. Такие вот вареники :)
Вот код функции окраски:
[vba]
Код
Public Function Check_PaintCells(rRange As Range, sCode As String) As Boolean ' По указанному коду ищет в таблице цветовой палитры ячейку - образец и, если в колонке ' "Красить" найденной строки значение "Да", красит указанный диапазон ячеек ' в соответствующий цвет (фон и символы) и возвращает true ' В противном случае возвращается false Dim i As Integer Dim j As Integer
Check_PaintCells = False i = Find_ManualTableRow("Цветовая палитра выделения ошибок при проверке данных") If i > 0 Then For j = i + 1 To i + 10 ' Таблица не должна быть более 9 строк If Worksheets("Manual").Cells(j, 5).Value = sCode Then ' Указанный код найден If Worksheets("Manual").Cells(j, 6).Value = "Да" Then ' Установлен режим окраски для этого кода rRange.Interior.Color = Worksheets("Manual").Cells(j, 3).Interior.Color rRange.Font.Color = Worksheets("Manual").Cells(j, 3).Font.Color Check_PaintCells = True Else ' Не установлен режим окраски для этого кода ошибки Check_PaintCells = False End If Check_PaintCells = True Exit For End If Next j End If
End Function
[/vba]
Сейчас внимательнее просмотрел код SelectionChange: в нем проверяется, с какой строки ушел фокус и для старой строки пвыполняется проверка всех ячеек и изменение цвета фона тех из них, где были обнаружены ошибки. При этом собственно перемещения фокуса не происходит.
Так вот, если окраски не было (для строк заголовка), то функция "Вставить" остается активной, а если была, то неактивной. Такие вот вареники :)
Вот код функции окраски:
[vba]
Код
Public Function Check_PaintCells(rRange As Range, sCode As String) As Boolean ' По указанному коду ищет в таблице цветовой палитры ячейку - образец и, если в колонке ' "Красить" найденной строки значение "Да", красит указанный диапазон ячеек ' в соответствующий цвет (фон и символы) и возвращает true ' В противном случае возвращается false Dim i As Integer Dim j As Integer
Check_PaintCells = False i = Find_ManualTableRow("Цветовая палитра выделения ошибок при проверке данных") If i > 0 Then For j = i + 1 To i + 10 ' Таблица не должна быть более 9 строк If Worksheets("Manual").Cells(j, 5).Value = sCode Then ' Указанный код найден If Worksheets("Manual").Cells(j, 6).Value = "Да" Then ' Установлен режим окраски для этого кода rRange.Interior.Color = Worksheets("Manual").Cells(j, 3).Interior.Color rRange.Font.Color = Worksheets("Manual").Cells(j, 3).Font.Color Check_PaintCells = True Else ' Не установлен режим окраски для этого кода ошибки Check_PaintCells = False End If Check_PaintCells = True Exit For End If Next j End If
Public Function Find_ManualTableRow(sTableName As String) As Integer ' Функция ищет на листе Manual указанную таблицу (колонка A) и, если находит, ' возвращает ее номер. Иначе возвращается -1 Dim i As Integer Dim ret As Integer
ret = -1 With Worksheets("Manual") For i = 1 To 200 If .Cells(i, 1).Value = sTableName Then ret = i Exit For End If Next i End With Find_ManualTableRow = ret
End Function
[/vba]
А вот код для полноты картины:
[vba]
Код
Public Function Find_ManualTableRow(sTableName As String) As Integer ' Функция ищет на листе Manual указанную таблицу (колонка A) и, если находит, ' возвращает ее номер. Иначе возвращается -1 Dim i As Integer Dim ret As Integer
ret = -1 With Worksheets("Manual") For i = 1 To 200 If .Cells(i, 1).Value = sTableName Then ret = i Exit For End If Next i End With Find_ManualTableRow = ret
Manual - лист с настроечными таблицами (для гибкости изменения настроек придумал хранить их в самой книге на отдельном листе), а смена фокуса обрабатывается для другого листа - с данными пользователя, откуда и передается ссылка на ячейку как переменная rRange
Manual - лист с настроечными таблицами (для гибкости изменения настроек придумал хранить их в самой книге на отдельном листе), а смена фокуса обрабатывается для другого листа - с данными пользователя, откуда и передается ссылка на ячейку как переменная rRangeSGerman
Мудрость приходит со старостью. Но иногда старость приходит одна :)