Ms access 将值从MS Access表单子系统传递到其他表单子系统

Ms access 将值从MS Access表单子系统传递到其他表单子系统,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,这是我第一次试用access vba 在一个表单中,我有两个按钮。一个用于浏览、拾取文件,另一个用于将excel导入到表中 我尝试了下面的代码。它不起作用了。我需要的是将filepath变量的值从cmdBrowse\u单击sub传递到cmdImportFunctions\u单击sub 这是我在几个小时后的最佳状态,在一个子系统中使用call和在另一个子系统中使用byVal都不起作用 提前感谢,致以最良好的问候 我的问题是: 为什么下面的当前代码失败 如何将filepathvariable从cmd

这是我第一次试用access vba

在一个表单中,我有两个按钮。一个用于浏览、拾取文件,另一个用于将excel导入到表中

我尝试了下面的代码。它不起作用了。我需要的是将
filepath
变量的值从
cmdBrowse\u单击
sub传递到
cmdImportFunctions\u单击
sub

这是我在几个小时后的最佳状态,在一个子系统中使用call和在另一个子系统中使用byVal都不起作用

提前感谢,致以最良好的问候

我的问题是:

  • 为什么下面的当前代码失败
  • 如何将
    filepath
    variable
    cmdBrowse\u单击
    sub传递到
    cmdImportFunctions\u单击
    sub(如果可能,我想学习无全局变量方式的
  • cmdBrowse\u单击:浏览并获取拾取的文件路径

    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\u单击:导入到数据库中

    Private Sub cmdImportFunctions_Click(ByVal filePath As String)
    
    MsgBox filePath, vbOKOnly
    
    End Sub
    

    正如错误消息所说,必须按如下方式声明单击时的
    事件过程:

    Private Sub cmdButton_Click()
    
    没有任何参数。您不能更改此声明(否则将出现编译错误)

    如果要直接从
    cmdBrowse
    启动导入,则不需要“导入”按钮。在表单模块中创建“标准”私有过程,而不是事件过程

    Private Sub DoImport(ByVal filePath As String)
        MsgBox filePath, vbOKOnly
    End Sub
    
    并在
    cmdBrowse\u Click()
    中调用它

    否则,您可以将文件路径存储在模块变量中,或存储在表单上的文本框中-如果浏览按钮仅选择文件,这将是通常的设计

    编辑:我看您已经有了:
    txtexelfile.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
    

    “它不工作”是什么意思?给出了一个没有错误代码的错误。过程声明与具有相同名称的事件或过程的描述Hx Andre不匹配。“浏览”按钮应仅选择该文件。如何将
    文件路径
    从文本框传递到导入事件。(
    cmdImportFunctions\u单击
    )。实际上我有一个文本框,名称是
    txtexelfile
    。是否可以在我的
    cmdImportFunctions\u单击过程中读取文本框的值?你能为你的句子举个例子吗(你可以将文件路径存储在文本框中)?最后一个问题:模块变量是全局变量吗?非常感谢,非常感谢。请参见编辑。2.不是全局的,模块全局的。它在模块顶部声明(在
    Option Explicit
    和第一个子模块/函数之间),并且对模块中的所有子模块可见,但不在外部。