#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