Sub Calc_Sm2()
'
' Calc_Sm2 Макрос
' Создание таблицы-заготовки для исчисления площадей прг_, трг_, крг_.
'
' Сочетание клавиш: Ctrl+Shift+U
'
Dim i As Integer
Dim flg As Boolean, fff As Boolean
Dim cL As Range, S As Range
Set cL = ActiveCell
With cL
'проверяем строку:
If .Row < 4 Then MsgBox " - Недостаточно СТРОК!" & Chr(10) & Chr(10) & _
"Исполнение возможно с 4-ой строки или ниже.", vbCritical + vbOKOnly, "Аварийный выход:": Set cL = Nothing: Exit Sub
'проверяем блок ячеек, необходимый для размещения таблицы:
flg = False
For Each S In Range(.Offset(1), .Offset(-3, 4))
If Len(S) Then
flg = True
Exit For
End If
Next
If flg = True Then
'проверяем наличие в нужном диапазоне объединенных ячеек
fff = False
For Each S In Range(.Offset(-3), .Offset(1, 4))
If S.MergeCells = True Then
fff = True
Exit For
End If
Next
'и если ненашли, то выделяем нужный диапазон, в противном случае
If fff = False Then Range(.Offset(-3), .Offset(1, 4)).Select
'ограничимся только адресом нужного диапазона в сообщении
MsgBox " - Диапазон НЕ СВОБОДЕН!" & Chr(10) & Chr(10) & _
"Следует очистить диапазон: " & .Offset(-3).Address(RowAbsolute:=False, ColumnAbsolute:=False) & " : " & .Offset(1, 4).Address(RowAbsolute:=False, ColumnAbsolute:=False) & Chr(10) & _
"или выбрать ДРУГУЮ стартовую ячейку ...", vbCritical + vbOKOnly, "Аварийный выход:"
cL.Select
Set cL = Nothing
Exit Sub
End If
'Если проверки прошли успешно, то работаем:
With .Offset(-1)
.FormulaR1C1 = "выс."
End With
With .Offset(-1, 1)
.FormulaR1C1 = "дл."
End With
With .Offset(-1, 2)
.FormulaR1C1 = "ДлСтороны"
End With
With .Offset(-1, 3)
.FormulaR1C1 = "Д"
End With
'===
i = 0
For i = 0 To 3
With .Offset(-1, i)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
Next i
'===
With .Offset(-2)
.FormulaR1C1 = "прг_"
End With
'===
With Range(.Offset(-2), .Offset(-2, 1))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Merge
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
'===
With .Offset(-2, 2)
.FormulaR1C1 = "трг_"
End With
With .Offset(-2, 3)
.FormulaR1C1 = "крг_"
End With
'===
i = 0
For i = 2 To 3
With .Offset(-2, i)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
Next i
'===
With .Offset(-3)
.FormulaR1C1 = "размеры:"
End With
'===
With Range(.Offset(-3), .Offset(-3, 3))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Merge
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
'===
With .Offset(-3, 4)
.FormulaR1C1 = "S, м2"
End With
'===
With Range(.Offset(-3, 4), .Offset(-1, 4))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
'===
With .Offset(1, 4)
.FormulaR1C1 = _
"=IF(AND(RC[-4]>0,RC[-3]>0),ROUND((RC[-4]/1000)*(RC[-3]/1000),3),0)+IF(RC[-2]>0,ROUND((SQRT(3)*POWER((RC[-2]/1000),2))/4,3),0)+IF(RC[-1]>0,ROUND(3.1415926535*(POWER(RC[-1]/1000,2)/4),3),0)"
End With
i = 0
For i = 0 To 4
With .Offset(1, i)
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
Next i
End With
Set cL = Nothing
End Sub
|