2015-12-07 6 views
1

Я нашел код, чтобы изменить размер столбцов ListViews на основе самой длинной строки в элементах столбца, но я хотел бы изменить его, чтобы он также учитывал длину имени столбца как ну для изменения размера. У меня есть несколько столбцов, где самая длинная строка - это имя столбца.Excel VBA Auto Resize ListView Columns

Я искал во всем Google, чтобы попытаться понять это, но я действительно не понимаю используемый здесь API.

Расширение на этот вопрос было бы, что такое LVM_FIRST Здесь я не мог найти ничего в моих поисках.

Декларация:

Private Declare Function SendMessage Lib "user32" Alias _ 
"SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ 
ByVal wParam As Long, lParam As Any) As Long 

Private Const LVM_FIRST = &H1000 

Суб:

Public Sub LV_AutoSizeColumn(LV As ListView, Optional Column _ 
As ColumnHeader = Nothing) 

Dim C As ColumnHeader 
If Column Is Nothing Then 
    For Each C In LV.ColumnHeaders 
    SendMessage LV.hWnd, LVM_FIRST + 30, C.Index - 1, -1 
    Next 
Else 
    SendMessage LV.hWnd, LVM_FIRST + 30, Column.Index - 1, -1 
End If 
LV.Refresh 

End Sub 

ответ

0

LVM_FIRST + 30 является LVM_SETCOLUMNWIDTH сообщение, которое устанавливает ширину данного столбца.

-1 - LVSCW_AUTOSIZE, который сообщает элементу управления изменять размер в зависимости от содержимого. Если вы переключились на -2 (LVSCW_AUTOSIZE_USEHEADER), элемент управления изменит размер на текст заголовка.

Установите оба в вашей петле, отметив, что результат больше ширины столбца, а затем SendMessage с соответствующим аргументом LVSCW_.

+0

Im все еще довольно новый на этом. Не могли бы вы рассказать о том, что вы имеете в виду, задав оба варианта и запомните больше, чем отправить сообщение снова. Вы имеете в виду, как хранить большее значение в переменной? – Zionmoose

+0

Я собирался вставить демо, но похоже, что USEHEADER почитает более длинные столбцы, поэтому попробуйте заменить 'SendMessage' у вас с' SendMessage LV.hWnd, LVM_FIRST + 30, C.Index - 1, ByVal -2' –

+0

Это это было. Он работает сейчас. – Zionmoose