Страницы: 1
RSS
Применение SelectionChange
 
Всем привет!  
Есть такой вот пример на сайте Microsoft  
 
Dim x As Long  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
   ' Set the row containing the active cell to bold.  
   'ActiveCell.EntireRow.Font.Bold = True  
   ' Check for first execution of the macro and set row value  
   ' if it is:  
   If x = Empty Then  
       x = ActiveCell.Row  
 
   ' Set previous row property back to normal, or not bold.  
   ElseIf Not x = ActiveCell.Row Then  
      Rows(x).EntireRow.Font.Bold = False  
   End If  
 
   ' Capture new row value for comparison against next selection.  
   x = ActiveCell.Row  
End Sub  
 
Вещь хорошая, но как всегда надо усовершенствовать.  
В примере - при выделении ячейки вся строка становится "жирненькой", уходим со строки - обычный шрифт  
И встала задача - а если какие-то ячейки в строке уже были выделены "жирным" шрифтом? Как можно формат таких ячеек оставить в исходном состоянии после ухода со строки?  
Если непонятно объяснил - пишите
 
Имхо 2 варианта:  
1. Копирование средствами VBA формата текущей строки до изменения на пустую, потом такая же процедура в обратную сторону;  
2. Создание временного одномерного массива с 0(нежирный) и 1(жирный) для каждой ячейки текущей строки, при уходе - автовосстановление формата на основе массива.
 
{quote}{login=Raptor}{date=29.07.2008 06:14}{thema=}{post}  
2. Создание временного одномерного массива с 0(нежирный) и 1(жирный) для каждой ячейки текущей строки, при уходе - автовосстановление формата на основе массива.{/post}{/quote}  
Я пытался так сделать, но что-то не очень получается  
Больно много вариантов развития событий: и переход стрелками или мышкой ВВЕРХ (ВНИЗ), а если ВЛЕВО или ВПРАВО?  
Массив уже не одномерный какой-то
 
Посмотрите прием с этого сайта "Координатное выделение"  
http://www.planetaexcel.ru/tip.php?aid=61  
На форуме его еще несколько усовершенствовали.  
Кроме того можно пользоваться другими средствами форматирования, а не только жирностью шрифта. Например, у Вас не используется заливка ячеек, тогда Rows(x).EntireRow.Interior.ColorIndex=6 строка заливается желтым. ColorIndex=xlNone - нет заливки.  
Размер, цвет шрифта, курсив, зачеркнутый, граница - вариантов масса.  
Rows(x).EntireRow.Borders(xlDiagonalDown).LineStyle = xlContinuous - вариант с диагональной линией в ячейке.
 
навскидку:  
 
 
при входе  
 
восстанавливаем формат предыдущего выделения(откуда - см дальше)  
 
записываем код формата и адрес(например, в пространстве имен - т.е. создаем уникальное имя с кодом формата и адресом или в самом имени или вместо refer)  
 
меняем формат.
 
{quote}{login=Лузер™}{date=30.07.2008 08:46}{thema=}{post}Например, у Вас не используется заливка ячеек, тогда Rows(x).EntireRow.Interior.ColorIndex=6 строка заливается желтым. ColorIndex=xlNone - нет заливки.  
{/post}{/quote}  
В принципе мне как раз и нужна была заливка :-)  
Только часть ячеек оказалась "цветной", вот и возникла задача сохранения формата ячеек(мало ли каким он окажется)
 
{quote}{login=слэн}{date=30.07.2008 09:01}{thema=}{post}навскидку:  
 
 
при входе  
 
восстанавливаем формат предыдущего выделения(откуда - см дальше)  
 
записываем код формата и адрес(например, в пространстве имен - т.е. создаем уникальное имя с кодом формата и адресом или в самом имени или вместо refer)  
 
меняем формат.{/post}{/quote}  
Ой! я еще не владею настолько Excel и VBA, всего-то пару месяцев как этим занимаюсь вплотную  
Можно чуть подробнее, заранее благодарен
 
А координатное выделение Вам по какой причине не подходит?
 
If isnnameinworkbook(format_name) Then  
       Range(getadr(format_name)).Font.Bold = getformat(format_name)  
       Names(format_name).RefersTo = target.Font.Bold & "ЪЪЪ" & target.Address  
       target.Font.Bold = True  
   End If
 
{quote}{login=Лузер™}{date=30.07.2008 11:17}{thema=}{post}А координатное выделение Вам по какой причине не подходит?{/post}{/quote}  
Так ведь лох ушастый ;-)  
Недоперепил, как говорит Задорнов  
Вполне достойный вариант  
Спасибо!
Страницы: 1
Читают тему
Наверх