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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2017, 12:49   #1
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию Оформление границ ячеек макросом.

Всем привет. С BVA не дружу, поэтому прошу помощи.
Алгоритм действий следующий:
- Активируем ячейку В7 происходит закрашивание вертикальных и горизонтальных границ ячеек в диапазоне А7:J7
- Активируем ячейку В8 происходит закрашивание вертикальных и горизонтальных границ ячеек в диапазоне А8:J8
Подобные манипуляции происходят в строках с 7 по 300.
Файл таблицы во вложении, макросы там уже имеются, к ним надо добавить, описанное выше.
Вложения
Тип файла: rar Документ1.rar (20.8 Кб, 12 просмотров)
irina181 вне форума Ответить с цитированием
Старый 07.10.2017, 13:20   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

все написано правильно, только
1. ничего активировать не нужно, работаем с диапазоном a7:j300
2. есть подозрения, что нужны не только горизонтальные и вертикальные границы, а еще: верхняя, нижняя, левая и правая (сомнительна только необходимость левой границы)

в итоге макрос, который сделает то, что Вы описали, будет выглядеть так:
Код:
Sub Bords()
  Dim b&
  For b = 7 To 12
    [a7:j300].Borders(b).Weight = xlThin
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.10.2017, 13:51   #3
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Спасибо за быстрый ответ, но имелось в виду несколько не то. В результате работы Вашего макроса после активации В7 оформляются границы всего диапазона сразу, а я имел ввиду, что оформляться будут границы только в 7-й строке с А до J. Далее после ввода данных в В8 границы оформятся только в 8-й строке с А до J и так по нарастающей при заполнении строк в указанном диапазоне. И после добавления Вашего макроса в документ, у меня перестала работать нумерация в столбце А, вместо нумерации там появляется формула. Код я сделала так
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim b&
  For b = 7 To 12
    [a7:j300].Borders(b).Weight = xlThin
  Next

'Автонумерация
Range("A7:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
  'переключение раскладки
    Select Case Target.Column    ' в зависимости от номера столбца активной ячеки
        Case 2:    ' для столбца Полис (серия)
            ВключитьАнглийскуюРаскладку
        Case 3:    'на столбце Полис (номер) включаем русскую раскладку клавы и далее всё на русском
            ВключитьРусскуюРаскладку
        Case Else:    ' ничего не делаем (оставляем текущую раскладку)
    End Select
'перемещение курсора по TAB
  Set PrevCell(0) = PrevCell(1)
  Set PrevCell(1) = Target
  If PrevCell(0) Is Nothing Then Exit Sub
  If Target.Column = 1 Then Exit Sub
  EnableEvents = False
  If Target.Column = TabEnd + 1 Then
    If PrevCell(0).Address = Target.Offset(0, -1).Address Then Cells(Target.Row + 1, TabStart).Select
    Set PrevCell(1) = ActiveCell
  End If
  EnableEvents = True
End Sub
irina181 вне форума Ответить с цитированием
Старый 07.10.2017, 13:57   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

на Планете написал Вам такой макрос
Код:
Sub BordsAJ(r&)
  Dim b&
  For b = 7 To 12
    range("a" & r & ":j" & r).Borders(b).Weight = xlThin
  Next
End Sub

а вот пример как его выполнить 294 раза (для строк с 7-й по 300)
Код:
Sub НарисоватьГраницыс7по300Строки
  dim i&
  for i = 7 to 300
    Bords(i)
  next
end sub
да, не подумайте чего... 7 в обоих случаях, это простое совпадение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.10.2017, 14:18   #5
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Не знаю как это всё привязать в коде. Буду форматировать границы вручную.
irina181 вне форума Ответить с цитированием
Старый 07.10.2017, 14:39   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

рано впадать в отчаяние

If PrevCell(0) Is Nothing Then Exit Sub
If Target.Column = 1 Then Exit Sub
EnableEvents = False
Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Borders.LineStyle = xlContinuous
If Target.Column = TabEnd + 1 Then
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.10.2017, 14:49   #7
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Извините за мою бестолковость, но не соображаю я куда это всё в код скопировать. Не буду Вас мучать и сам успокоюсь. Работать будем по старинке. Спасибо за участие.
irina181 вне форума Ответить с цитированием
Старый 07.10.2017, 14:57   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я привел фрагмент текста Вашей процедуры
синим цветом подкрашено то, что нужно вставить между строк в Вашей процедуре!
внимательнее, пожалуйста))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.10.2017, 15:29   #9
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Извините ещё раз за мою бестолковть. Да так работает, но нарушилась моя автонумерация в столбце А. Вместо цифр в столбце А стала появляться просто формула (=IF(RC2="","",MAX(R1C1:R[-1]C)+1)) из кода. В чём проблема? Файл могу выслать.
irina181 вне форума Ответить с цитированием
Старый 08.10.2017, 20:32   #10
irina181
Пользователь
 
Регистрация: 07.09.2017
Сообщений: 44
По умолчанию

Методом проб и ошибок решила свою проблему, вставив строку
Код:
Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Borders.LineStyle = xlContinuous
, вот в этот кусок кода
Код:
If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B7:B300")) Is Nothing Then
    Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Borders.LineStyle = xlContinuous
    With Application: .EnableEvents = False
    Target.Value = UCase(Target.Value)
    .EnableEvents = True: End With
из моего файла и все, поставленные ной условия выполняются. Вставка, вышеуказанной строки, в место, описанное ранее в постах, не выполняло мои условия. Файл во вложении, может кому-то пригодится.
Вложения
Тип файла: rar Документ2.rar (23.1 Кб, 17 просмотров)
irina181 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с макросом по форматированию ячеек grh1 Microsoft Office Excel 12 12.02.2017 09:51
отсутствие границ ячеек в таблицах Word 2010 я_петро Общие вопросы Delphi 2 20.03.2014 16:25
открытие нескольких книг одним макросом и закрытие книг другим макросом kursant95 Microsoft Office Excel 6 27.01.2011 16:54
поиск не заблокированных ячеек макросом NoLL Microsoft Office Excel 4 24.12.2010 06:23
Копировать значения ячеек макросом torus Microsoft Office Excel 1 09.11.2008 00:15