Excel VBA listview控件在设置宽度时会给出“无效的属性值”错误
这是Listview控件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
唯一没有给出的错误是当宽度= 0我的直觉告诉我有一些其他的属性值造成这一点,但我不知道它可能是哪个属性。
我知道这个线程是旧的,但最近从Office 2010升级到Office 2016时遇到了同样的问题,我希望这个答案能够帮助其他人解决这个令人沮丧的问题。
我find了一个解决方法,它可以很好地自动设置每列的宽度。
使用:用下面的函数/ sub Call SetWidth(Sheets("Menu").OLEObjects("ListView1").Object)
并用ListView的名称replace“ListView1”。
LVSCW_AUTOSIZE = -1
根据列的内容设置宽度, LVSCW_AUTOSIZE_USEHEADER = -2
根据列标题的内容设置宽度
编辑:列的宽度可以通过将所需的宽度代替LVSCW_AUTOSIZE_USEHEADER
variables手动设置此function!
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"