将值从 MS Access 表单子传递到其他表单子
passing a value from an MS Access form sub to other form sub
这是我第一次试用 vba。
在一个表单中,我有 2 个按钮。一个用于浏览,选择文件,另一个用于将 excel 导入 table.
我试过下面的代码。它不工作。我需要的是将filepath
变量的值从cmdBrowse_Click
sub传递给cmdImportFunctions_Click
sub。
这是我几个小时后最好的,在一个子中使用 call 和在另一个子中使用 byVal 没有用。
提前致谢,此致
我的问题:
- 为什么下面的当前代码失败了?
- 如何传递
filepath
变量 from cmdBrowse_Click
sub to cmdImportFunctions_Click
sub (如果可以,我想学习无全局变量的方式)
cmdBrowse_Click: 浏览并获取选择文件的路径
Private Sub cmdBrowse_Click()
Dim dialog As Object
Dim filePath As String
Set dialog = Application.FileDialog(msoFileDialogFilePicker)
With dialog
.AllowMultiSelect = False
.Title = "Please select the functions excel to import"
.Filters.Clear
.Filters.Add "Excel Newer", "*.XLSX"
.Filters.Add "Excel Older", "*.XLS"
If .Show = True Then
filePath = .SelectedItems.Item(1)
txtExcelFile.Value = filePath
Call cmdImportFunctions_Click(filePath)
Else
MsgBox "No file was selected", vbOKOnly
txtExcelFile.Value = ""
End If
End With
End Sub
cmdImportFunctions_Click: 导入数据库
Private Sub cmdImportFunctions_Click(ByVal filePath As String)
MsgBox filePath, vbOKOnly
End Sub
如错误消息所述,On Click
事件过程必须这样声明:
Private Sub cmdButton_Click()
没有任何参数。您不能更改此声明(否则会出现编译错误)。
如果您想直接从 cmdBrowse
启动导入,则不需要 "Import" 按钮。在表单模块中创建一个 "standard" 私有过程,而不是事件过程。
Private Sub DoImport(ByVal filePath As String)
MsgBox filePath, vbOKOnly
End Sub
并在 cmdBrowse_Click()
中调用它。
否则,您可以将文件路径存储在模块变量或表单的文本框中 - 如果浏览按钮仅选择文件,这将是通常的设计。
编辑: 我看到你已经有了:txtExcelFile.Value = filePath
我建议用Me!txtExcelFile.Value = filePath
表示这是一个表单控件
然后简单地:
Private Sub cmdImportFunctions_Click()
Dim filePath As String
filePath = Nz(Me!txtExcelFile.Value, "")
If filePath = "" Then
MsgBox "Please select a file first"
Else
MsgBox filePath, vbOKOnly
End If
End Sub
这是我第一次试用 vba。
在一个表单中,我有 2 个按钮。一个用于浏览,选择文件,另一个用于将 excel 导入 table.
我试过下面的代码。它不工作。我需要的是将filepath
变量的值从cmdBrowse_Click
sub传递给cmdImportFunctions_Click
sub。
这是我几个小时后最好的,在一个子中使用 call 和在另一个子中使用 byVal 没有用。
提前致谢,此致
我的问题:
- 为什么下面的当前代码失败了?
- 如何传递
filepath
变量 fromcmdBrowse_Click
sub tocmdImportFunctions_Click
sub (如果可以,我想学习无全局变量的方式)
cmdBrowse_Click: 浏览并获取选择文件的路径
Private Sub cmdBrowse_Click()
Dim dialog As Object
Dim filePath As String
Set dialog = Application.FileDialog(msoFileDialogFilePicker)
With dialog
.AllowMultiSelect = False
.Title = "Please select the functions excel to import"
.Filters.Clear
.Filters.Add "Excel Newer", "*.XLSX"
.Filters.Add "Excel Older", "*.XLS"
If .Show = True Then
filePath = .SelectedItems.Item(1)
txtExcelFile.Value = filePath
Call cmdImportFunctions_Click(filePath)
Else
MsgBox "No file was selected", vbOKOnly
txtExcelFile.Value = ""
End If
End With
End Sub
cmdImportFunctions_Click: 导入数据库
Private Sub cmdImportFunctions_Click(ByVal filePath As String)
MsgBox filePath, vbOKOnly
End Sub
如错误消息所述,On Click
事件过程必须这样声明:
Private Sub cmdButton_Click()
没有任何参数。您不能更改此声明(否则会出现编译错误)。
如果您想直接从 cmdBrowse
启动导入,则不需要 "Import" 按钮。在表单模块中创建一个 "standard" 私有过程,而不是事件过程。
Private Sub DoImport(ByVal filePath As String)
MsgBox filePath, vbOKOnly
End Sub
并在 cmdBrowse_Click()
中调用它。
否则,您可以将文件路径存储在模块变量或表单的文本框中 - 如果浏览按钮仅选择文件,这将是通常的设计。
编辑: 我看到你已经有了:txtExcelFile.Value = filePath
我建议用Me!txtExcelFile.Value = filePath
表示这是一个表单控件
然后简单地:
Private Sub cmdImportFunctions_Click()
Dim filePath As String
filePath = Nz(Me!txtExcelFile.Value, "")
If filePath = "" Then
MsgBox "Please select a file first"
Else
MsgBox filePath, vbOKOnly
End If
End Sub