将变量名称设置为从 VBA ComboBox 中选择的工作簿

Set a variable name to a Workbook selected from a VBA ComboBox

我将始终将工作簿 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

正如我 运行 下面的用户窗体代码一样,我在主子中将 old_chosen 变量设置为空。似乎当我在 运行s 之后关闭用户窗体时,没有任何内容被存储。在我关闭用户窗体后是否有保存该变量的线索?

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但没有存储值:

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

处声明变量后从那里处理代码