【问题标题】:How to remove horizontal scroll bar in my listbox?如何删除列表框中的水平滚动条?
【发布时间】:2021-12-30 18:11:02
【问题描述】:

我正在尝试摆脱列表框中的水平滚动条 - 当用户单击某些单元格时出现,然后每次用户单击该单元格时都会“删除”(所以我不能手动更改它,我必须用代码更改它)--但 .ColumnWidths 属性似乎不起作用。

似乎 ColumnWidths 默认设置为 74——这是基于这样一个事实,即如果我将 Width 设置为 74 或更大,则没有水平滚动条。

如果单击单元格时,我进入设计模式,打开属性,我可以手动将 ColumnWidths 设置为 35。这不是解决方案,因为我的列表框是根据用户的活动单元格创建和删除的。尽管如此,这证实了我的代码是如何编写的。

Option Explicit
 
Private WithEvents Lbx As MSForms.ListBox
Private oTarget As Range
Private ListBoxName As String
Private Const Cell_A1 As String = "B1:B20" 'change addr as required.


Private Sub Lbx_Change()
 
    Dim k As Long
    
    oTarget.ClearContents
    
    For k = 0 To Lbx.ListCount - 1
        If Lbx.Selected(k) Then
            If Len(oTarget) = 0 Then
                oTarget = Lbx.List(k)
            Else
                oTarget = _
                Trim(oTarget & vbNewLine & Lbx.List(k))
            End If
        End If
    Next

End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim oListBox As OLEObject

    On Error Resume Next
    Me.OLEObjects(1).Delete
    
    Range(Cell_A1).Interior.ColorIndex = 0
    
    If Target.Column = 2 And (Target.Row >= 1 And Target.Row <= 20) Then
    'UCase(Target.Address(0, 0)) = UCase(Cell_A1)
        Application.DisplayFormulaBar = False
        Set oListBox = _
        Me.OLEObjects.Add(ClassType:="Forms.ListBox.1")
        With oListBox
             Names.Add "ListBoxName", .Name
            .Left = Target.Offset(0,1).Left
            .Top = Target.Offset(0, 0).Top
            .ColumnCount = 1
            .ColumnWidths = "35"
            .Width = 54
            .Height = Me.StandardHeight * 16
            .Object.ListStyle = fmListStylePlain
            .ListFillRange = "A1:A20"
            .Placement = xlFreeFloating
            .Object.MultiSelect = fmMultiSelectMulti
            .Object.SpecialEffect = fmSpecialEffectFlat
            .Object.BorderStyle = fmBorderStyleSingle
            With Application
                .OnTime Now + _
                TimeSerial(0, 0, 0.01), Me.CodeName & ".Hooklistbox"
                .CommandBars.FindControl(ID:=1605).Execute
            End With
        End With
    Else
        Application.DisplayFormulaBar = True
        Names("ListBoxName").Delete
        Range(Cell_A1).Interior.ColorIndex = 0
    End If
 
End Sub
 

Private Sub Hooklistbox()
 
    Application.CommandBars.FindControl(ID:=1605).Reset
    Set oTarget = ActiveCell
    ActiveCell.Interior.Color = vbGreen
    'display the listbox and hook it.
    With Me.OLEObjects(Evaluate("ListBoxName"))
        .Visible = True
        Set Lbx = .Object
    End With
    
End Sub

【问题讨论】:

  • HooklistboxRange(WIDTH) 中有什么内容?
  • 如果您在删除列表框后取消On Error Resume Next,您稍后会在代码中收到错误 - 在我的 PC 上难以调试(“此时无法进入中断模式”)跨度>
  • @TimWilliams 我已经添加了我的代码的其他部分(包括 hooklistbox)并对其进行了修改,以便它可以毫无问题地运行。 WIDTH 只是我工作表上的一个命名单元格(带有动态公式)......它不会给我带来任何问题——我已经在上面更新的代码中用整数替换了它。
  • 我认为您删除了几行对我造成问题的行-如果我将.Width 设置为(例如)100,则效果很好-没有水平滚动条。似乎你不需要使用Name 如果工作表上只有一个 oleObject 吗?从技术上讲,无需删除/重新创建列表框 - 如果选择了监控范围之外的单元格,您可以将其隐藏。这将简化您的代码。
  • @TimWilliams 好吧,但我不是要调整 .Width,而是要调整 .ColumnWidths。你说得对, .Width 是响应式的。但是,我有一个设置的宽度,我需要 ListBox,并且我希望没有滚动条。它与这个问题并不真正相关,但我确实需要一个命名的宽度,因为如果用户调整了某些列的大小,我需要正确调整宽度。它没有反映在此代码中,但我将列表框的右侧与单元格的左侧对齐,这是为了上下文,但我对 WIDTH 名称没有任何问题。

标签: excel vba properties listbox activex


【解决方案1】:

类型

.Object.

在 .ColumnCount 和 .ColumnWidths 之前 然后摆脱 on error resume next,它首先将您带到了这个“隐藏”错误 在不再需要时使用 on error goto 0

++ 而不是:

On Error Resume Next
    Me.OLEObjects(1).Delete

你可以使用:

If Me.OLEObjects.Count > 0 Then Me.OLEObjects(1).Delete

并删除这一行(因为名称会被覆盖,所以不需要删除:

 Names("ListBoxName").Delete

【讨论】:

  • 非常感谢!添加 .Object 效果很好!出于某种原因,我没有在网上找到将 .object 放在此特定属性之前的示例。据我所知,我确实需要下一个错误恢复,我尝试删除它,但它只是以一百万个不同的列表框结束,这些列表框永远不会被删除。也许那里有一些我不明白的解决方法,但无论如何,只要我使用 .object ,代码就可以完美地工作,非常感谢!你是救生员!
  • @Olive Marie 由于错误恢复 next 将跳过代码中的所有其他错误,并且您只想在没有可删除的内容时跳过错误。在我上面的回答(你可以标记)中,我提出了一些建议,将“下一个错误恢复”排除在外。
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 2011-05-23
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多