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_USEHEADERvariables手动设置此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"