powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сколько точек в области
5 сообщений из 5, страница 1 из 1
Сколько точек в области
    #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
Сколько точек в области
    #39543430
lexxora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lexxora,

А получить нужно вот это
...
Рейтинг: 0 / 0
Сколько точек в области
    #39543431
lexxora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример екселя.
Может кто что другое придумает
https://yadi.sk/i/whdJEp8n3P9qUc
...
Рейтинг: 0 / 0
Сколько точек в области
    #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
Сколько точек в области
    #39544178
lexxora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobax012,
Великолепно!!!
Спасибо! Очень помогли.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сколько точек в области
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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