#excel #vba #global-variables
Вопрос:
У меня есть пользовательская форма, я открываю книгу из диалогового окна, а затем создаю новую книгу на основе шаблона. Я хочу присвоить имена обоих файлов расширение (.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 amp; ".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 в случайной кнопке, которую я добавил для целей тестирования, они просто возвращают пустую. Все мои методы заданы как общедоступные.
Комментарии:
1. Чтение о области видимости переменной должно быть полезным.
2. Я специально читал эту статью, возможно, пропустил некоторые моменты, но я попытался установить для переменной значение Public (которое возвращало ошибку) из Dim, затем Static (тот же результат) и обратно в Dim. Так что не совсем уверен. Что делать.
3. Поместите
Option Explicit
поверх своего кода, посмотрите на результат, затем снова обратитесь к статье scope .4. Я не могу читать. Спасибо
Ответ №1:
Option Explicit
Public FileName1 As String
Public FileName2 As String
В начале моего модуля проблема решена.