выделение столбцов и строк в VBA

#excel #vba #highlight

#excel #vba #выделение

Вопрос:

Я новичок в программировании в целом, но я начинаю делать свои первые шаги в мире VBA.

Меня попросили создать макрос для выделения выбранной ячейки (также с учетом ссылочного столбца и строки), и мне удалось собрать некоторые фрагменты кода, найденные в Интернете, например:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'for removing any existing color from the entire sheet

    Worksheets("Sheet1").Cells.Interior.ColorIndex = xlNone

    Dim a As Integer
    Dim b As Integer
    a = ActiveCell.Row
    b = ActiveCell.Column

    Worksheets("Sheet1").Rows(a).Interior.ColorIndex = 37
    Worksheets("Sheet1").Columns(b).Interior.ColorIndex = 40
    Worksheets("Sheet1").Cells(a, b).Select

    If (a = 1 And b = a) Then Worksheets("Sheet1").Cells.Interior.ColorIndex = xlNone
End Sub
 

В любом случае есть некоторые ошибки:

  1. я бы хотел отменить выделение, снова щелкнув по тем же ячейкам, а не по ячейке A1.
  2. когда этот макрос включен, трудно выбирать столбцы (нужно дважды щелкнуть по столбцу, когда он всего один, но возникают проблемы, когда мне приходится удалять сводную таблицу и, следовательно, больше столбцов одновременно).
  3. САМОЕ ГЛАВНОЕ, это конфликтует с другими макросами.

Можете ли вы помочь мне получить чистый макрос, который работал без проблем? Большое спасибо.

Ответ №1:

  1. Ваш код не сможет отменить выделение, щелкнув в той же ячейке, потому что это не вызовет SelectionChange событие. Ваш обходной путь может заключаться в том, чтобы либо запрограммировать другой макрос, привязанный к другому событию, чтобы отключить выделение (например, событие двойного щелчка). Я чувствую, что это вызовет больше проблем, чем того стоит. Вероятно, вам лучше создать макрос, чтобы отключить выделение, и назначить ему сочетание клавиш.
  2. Проблема здесь в том, что ваш текущий код явно указывает приложению выбрать активную ячейку (без необходимости). Таким образом, он отменит выделение всего столбца и вместо этого выделит ячейку. Просто удалите следующую строку из своего кода:

    Worksheets("Sheet1").Cells(a, b).Select

  3. Вам нужно будет поделиться более подробной информацией о типах конфликтов, если вам потребуется более конкретная помощь.