Это сработает (в 2003 году ... конечно, в 2002 году).
With Columns("B:B")
oldWidth = .ColumnWidth
.EntireColumn.AutoFit ' Aha!
fitWidth = .ColumnWidth
.ColumnWidth = oldWidth ' Restore original width
If oldWidth < fitWidth Then
' Text is too wide for column.
' Do stuff.
End If
End With
Я бы не увяз в этом оценочном бизнесе, если бы я был вами ... Это просто вопроснеожиданные вещи случаются.
РЕДАКТИРОВАТЬ: Адресация точек в вашем комментарии.
Вышеприведенное будет автоматически устанавливать столбец в ячейку с самым широким текстом.Чтобы рассмотреть только текст в текущей ячейке, скопируйте текст ячейки в какой-нибудь пустой столбец и выполните там автоматическую подгонку.
Если вы беспокоитесь о производительности, вам придется прикусить пулю и составить справочную таблицу ширины символов.Выполните цикл по Chr(i)
и измерьте ширину каждого символа, используя технику выше.Сохраните результаты в массиве, сделайте функцию, чтобы получить ширину строки, ища ширину символов в этом массиве и суммируя.Начальная стоимость составления LUT будет первоначальной, но поиск будет очень быстрым, что незаметно.Конечно, LUT будет действительным только для текущего шрифта, поэтому я буду создавать его заново при каждом запуске кода.Стоит затрат, если есть столько строк, сколько вы говорите.
NB: fitWidth
выше вернет ширину символа плюс небольшое значение (0,29pt на моей машине), которое является своего рода тонким «белым полем», автоматически добавляемым с обеих сторон ячейки для эстетикицели.Не забудьте вычесть это из fitWidth
, чтобы получить истинную ширину символа.Вы можете выяснить, насколько он широк, выполнив автоподбор по «А» и «АА».Разница между ними будет истинной шириной одного «А».