Комфорт и автоматизация

Столбцы: A, B, C, … или 1, 2, 3, …

В excel-приложении «Конвертёр CSV >>> YML» мне понадобилось реализовать автоматическое изменение стиля названий колонок. Обычно они называются так: A, B, C, D и так далее. А пользоваться конвертёром удобно, если столбцы просто перенумерованы: 1, 2, 3, 4, …

Стили R1C1 или A1 затрагивают не только заголовки столбцов на листе. От выбора между двумя этими значениями зависит также стиль написания формул в ячейках.

При этом, возможно, пользователь сознательно пользуется буквенной системой наименований. Поэтому, если книга с макросами закрывается, то нужно возвращать привычный визуальный стиль.

Для решения данной задачи в модуль книги я вставляю эти макросы:


'Стиль отображения названий столбцов: 1, 2, 3, ... или A, B, C, ...
Private strReferenceStyle As String

Private Sub Workbook_Open() 
    'Фиксируем стиль отображения столбцов: 1, 2, 3, ... или A, B, C, ...
    strReferenceStyle = Application.ReferenceStyle

    'При открытии этой книги столбцы должны называться так: 1, 2, 3, ...
    Application.ReferenceStyle = xlR1C1 
End Sub

'При закрытии книги показываем столбцы так как было до открытия
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call GetReferenceStyle
    Application.ReferenceStyle = strReferenceStyle   
End Sub

'Если у переменной почему-то "неправильное" значение 
'(например, пустая строка, если до этого макросы аварийно завершались),
'то тогда = xlA1
Private Sub GetReferenceStyle()
    If strReferenceStyle <> xlA1 Or strReferenceStyle <> xlR1C1 Then 
        strReferenceStyle = xlA1
    End If
End Sub

Если нужно, чтобы у столбцов при открытии/активации опредёлённой книги с макросами был буквенный стиль именования колонок, то вместо константы xlR1C1 используйте xlA1.

Отмечу об одном куръёзном моменте, с которым я столкнулся. Я хотел возвращать изначальный стиль формул не только при закрытии книги с макросами, но и при активации другой книги. Для этого дополнительно использовал следующие процедуры:

'При активации этой книги столбцы должны называться так: 1, 2, 3, ...
Private Sub Workbook_Activate()
    Application.ReferenceStyle = xlR1C1    
End Sub

'При деактиввации книги показываем столбцы так как было до открытия
Private Sub Workbook_Deactivate()
    Call GetReferenceStyle
    Application.ReferenceStyle = strReferenceStyle 
End Sub

И некоторое время не пог понять, почему из других книг в книгу с этими макросами невозможно ничего скопировать. Оказывается, при переключении со стиля R1C1 на A1 (или наоборот) команда «Копировать» отменяется! То есть, если выделить группу ячеек, скопировать выделение, затем средствами VBA переключить ReferenceStyle, то команда «Вставить» уже не приведёт к желаемому результату.