【问题标题】:Populate ComboBox With Sheet Names Dynamically使用工作表名称动态填充 ComboBox
【发布时间】:2015-12-24 11:04:51
【问题描述】:

我在动态填充 Excel 功能区上的组合框时遇到问题。 我希望使用工作簿工作表的名称动态填充组合框。 我可以选择已经出现在功能区上的组合框中的工作表名称,但是如果我添加它们或修改名称,我无法对 VBA 进行编码以使用工作表名称填充组合框。

我已经写了下面的代码,但它不起作用:

Sub SelectionFeuille_GetItemLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)


 Dim dTime As Date

dTime = Now + TimeValue("00:00:01") 'hh:mm:ss
Application.OnTime dTime, "Refresh_all"

returnedVal = ActiveWorkbook.Worksheets(index + 1).Name

End Sub

请帮帮我....

【问题讨论】:

  • 但解决方案仍然未知
  • 这并不意味着您只是再次发布相同的问题。
  • 可能我第一次不是很清楚,所以尝试通过一个新问题解释来更好地解释

标签: vba excel combobox


【解决方案1】:

我发现执行此操作的最简单方法是捕获Calculate 事件,我通过在其单元格中的每个工作表中设置一个包含公式的隐藏工作表来做到这一点。它远非完美,如果说实话,这是一个非常丑陋的解决方法,但至少它对你来说是值得深思的。我想计时器也可以,但这看起来很丑。

所有这些代码都在您的工作簿背后的代码中:

Option Explicit
Private Const NAMES_SHEET As String = "Hidden|Sheet|Names"
Private mNamesSheet As Worksheet
Private Sub Workbook_Open()
    Dim b As Boolean

    b = Application.ScreenUpdating
    On Error Resume Next
    Set mNamesSheet = ThisWorkbook.Worksheets(NAMES_SHEET)
    On Error GoTo 0
    If mNamesSheet Is Nothing Then
        Application.ScreenUpdating = False
        Set mNamesSheet = ThisWorkbook.Worksheets.Add
        mNamesSheet.Name = NAMES_SHEET
        mNamesSheet.Visible = xlSheetVeryHidden
    End If
    WriteNamesOfSheets
    Application.ScreenUpdating = b

End Sub
Private Sub WriteNamesOfSheets()
    Dim v() As Variant
    Dim ws As Worksheet
    Dim i As Integer
    Dim b As Boolean

    b = Application.EnableEvents
    Application.EnableEvents = False
    ReDim v(1 To ThisWorkbook.Worksheets.Count, 1 To 1)
    mNamesSheet.Cells.Clear
    i = 0
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            i = i + 1
            v(i, 1) = "=" & ws.Name & "!A1"
        End If
    Next

    mNamesSheet.Range("A1").Resize(UBound(v, 1)).Formula = v
    Application.EnableEvents = b
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Dim ws As Worksheet
    Dim b As Boolean

    On Error GoTo EH
    b = Application.EnableEvents
    Application.EnableEvents = False
    WriteNamesOfSheets
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            '
            'Populate your combobox here with ws.Name
            '
        End If
    Next

    Application.EnableEvents = b

    Exit Sub

EH:
    Err.Clear
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多