Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сколько точек в области / 5 сообщений из 5, страница 1 из 1
27.10.2017, 16:40
    #39543429
lexxora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько точек в области
В картинке пример отчета.
Нужно в отчете не расширять строку 35, если и без расширения помешается текст, тогда не будет пустого места B.

Так, как после того. как отчет уже сформирован, то у нас есть объединенные ячейки, как в примере, или их не будет, если в отчете в блоке всего 1 строка.
Когда 1 строка, то тут легко, брать максимум из первого столбца, или второго.

А вот, когда в блоке много строк, то я хочу узнать, сколько места в блоке А, сколько туда может поместиться текста.
Если влезает. то строку 35 не трогаем. Если не влезает, то расширяем.

Пример макроса, но он дописывается, так как не верно работает.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Sub FixHeigth()

    Dim i, num_of_lines As Integer
    i = 34
    
    
    Do While Range("C" & i).Text > ""
    
    num_of_lines = Int(pointwidth(Range("C" & i).Text) / 90) + 1
    num_of_lines2 = Int(pointwidth(Range("A" & i).Text) / 90) + 1
    'MsgBox Range("C" & i).Text & "  " & pointwidth(Range("C" & i).Text) / 90 & " " & num_of_lines
    'Range("C" & i & ":" & "E" & i).RowHeight = 14 * num_of_lines
    If num_of_lines > num_of_lines2 Then
    num_of_lines3 = num_of_lines
    Else
    num_of_lines3 = num_of_lines2
    End If
    Range("A" & i & ":" & "B" & i).RowHeight = 14 * num_of_lines3
    i = i + 1
    Loop
End Sub

Function pointwidth(s As String) As Double
   Range("P1") = s
   Columns("P").AutoFit
   pointwidth = Columns("P").Width
   Range("P1") = ""
   
End Function
...
Рейтинг: 0 / 0
27.10.2017, 16:40
    #39543430
lexxora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько точек в области
lexxora,

А получить нужно вот это
...
Рейтинг: 0 / 0
27.10.2017, 16:41
    #39543431
lexxora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько точек в области
Пример екселя.
Может кто что другое придумает
https://yadi.sk/i/whdJEp8n3P9qUc
...
Рейтинг: 0 / 0
29.10.2017, 22:09
    #39544078
Bobax012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько точек в области
lexxora, Проверь, должно работать.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Dim i, num_of_lines As Integer
    i = 34

    Do While Range("C" & i).Text > ""
    
        zzz = Range("A" & i).MergeArea.Rows.Count
        
        If zzz > 1 Then
        
        num_of_lines_X = 0
        num_of_lines = 0
            
            For schet = i To i + zzz - 1
                num_of_lines_X = Int(pointwidth(Range("C" & schet).Text) / 90) + 1
                num_of_lines = num_of_lines + num_of_lines_X
                Range("A" & schet).RowHeight = 14 * num_of_lines_X
            Next schet
        
        i = i + zzz - 1
        
        ElseIf zzz = 1 Then
            num_of_lines = Int(pointwidth(Range("C" & i).Text) / 90) + 1
        End If
                   
        num_of_lines2 = Int(pointwidth(Range("A" & i).Text) / 90) + 1
                
        If num_of_lines < num_of_lines2 Then
            Range("A" & i).RowHeight = 14 * num_of_lines2
        End If

    i = i + 1
    Loop
    
    MsgBox "Готово"
...
Рейтинг: 0 / 0
30.10.2017, 09:41
    #39544178
lexxora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько точек в области
Bobax012,
Великолепно!!!
Спасибо! Очень помогли.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сколько точек в области / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]