Ошибка метода Autofit класса Range (Ошибка времени выполнения 1004)

Это только часть моего кода. значение из текстового поля здесь уже копируется в определенную ячейку на листе банковской сертификации. Мне нужно убедиться, что ячейка C5 специально установлена независимо от длины текста, который я ввел в текстовое поле. Я попытался поменять диапазон с ячейками безрезультатно. Эта проблема кажется такой простой, но я не знаю, почему она не работает...

Dim counterparty As String  
counterparty = Sheet1.txt1.Text

Range("C5").Value = counterparty 

Sheets("Bank Certification").Select

Range("C5").Select 

Selection.AutoFit

2 ответов


попробовать

Dim counterparty As String
counterparty = Sheet1.txt1.Text

Range("C5").Value = counterparty

Sheets("Bank Certification").Select

Columns("C:C").Autofit

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

любой из первых двух операторов ниже будет использовать все значения в столбце C для автоматической установки ширины столбца. Это означает, что если есть значение в какой-либо другой ячейке в столбце C (например, C10), которое шире значения в C5, оно будет соответствовать столбцу самая широкая ячейка в столбце c (например, C10).

Range("C5").EntireColumn.AutoFit     ' Will fit to widest cell in column
Range("C:C").AutoFit                 ' Will fit to widest cell in column

Если вы хотите просто установите столбец на 1 ячейки (или определенный диапазон ячеек, но не весь столбец или столбцы), используйте такой оператор:

Range("C5").Columns.AutoFit          ' Will fit column C to width of cell C5

и, конечно, всегда лучше писать такой код, когда вы можете:

  1. полностью квалифицируйте диапазон, если вы не абсолютно уверены, что будете работать только с одним лист
  2. используйте именованные диапазоны или объекты диапазона.

например:

Workbooks("MyWorkbook.xlsm").Sheets("Sheet1").Range("MyData").Columns.AutoFit
'  or
Set AutoFitRange = Workbooks("MyWorkbook.xlsm").Sheets("Sheet1").Range("C5")
AutoFitRange.Columns.AutoFit