Элемент управления Excel VBA Excel дает ошибку «Недопустимое значение свойства» при установке ширины

Это Listview Control 6.0 (SP6)

Когда я пытаюсь добавить столбец, я не вижу столбцы, я понял, что это возможно из-за того, что ширина столбцов равна 0,00, поэтому я попытался изменить ширину нескольких путей. Все результаты с той же ошибкой

«Ошибка времени выполнения« 380 »: недопустимое значение свойства

Private Sub ListView41_Click() Dim width As Long width = 10 With ListView41 .View = lvwReport .HideColumnHeaders = False .ColumnHeaders.Clear .ColumnHeaders.Add 1, , "A" .ColumnHeaders(1).width = width .ColumnHeaders.Add 2, , "B", width End With End Sub 

Единственный раз, когда ошибка не указана, равна width = 0. Моя кишка говорит мне, что это вызывает другое значение свойства, но я понятия не имею, какое свойство это может быть.

Я знаю, что эта ветка устарела, но недавно я столкнулся с этой проблемой при обновлении с Office 2010 до Office 2016, и я надеюсь, что этот ответ поможет любому, кто застрял в этой неприятной проблеме.

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

Используйте: Call SetWidth(Sheets("Menu").OLEObjects("ListView1").Object) с помощью следующей функции / sub и замените «ListView1» на имя вашего ListView.

LVSCW_AUTOSIZE = -1 устанавливает ширину на основе содержимого столбцов, а LVSCW_AUTOSIZE_USEHEADER = -2 устанавливает ширину на основе содержимого заголовка столбца

EDIT: ширину столбца можно настроить вручную с помощью этой функции, поставив желаемую ширину вместо переменной LVSCW_AUTOSIZE_USEHEADER !

 Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) _ As Long Private Const LVM_FIRST = &H1000 Private Const LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30) Private Const LVSCW_AUTOSIZE = -1 Private Const LVSCW_AUTOSIZE_USEHEADER = -2 Sub SetWidth(LV As ListView) For Each C In LV.ColumnHeaders Call SendMessageLong(LV.hwnd, LVM_SETCOLUMNWIDTH, C.Index - 1, LVSCW_AUTOSIZE_USEHEADER) Next End Sub 
 .ColumnWidths = "10;10" 

или с абсолютными значениями в см:

 .ColumnWidths = "6 cm;0" 

или с абсолютными значениями в дюймах

 .ColumnWidths = "1.5 in;0" 
  • Возврат ответа с помощью VBA в TextBox
  • Excel VBA UserForm блокирует лист
  • Excel VBA Открыть книгу, выполнить действия, сохранить как, закрыть
  • Автоматическое заполнение пользовательской формы Excel в файле excel из vbscript
  • Импорт и экспорт пользовательских форм и модулей
  • Можете ли вы использовать оператор if, чтобы решить, в чем UserForm помещать информацию?
  • Получите данные строки из Sheet1, затем поместите их в другой UserForm
  • Выровнять Userform с ячейками в Excel
  • Динамически созданный макрос VBA. Обновления динамической структуры.
  • Как вставить изображение из Интернета в форму VBA Excel Userform
  • отправка массовой электронной почты с помощью опции слияния из пользовательской формы vba
  • Давайте будем гением компьютера.