Недавно, волею судеб, мне пришлось писать 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
Комментариев нет:
Отправить комментарий