【问题标题】:String variable returns empty despite being assigned a value字符串变量返回空,尽管被赋值
【发布时间】: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


【解决方案1】:
Option Explicit
Public FileName1 As String
Public FileName2 As String

在我的模块开始时解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2023-03-13
    • 2023-03-15
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多