Excel VBA自动调整ListView列

我发现代码为了调整列的项目中的最长的string的ListViews列的大小,但我想修改它,所以它也考虑了列名的长度以及resize。 我有几列最长的string是列名本身。

我一直在search谷歌尝试和解决这个问题,但我真的不明白在这里使用的API。

这个问题的一个扩展也是,什么是LVM_FIRST在这里做什么,我似乎无法find任何东西在我的search。

宣言:

 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 

LVM_FIRST + 30是设置给定列的宽度的LVM_SETCOLUMNWIDTH消息。

-1LVSCW_AUTOSIZE ,它告诉控件根据内容resize。 如果切换到-2LVSCW_AUTOSIZE_USEHEADER ),控件将调整为标题文本。

在你的循环中设置,注意哪个会导致一个更大的LVSCW_宽度,然后SendMessage再次使用适当的LVSCW_参数。