Найти текстовые ячейки, которые слишком малы для отображения содержимого - PullRequest
3 голосов
/ 21 января 2010

У меня есть лист с ячейками, которые могут содержать текст, который иногда превышает ширину и высоту ячейки. Если я не замечаю этого и не корректирую высоту строки, текст отображается как обрезка. У кого-нибудь есть фрагмент VBA или инструмент, который может найти эти ячейки, чтобы я мог настроить их? Спасибо!

1 Ответ

2 голосов
/ 21 января 2010

Определить, какой столбец является слишком широким, было бы непросто, тем более что текст в ячейке может иметь разные шрифты и / или размеры шрифта. Гораздо проще автоматически определить размер столбцов, используя метод Range.AutoFit .

Например, вы можете вызвать метод AutoFit следующим образом:

Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
myRange.Columns.AutoFit

Однако метод Range.AutoFit может быть слишком агрессивным, что приводит к слишком узким столбцам . Поэтому вы можете захотеть создать метод, который устанавливает минимальную ширину столбца:

Sub AutoFitColumns(theRange As Excel.Range, minColumnWidth As Double)
    theRange.Columns.AutoFit

    Dim column As Excel.Range

    For Each column In theRange.Columns
        If column.ColumnWidth < minColumnWidth Then
            column.ColumnWidth = minColumnWidth
        End If
    Next column
End Sub

Вышесказанное можно назвать следующим образом для автоматической подгонки столбцов, но с минимальной шириной 8,5:

Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
Call AutoFitColumns(myRange, 8.5)

Вы также можете автоматически установить ряды диапазона. Это требуется реже, но для этого вы должны использовать что-то вроде:

myRange.Rows.AutoFit

Надеюсь, это поможет!

Обновление: ответ на комментарий Крейга:

Thansk Mike. Эта таблица используется в качестве структурированного ввода в веб-интерфейс генератор, поэтому ширина столбца варьируется и не должны быть скорректированы. я действительно просто ищу что-то для сканирования лист для любых ячеек, где текст отображается шире, чем ячейка позволит соответствовать, тем самым нуждаясь в высота ряда больше. я не ищу процесс, чтобы сделать регулировка, просто найдите их, так как они легко пропустить. Любые идеи по что?

Ну, ясно, что вы хотите сделать две вещи: (1) определить, какие ячейки обрезаются, а затем (2) исправить эти отсечки.

Я понимаю ваше желание сделать это в два отдельных этапа, но шаг (1) практически невозможно выполнить правильно во всех обстоятельствах с Excel, потому что не только могут варьироваться высота строк и ширины столбцов, но может быть включена или выключен, и шрифт может быть непропорциональным шрифтом в любом количестве возможных стилей и / или размеров.

Короче говоря, не будет способа надежно определить, какие клетки отсекаются, не без невероятного количества работы. Однако это можно смягчить, если ограничить электронную таблицу только одним стилем шрифта и использовать непропорциональный шрифт. Если вы сделаете это, то можете просто сравнить ширину столбца с длиной текста в ячейке. Это связано с тем, что свойство Excel.Range.ColumnWidth возвращает его ширину, откалиброванную таким образом, что одна единица ширины столбца равна ширине одного символа в стиле Normal. Для пропорциональных шрифтов используется ширина символа 0 (ноль).

Следовательно, для простых случаев, когда перенос слов не используется, а шрифт выполнен в стиле Normal, и, в идеале, шрифт Normal является непропорциональным шрифтом, тогда вы могли бы перебрать все ячейки в диапазоне, ищущие, где значение, которое хранится, длиннее ширины столбца:

Dim myRange As Range
Set myRange = Application.Range("A1:E5")

Dim cell As Excel.Range
For Each cell in myRange.Cells
    If Len(CStr(cell.Value)) > cell.ColumnWidth Then
        MsgBox "The cell at " & cell.Address & " has text that is too long!"
    End if
Next cell

Но теперь вот следующая часть ... Как вы это исправите? Если, опять же, у вас очень простая ситуация, когда перенос слов не используется и шрифт выполнен в стиле Normal, а в идеале шрифт Normal - это непропорциональный шрифт, у вас есть несколько вариантов:

(1) Установите ширину столбца в соответствии со значением длины ячейки:

Dim myRange As Range
Set myRange = Application.Range("A1:E5")

Dim cell As Excel.Range
For Each cell in myRange.Cells
    If Len(CStr(cell.Value)) > cell.ColumnWidth Then
        cell.ColumnWidth = Len(CStr(cell.Value))
    End if
Next cell

(2) Автоматическая подгонка колонны:

Dim myRange As Range
Set myRange = Application.Range("A1:E5")

Dim cell As Excel.Range
For Each cell in myRange.Cells
    If Len(CStr(cell.Value)) > cell.ColumnWidth Then
        cell.Columns.AutoFit
    End if
Next cell

Но если мы собираемся автоматически подгонять столбец, то гораздо проще просто вызвать его напрямую, не проверяя сначала ширину столбца, потому что не только ширина будет исправлена ​​для всех ячеек одновременно, но и Range.AutoFit * Метод 1053 * может обрабатывать любой шрифт, включая непропорциональные, в любом стиле.

Поэтому, перейдя непосредственно к подходу с автоподгонкой, у нас есть два варианта: либо автоподбор столбцов, либо автоподбор строк. Судя по вашей последней цитате, вы хотите изменить размер строк :

Я действительно просто ищу что-то для сканирования лист для любых ячеек, где текст отображается шире, чем ячейка позволит соответствовать, тем самым нуждаясь в высота ряда больше.

Для этого я бы использовал перенос текста, а затем автоматически подбирал строки. Например,

Dim rng As Excel.Range
Set rng = Application.Range("A1:E5")

With rng.Rows
    .WrapText = True
    .AutoFit
End With

Я думаю, что это все ваши варианты. В конце концов, то, что вы хотите сделать, и что Excel может сделать, может не совпадать точно, но я думаю, вы сможете сделать то, что вам нужно? Дайте нам знать, если это удастся ...

- Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...