Страницы: 1
RSS
Некоректное смещение по строкам
 
Здравствуйте, уважаемые форумчане!  
Зациклился в одном вопросе..  
Есть код    
Sub MODТекстНадписи()  
Dim i As Integer, j As Integer, k As Integer  
arr1 = Array(1, 2, 5, 3, 2)  
arr2 = Array("Изм", "Лист", "№ докум.", "Подп.", "Дата")  
k = 0  
r = 0  
j = 0  
For i = LBound(arr1) To UBound(arr1)  
   Cells(61, 2 + r).Resize(, arr1(i)).Select  
   With Selection  
       .HorizontalAlignment = xlCenter  
       .VerticalAlignment = xlCenter  
       .MergeCells = True  
       .FormulaR1C1 = arr2(i)  
   End With  
   With Selection.Font  
       .Name = "Times New Roman"  
       .FontStyle = "обычный"  
       .Size = 9  
       .ColorIndex = xlAutomatic  
   End With  
   r = r + arr1(i)  
Next i  
End Sub  
который меня устраивает, а вот тепер хочу организовать смещение по строкам вниз в следующем коде  
Sub MODТекстНадписи0()  
Dim i As Integer, j As Integer  
arr1 = Array(1, 2, 5, 3, 2)  
r = 0  
For j = 0 To 2 Step 1  
For i = LBound(arr1) To UBound(arr1)  
   Cells(59 + j, 2 + r).Resize(, arr1(i)).Select  
   With Selection  
       .HorizontalAlignment = xlCenter  
       .VerticalAlignment = xlCenter  
       .MergeCells = True  
       .FormulaR1C1 = ""  
   End With  
   With Selection.Font  
       .Name = "Times New Roman"  
       .FontStyle = "обычный"  
       .Size = 9  
       .ColorIndex = xlAutomatic  
   End With  
   r = r + arr1(i)  
Next i  
Next j  
End Sub  
и работает у меня неправильно.
 
1. r=0 надо поставить внутрь цикла по j:  
 
   For j = 0 To 2 Step 1  
       r = 0  
 
2. arr2 куда-то потерялся, и ячейки ничем не заполняются: .FormulaR1C1 = ""
 
Спасибо большое!    
1. Прекрасно, все работает, но все же почему    
r=0 надо поставить внутрь цикла по j. Как это проверить, на что следует обратить внимание.  
2. Конечно,хотелось бы объединить два макроса в один, но  
у меня только в строке  
Cells(61, 2 + r).Resize(, arr1(i)).Select    
будет стоят   "Изм", "Лист", "№ докум.", "Подп.", "Дата"  
а в    
Cells(59, 2 + r).Resize(, arr1(i)).Select    
Cells(60, 2 + r).Resize(, arr1(i)).Select    
будет пусто.
 
кажется разобрался по первому вопросу,протестил код в окне Locals и все стало понятно.
 
Если все в кучу собрать, получится вот так  
Sub MODТекстНадписи1()  
Dim i As Integer, j As Integer, r As Integer  
arr1 = Array(1, 2, 5, 3, 2)  
arr2 = Array("Изм", "Лист", "№ докум.", "Подп.", "Дата")  
For j = 0 To 2 Step 1  
r = 0  
For i = LBound(arr1) To UBound(arr1)  
   Cells(59 + j, 2 + r).Resize(, arr1(i)).Select  
   With Selection  
       .HorizontalAlignment = xlCenter  
       .VerticalAlignment = xlCenter  
       .MergeCells = True  
       If j <> 2 Then  
       .FormulaR1C1 = ""  
       Else  
       .FormulaR1C1 = arr2(i)  
       End If  
   End With  
   With Selection.Font  
       .Name = "Times New Roman"  
       .FontStyle = "обычный"  
       .Size = 9  
       .ColorIndex = xlAutomatic  
   End With  
   r = r + arr1(i)  
Next i  
Next j  
End Sub  
Если у кого-то есть вариант лучше, пожалуйста поделитесь.
 
в общем - нормально. но.  
цикл по j не нужен, FormulaR1C1 ни к чему и шрифт можно установить один раз  
 
Sub MODТекстНадписи2()  
 Dim i As Integer, r As Integer  
 arr1 = Array(1, 2, 5, 3, 2)  
 arr2 = Array("Изм", "Лист", "№ докум.", "Подп.", "Дата")  
 For i = LBound(arr1) To UBound(arr1)  
 With Cells(59, 2 + r).Resize(3, arr1(i))  
   .Merge True  
   .Cells.HorizontalAlignment = xlCenter  
   .Cells.VerticalAlignment = xlCenter  
   .Cells(3, 1).Value = arr2(i)  
   .Cells(1, 1).Resize(2, arr1(i)).ClearContents  
 End With  
 r = r + arr1(i)  
 Next i  
 With Cells(65, 2).Resize(3, r).Font  
   .Name = "Times New Roman"  
   .FontStyle = "обычный"  
   .Size = 9  
   .ColorIndex = xlAutomatic  
 End With  
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki,благодарю Вас! Применение в Вашем исполнении свойства Resize i Cells,  
мне понравилось. Согласен, цикл тоже можно упростить. Приятно, когда на одну проблему находится много решений.
Страницы: 1
Читают тему
Наверх