Недавно, волею судеб, мне пришлось писать Excel-приложение. В процессе работы с таблицей, очень часто возникает необходимость обращаться к ячейкам или диапазонам по их адресу. Иногда удобнее обращаться к ячейкам по координатам. Почему-то мне не удалось использовать формат адресов "R1C1". При попытке сказать:
Worksheets(1).Range("R1C1").Value = "Hello, World"
вылезала ошибка номер 1004 "Application-defined or object-defined error". В голову пришла идея написать функцию для преобразования координат ячейки или диапазона в его классическое Excel пердставление (знаменитые "A1:B2"). В общем-то вот она. Может быть кому-нибудь пригодится.
' Возвращает Excel адрес ячейки по её координатам, если правый нижний угол не задан,
' возвращает адрес ячейки, если задан - адрес диапазона
Function Addr(nLeft As Long, nTop As Long, _
Optional nRight As Long = -1, _
Optional nBottom As Long = -1) As String
Dim sCol As String
Dim nK1 As Integer, nK2 As Integer
If (nLeft > 256 Or nRight > 256) Then
Addr = ""
Exit Function
End If
If (nTop > 65536 Or nBottom > 65536) Then
Addr = ""
Exit Function
End If
If (nLeft <= 26) Then
sCol = Chr(Asc("A") + ((nLeft - 1) Mod 26))
Else
sCol = Chr(Asc("A") + ((nLeft - 27) \ 26)) + Chr(Asc("A") + ((nLeft - 1) Mod 26))
End If
Addr = sCol + CStr(nTop)
If (nRight > 0 And nBottom > 0) Then
If (nRight <= 26) Then
sCol = Chr(Asc("A") + ((nRight - 1) Mod 26))
Else
sCol = Chr(Asc("A") + ((nRight - 27) \ 26)) + Chr(Asc("A") + ((nRight - 1) Mod 26))
End If
Addr = Addr + ":" + sCol + CStr(nBottom)
End If
End Function
Комментариев нет:
Отправить комментарий