VBA ActiveCell Динамическое изменение размера - PullRequest
0 голосов
/ 22 февраля 2019

Привет, я создал следующий код для форматирования Grand Total Row в таблице Excel.Моя проблема в том, что я хочу динамически выбирать ячейки из общего итога и правильно, потому что у меня не всегда 15 столбцов.Я делаю попытку с ActiveCell, но это не сработало.Может ли кто-нибудь помочь мне изменить этот код в соответствии с моими потребностями?

Range("A1").Select
FindRow1 = Range("A:A").FIND(What:="Grand Total", LookIn:=xlValues, LookAt:=xlWhole).Activate
ActiveCell.Resize(, 15).Select

'Range(ActiveCell, Cells(, ActiveCell.End(xlToRight).Column)).Select

Selection.Font.Bold = True

With Selection.Interior
    .Pattern = xlSolid
     .PatternColorIndex = xlAutomatic
     .ThemeColor = xlThemeColorAccent6
     .TintAndShade = 0.399975585192419
    .PatternTintAndShade = 0

End With

Selection.Font.Size = 12

[РЕДАКТИРОВАТЬ]: Вот скриншот моей проблемы после попытки предложить решения:

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Другой пример того, как избежать шаблона выбора / выбора / активации / ActiveXXX и как использовать вложенный с ... Конец со структурой:

With Range("A1", Range("A:A").Find(What:="Grand Total", LookIn:=xlValues, LookAt:=xlWhole).End(xlToRight))

    With .Font
        .Bold = True
        .Size = 12
    End With 

    With .Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With

End With 
0 голосов
/ 22 февраля 2019
  1. Вам не нужно выбирать диапазон.Просто будьте уверены в адресе диапазона, который вы используете, и вы в порядке.
  2. Было бы лучше, если вы укажете рабочий лист, с которым работаете, поэтому если у вас есть несколько листов вРабочая книга, над которой вы все еще будете работать.
  3. Вместо активации ячейки, найденной с помощью Find, передайте строку этой ячейки в переменную с именем myRow и используйте эту переменную в другой функции.чтобы определить необходимый диапазон.
  4. После того, как вы определили необходимый диапазон, передайте его переменной, например, myRange, и используйте ее вместо использования Selection в остальной части кода.
  5. Чтобы ваш диапазон динамически изменял свой размер (при условии, что вы хотите, чтобы у вашего диапазона была одна строка и все заполненные ячейки этой строки), вам нужно найти столбец последней заполненной ячейки в вашей таблице,передать его в переменную lastCol и использовать его для определения диапазона.
Sub formatRange()

    Dim ws As Worksheet
    Dim myRow As Long, lastCol As Integer, myRange As Range

    Set ws = ThisWorkbook.ActiveSheet  'Change this to the name of the sheet you're working with

    myRow = ws.Range("A:A").Find(What:="Grand Total", LookIn:=xlValues, LookAt:=xlWhole).Row 'The row that has "Grand Total"
    lastCol = ws.Cells(myRow, Columns.Count).End(xlToLeft).Column 'The column of the last filled cell in `myRow`

    Set myRange = ws.Range("A" & myRow).Resize(1, lastCol) 'The desired range has 1 row and (lastCol) columns

    myRange.Font.Bold = True

    With myRange.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With

    myRange.Font.Size = 12

End Sub
  • Рассмотрим этот случай:

Если столбец последней ячейки в строке myRow равен НЕ так же, как последний столбец во всей таблице (см. Скриншот), у вас есть 2 варианта для определения lastCol: Table Screenshot 1&2

  1. Вы можете определить lastCol как последний столбец строки myRow (снимок экрана 1), и в этом случае вы сохраните приведенный выше код как есть.
  2. Вы можете определить его как последний столбецвсю таблицу (скриншот 2), и в этом случае вам придется заменить строку lastCol выше на эту:
        'The column of the last filled cell in the whole table
        lastCol = ws.Cells.Find(What:="*", _
                    After:=Range("A1"), _
                    LookAt:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByColumns, _
                    SearchDirection:=xlPrevious).Column
    

PS, Если столбец последней ячейки одинаков во всех ваших строках, вы можете игнорировать этот последний абзац.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...