Определить, какой столбец является слишком широким, было бы непросто, тем более что текст в ячейке может иметь разные шрифты и / или размеры шрифта. Гораздо проще автоматически определить размер столбцов, используя метод 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 может сделать, может не совпадать точно, но я думаю, вы сможете сделать то, что вам нужно? Дайте нам знать, если это удастся ...
- Майк