VBA Excel, самоидентификация ячейки

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь заставить каждый вызов в A1: E5 самостоятельно идентифицировать их среди 3 листов. Таким образом, каждый из них будет отображаться как so (примеры:) Лист1: $ A $ 3 Лист1: $ A $ 4 Лист12: $ B $ 2

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim intRowIndex, intColumnIndex, intDimIndex As Integer

'Change Colors/Fonts and Resize
Range("A1:A" amp; Rows.Count).Columns.AutoFit
Columns("A:E").AutoFit


 For intDimIndex = 1 To 3
    For intRowIndex = 1 To 5
        For intColumnIndex = 1 To 5
            Worksheets(intDimIndex).Cells(intRowIndex, Chr(64   intColumnIndex)).Value = Sheets(intDimIndex).Cells(intRowIndex, Chr(intColumnIndex   64)).Value = _
            Sheets(intDimIndex).Name amp; ":$" amp; Chr(intColumnIndex   64) amp; "$" _
            amp; Str(intRowIndex)
        Next intColumnIndex
    Next intRowIndex
Next intDimIndex
  

Тем не менее, поля просто заполняются как «FALSE»

Комментарии:

1. Sheets(intDimIndex).Cells(intRowIndex, Chr(intColumnIndex 64)).Value = Часть должна иметь amp; там, а не = .

Ответ №1:

Сокращение вашего кода до псевдозначений показывает, что вы фактически присваиваете логическое значение.

Cell1.Value = Cell2.Value = Cell3.Value

Странно, что вы сделали бы это в Worksheet_SelectionChange.

Хорошо иметь описательные имена, однако, если имена слишком длинные, это ухудшает читаемость кода. Если вам нужно прокручивать вверх и вниз или справа налево, вы можете рассмотреть возможность рефакторинга вашего кода.

Как правило, я использую x, x1, x2 … для перебора строк и y, y1, y2 … для перебора столбцов. Поскольку я последователен в этом, это очень описательные имена. Всякий раз, когда вы видите, что я использую x и x1, я перебираю два набора строк. Первая переменная цикла — x, а вторая — x1 .

Здесь вы объявляете три переменные: intRowIndex — это тип варианта intColumnIndex, а intDimIndex — целое число.

Dim intRowIndex, intColumnIndex, intDimIndex As Integer

Когда вы объявляете переменную, и за ней не следует As и тип данных, тогда эта переменная является вариантом. Вам будет лучше объявлять все переменные строки как длинные. Я также объявляю переменную столбца как длинную, даже если подойдет целое число.

Dim x as long, y as long, w As Integer

 'Change Colors/Fonts and Resize
Range("A1:A" amp; Rows.Count).Columns.AutoFit
Columns("A:E").AutoFit


For w = 1 To 3
    For x = 1 To 5
        For y = 1 To 5
            With Worksheets(w)
                .Cells(x, y).Value = .Cells(x, y).Address(RowAbsolute:=True, ColumnAbsolute:=True)
            End With
        Next y
    Next x
Next w