Страницы: 1
RSS
Координаты ячейки
 
Как в VBA извлечь координаты ячейки (X, Y)?
 
Ячейка не обязательно должна быть активной. Есть координаты (строка и столбец) ячейки №1 и ячейки №2 между ними надо нарисовать линию: ActiveSheet.Shapes.AddLine(x1, y1, x2, y2).Select  
?
 
Трудовая победа!  
 
x = Лист2.Cells(1, 1).Left  
y = Лист2.Cells(1, 1).Top  
и т.д.  
 
Всем спасибо!
 
Никак не могу допетрить - как преобразовать координаты ячейки в ее адрес. То есть имея Cells(1,1) - нужно получить A1.  
 
Сделать-то можно, но вот кажется мне, что нерационально я собираюсь это сделать. А может вообще в ВБА функция есть, которая это имя возвращает?  
Спасибо!
 
Sub Adr()  
MsgBox Cells(1, 1).Address(0, 0)  
End Sub
 
На мой взгляд, если рисовать между ячейками линию с помощью  
 
ActiveSheet.Shapes.AddLine(x1, y1, x2, y2).Select  
 
то логичнее меджу ними нарисовать границу, которая привязана к ячейкам.  
Ведь как бы мы не изменяли размеры ячеек граница всегда будет привязана к ячейкам, хотя линия тоже может быть привязана, если в свойствах формат объекта задать перемещать и изменять объект вместе с ячейками.    
 
Что такое координаты ячейки? На мой взгляд это какое-то вымышленное понятие, ведь в Excel они не задаются линейными размерами, например милиметрами, дюймами, points, pixel и т.п.  
Например, высота строки измеряется в линейных размерах, т.е. points (pt),  
а вот ширина столбца измеряется средним количеством знаков от 0 до 9 для установленного по умолчанию стандартного шрифта( например Arial 10). И это вносит свои сложности.  
Вот приведу, как я нарисовал рамку с помощью метода границ (недостаток, что код громоздким получается)  
Sub Рамка()  
   Range("B1:AH61").Select  
   With Selection.Borders(xlEdgeLeft)  
       .LineStyle = xlContinuous  
       .Weight = xlMedium  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeTop)  
       .LineStyle = xlContinuous  
       .Weight = xlMedium  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeBottom)  
       .LineStyle = xlContinuous  
       .Weight = xlMedium  
       .ColorIndex = xlAutomatic  
   End With  
   With Selection.Borders(xlEdgeRight)  
       .LineStyle = xlContinuous  
       .Weight = xlMedium  
       .ColorIndex = xlAutomatic  
   End With  
End Sub  
 
Конечно рамку можно нарисовать с помощью ActiveSheet.Shapes.AddLine(x1, y1, x2, y2).Select или BuildFreeform  и код будет короче выглядеть,    
но если рисовать линию между ячейками границами будет выглядеть логичнее.
 
{quote}{login=tarasso}{date=11.05.2012 01:03}{thema=}{post}Вот приведу, как я нарисовал рамку с помощью метода границ (недостаток, что код громоздким получается){/post}{/quote}Hugo рисует рамку циклом за 4 итерации :-) Сейчас покажет.
 
Буду рад посмотреть код VBA, поскольку думаю создать по этому поводу отдельную тему.
 
учитывая фактические значения констант:  
for i=7 to 10  
With Range("B1:AH61").Borders(i)  
.LineStyle = xlContinuous  
.Weight = xlMedium  
.ColorIndex = xlAutomatic  
End With  
next  
 
ps только я не понял - зачем )
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Думаю завтра отдельно создам по этому поводу отдельную тему, поскольку уже поздно.  
Добавьте к предыдущему коду следующий код и Вы получите лист формата А4 в клетку размером 5 мм. Уменьшив размер клеточек можно создать миллиметровку, на которой раньше рисовали графики во время выполнения лабораторных работ.    
Код ниже  
 
Sub prolist()  
 
  With Application  
       .ReferenceStyle = xlR1C1  
       .StandardFont = "Times New Roman"  
       .StandardFontSize = "14"  
   End With  
   Cells.ColumnWidth = 1.33  
   Cells.RowHeight = 14.25  
   Columns("A:A").ColumnWidth = 7.56  
   Columns("B:B").ColumnWidth = 2.33  
End Sub
Страницы: 1
Наверх