vba - Excel VBA 自动调整 ListView 列的大小

标签 vba excel 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

最佳答案

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

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

在您的循环中设置两者,注意哪个导致更大的 ColumnHeaders 宽度,然后使用适当的 LVSCW_ 参数再次 SendMessage

关于vba - Excel VBA 自动调整 ListView 列的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138226/

相关文章:

android - 从 android ContactsContract 数据库加载数据后 fragment 未填充

excel - 如何将句子转换为单个单词的列/行

c++ - VBA 无法找到我的 DLL,尽管对位置进行了硬编码。

vba - 如何在 Excel VBA 中仅迭代自动筛选工作表中的行?

c# - 使用 oledb 命令从 excel 中读取

excel - VBA 工作表变量

java - 如何在 ListView 中显示带有数据数组的对象

ms-access - 使用序列 1、2、4、8、16、32、64.124 等解码错误代码。在 Access VBA 中

java - 使用 Talend ETL 合并 Excel 单元格

listview - 滚动 QML ListView 时,项目显示在顶部和底部之外