【发布时间】:2021-10-21 14:32:57
【问题描述】:
我有一个用户窗体,我所做的是从对话框中打开一个工作簿,然后基于模板创建一个新工作簿。我想将两个文件的名称 + 扩展名 (.xlsm) 分配给我将在复制方法中使用的字符串。
我是 VBA 的初学者,一切都是用户窗体的代码:
Public Sub Btn1_Click()
Dim FileName1 As String
Dim FileToOpen As Variant
Dim OpenBook As Workbook
FileToOpen = Application.GetOpenFilename(Title:="Choose file to poen", FileFilter:="Excel Files (*.xlsm*),*xls*")
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
TextBox1.Value = FileToOpen
End If
FileName1 = OpenBook.Name
End Sub
Public Sub Btn2_Click()
Dim FileName2 As String
Dim wb As Workbook
Dim fPth As Object
Set fPth = Application.FileDialog(msoFileDialogSaveAs)
If choice1 = True Then
Set wb = Workbooks.Add("path to file template 1")
ElseIf choice2 = True Then
Set wb = Workbooks.Add("path to file template 2")
End If
With fPth
.InitialFileName = Filename & ".xlsm"
.Title = "Please choose a name for your new file"
.InitialView = msoFileDialogViewList
If .Show <> 0 Then
wb.SaveAs Filename:=.SelectedItems(1), FileFormat:=xlOpenXMLWorkbookMacroEnabled
End If
End With
FileName2 = wb.Name
End Sub
我要做的就是在我的复制方法中使用 FileName1 和 FileName2,我也会将它们分配给一个按钮,并在两个文件都打开后运行。
如果我在为它们分配值后直接添加一个 MsgBox 来显示任一变量,它们会返回文件名。当我在为测试目的添加的随机按钮中使用 MsgBox 时,它们只是返回空。我所有的方法都设置为公开的。
【问题讨论】:
-
阅读variable scope 应该会有所帮助。
-
我专门阅读了那篇文章,可能错过了一些要点,但我尝试将变量从 Dim 设置为 Public(返回错误),然后是 Static(相同的结果)并返回 Dim。所以不完全确定。怎么办。
-
把
Option Explicit放在你的代码上面,观察结果,然后再次查阅范围文章。 -
我无法阅读。谢谢
标签: excel vba global-variables