我已经编写了我的代码,但我必须在多个工作簿(每天一个)上使用它,以便将数据传输到集合的Excel数据库中。我需要在代码中指定工作簿。我不会使用代码,而是没有经验的人,所以我想尽量减少复杂性。有没有办法在集合工作簿中创建一个单元格或按钮来指定用于代码的工作簿?所以任何人使用它只需要键入文件的名称并打开输入工作簿?类似于命令按钮但具有可变输入。
提前谢谢
答案 0 :(得分:1)
Sub CommandButton1_Click()
Dim File1 As String 'Filename for open and save
Dim i As Integer
Dim SplitArray() As String 'Used to split filename
'Open File
File1 = Application.GetOpenFilename(fileFilter:="Excel, *.xls; *.xlsx; *.xlsm", Title:="Select a File")
If File1 <> "False" Then
'Remove path
SplitArray() = Split(File1, "\")
i = UBound(SplitArray)
File1 = SplitArray(i)
On Error Resume Next
If Workbooks(File1) Is Nothing Then
'File not open
Workbooks.Open File1
Else
'File already open
End If
Else
Exit Sub
End If
'Activate and show windows
On Error Resume Next
Workbooks(File1).Worksheets(1).Activate
End Sub
答案 1 :(得分:0)
我发现使用其他用户熟悉的表单最容易。 VBA允许您调用标准Windows对话框,例如Open File
对话框。对话框返回一个字符串,该字符串是工作簿的路径。然后,您可以从该路径创建工作簿对象,并对其执行常规操作。
在下面的代码中,我假设您在工作表上放置了一个按钮(名为OpenWorkbookButton
)并放置代码以调用对话框,获取文件路径并在OpenWorkbookButton_Click中创建工作簿对象()事件处理程序。这将工作簿作为参数传递给执行常规操作的子例程,这样用户就不必以任何方式打开或交互工作簿。
Private Sub OpenWorkbookButton_Click()
Dim wbPath As String
wbPath = Application.GetOpenFilename _
(Title:="Please choose a file to open", _
FileFilter:="Excel Files *.xls* (*.xls*),")
Dim wb As Workbook
Set wb = Application.Workbooks.Open(wbPath)
Call DoMyUsualOperations(wb)
End Sub