将值从MS Access表单子传递给其他表单子

时间:2016-08-27 15:09:10

标签: vba ms-access access-vba ms-access-2013

这是我的第一次试用vba。

在表格中,我有2个按钮。一个用于浏览,选择文件,另一个用于将excel导入表格。

我试过下面的代码。它不起作用。我需要的是将filepath变量的值从 cmdBrowse_Click sub 传递到 cmdImportFunctions_Click sub。

经过几个小时后,这是我最好的,并在一个子& byVal在其他方面没有用。

提前致谢,最好的问候

我的问题:

  1. 为什么下面的当前代码失败?
  2. 如何将filepath变量 cmdBrowse_Click sub 传递到 cmdImportFunctions_Click sub(,如果可能的话 ,我想学习没有全局变量的方式
  3. 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
    

1 个答案:

答案 0 :(得分:1)

如错误消息所示,必须声明On Click事件过程如下:

Private Sub cmdButton_Click()

没有任何参数。您无法更改此声明(或者您将收到编译错误)。

如果您想直接从cmdBrowse启动导入,则不需要"导入"按钮。创建一个"标准"表单模块中的私有过程,而不是事件过程。

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