【问题标题】:Set a variable name to a Workbook selected from a VBA ComboBox将变量名称设置为从 VBA 组合框中选择的工作簿
【发布时间】:2021-08-07 07:17:23
【问题描述】:

我将始终将 Workbook SQ_Macro_v1 作为我的主要数据库。

两个命名的工作簿 old_wknew_wk 将具有不同的名称,因为我将在我计算机上当前活动的 WB 中选择它们。

我要一个 VBA ComboBox 列出所有内容以供我选择,但最后我无法存储我选择的 WB 的名称。

Sub Macro1()

    Dim main_wk, old_wk, new_wk As Workbook

    Set main_wk = Workbooks("SQ_Macro_v1.xlsm")
    Set old_wk = Workbooks(old_chosen) 'also tried UserForm1.ComboBox1.Value
    Set new_wk = Workbooks(FileName_New) '
    
    main_wk.Sheets("Main_DB").Range("C4").Value = old_wk.Worksheets("Sheet 1 Synthese").Range("C35").Value

当我运行下面的 UserForm 代码时,我在主 Sub 中将 old_chosen 变量设置为空。似乎当我在运行后关闭用户窗体时,什么都没有存储。关闭用户窗体后保存该变量的任何线索?

Option Explicit

Public Sub UserForm_Activate()
    Dim vWorkbook As Workbook
    ComboBox1.Clear
    For Each vWorkbook In Workbooks
        ComboBox1.AddItem vWorkbook.Name
    Next
End Sub

Public Sub CommandButton1_Click()
    If ComboBox1.ListIndex <> -1 Then
        Call YourMacro(ComboBox1)
    End If
End Sub

Public Sub YourMacro(vWorkbookName As String)

    Dim old_chosen As String
    old_chosen = Me.ComboBox1.Value
    MsgBox "You choose: " & Workbooks(vWorkbookName).Name
        
End Sub

MsgBox 弹出,但之后没有值存储:

【问题讨论】:

    标签: excel vba combobox


    【解决方案1】:
    Public Sub YourMacro(vWorkbookName As String)
        Dim old_chosen As String
        old_chosen = Me.ComboBox1.Value
        MsgBox "You choose: " & Workbooks(vWorkbookName).Name
    End Sub
    

    您已经在procedure level 声明了变量,因此在用户窗体关闭后它不可见。

    要使该变量可用于项目中的所有过程,请在其前面加上 Public 语句。插入一个模块并将其粘贴到那里

    Public old_chosen As String
    

    话虽如此,我建议将Macro1 移动到用户窗体中,并在module level 声明变量后从那里处理代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 2020-04-14
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多