Сценарий: Я работаю с кодом, который (наряду с другими вещами) возвращает мне расположение флажков на листе в формате xlR1C1.
Цель: Поскольку мне приходится манипулировать этим значением для выполнения других операций, я пытаюсь преобразовать этот адрес в пригодную для использования пару значений (строку и столбец), которые я могу использовать.
То, что я уже пробовал: Несколько запутанно, я смог прочитать адреса в виде строки и выполнить несколько операций для извлечения обоих чисел (с разделением, слева и так далее).
Вопрос: Есть ли лучший / более эффективный способ выполнения этой операции?
Код: Получает расположение флажка и получает первыйзначение (номер строки) с адреса:
Sub getControlValues()
Dim cb As Shape
Dim i As Long
i = 1
'Loop through Form Checkboxes
For Each cb In ThisWorkbook.Sheets(1).Shapes
If cb.Type = msoFormControl Then
If cb.FormControlType = xlCheckBox Then
If cb.ControlFormat.Value = xlOn Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = "X"
ThisWorkbook.Sheets(3).Cells(i, 2).Value = cb.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = cb.BottomRightCell.Address(, , xlR1C1)
ThisWorkbook.Sheets(3).Cells(i, 4).Value = Split(ThisWorkbook.Sheets(3).Cells(i, 3), "C")
'ThisWorkbook.Sheets(3).Cells(i, 4).Value = cb.Type
ElseIf cb.ControlFormat.Value = xlOff Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = ""
ThisWorkbook.Sheets(3).Cells(i, 2).Value = cb.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = cb.BottomRightCell.Address(, , xlR1C1)
ThisWorkbook.Sheets(3).Cells(i, 4).Value = Split(ThisWorkbook.Sheets(3).Cells(i, 3), "C")
End If
i = i + 1
End If
End If
Next cb
End Sub
Obs: Я знаю, как легко выполнить эту процедуру на листе, и я также могу использовать это для записи макросов, но мойЦель состоит в том, чтобы найти лучшее решение для этого.