Excel VBA自动调整ListView列的大小

时间:2015-12-07 16:18:24

标签: excel vba excel-vba listview resize

我找到了代码,以便根据列项中最长的字符串调整ListViews列的大小,但我想修改它,以便它也考虑列名的长度以及调整大小。我有几列,其中最长的字符串是列名本身。

我一直在谷歌上搜索试图解决这个问题,但我真的不明白这里使用的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

1 个答案:

答案 0 :(得分:0)

LVM_FIRST + 30LVM_SETCOLUMNWIDTH消息,用于设置给定列的宽度。

-1LVSCW_AUTOSIZE,告知控件根据内容调整大小。如果您切换到-2LVSCW_AUTOSIZE_USEHEADER),控件会调整为标题文字。

在循环中设置两者,注意哪个会导致较大的ColumnHeaders宽度,然后使用相应的SendMessage参数再次LVSCW_