4

我有一个非常复杂的过程,包括从不同的共享中下载多个文件,将这些文件连接到工作表中,操作和计算相关信息,然后将特定字段(和计算)作为报告导出到多个 Excel 工作簿中。

我对这个过程进行了编码,以便我可以单击一个按钮,整个过程将端到端执行。我有一系列用作“指标”的文本框(红色 - 这部分失败,绿色 - 这部分成功)。可以想象,整个过程的代码非常庞大(复制到 MSWord 时为 32 页),当我遇到问题时很难清除。

我想到我想把代码放到一个表格中,这样它就更加模块化并且更容易处理。我已经设置了一个组合框,其中包含我要执行的操作,以及第二个组合框,其中包含我要使用的报告/文件/对象(即删除 - 表 2、获取 - 文件 1、导出 - 报告 4)。我已经成功地创建了 SQL 语句来执行简单的事情,例如来自 tbl_test 的 del * 并从组合框中执行它而没有任何问题。

我需要知道的是,是否有一种方法可以将本质上是代码片段的内容放入表(备忘录字段)中,然后在我选择匹配的组合时执行该 vba 代码。

IE 'Acquire - File1' 的代码完全是 VBA 代码;它映射网络驱动器、定位文件、下载文件并将其移动到目录。

IE 'Scrub - tblMain_Part1' 的代码是 vba 和 sql 代码的组合;它检查文件是否存在 (vba),如果找到它,它会删除主表 (sql) 的一部分并附加它找到的文件 (sql) 的内容,然后更新监视器以指示它已完成(vba)。如果未找到该文件,它将监视器框更改为红色并更新命令按钮标题 (vba)

我不是 vba 的天才,但我有自己的想法。我的思考过程是,如果我基本上可以将代码分解为表​​中可管理的块,如果我想运行整个过程,我可以按顺序调用代码片段,或者我可以重新执行部分代码根据需要选择操作和报告/文件/对象组合。

任何想法/想法表示赞赏。

4

4 回答 4

2

我认为最好将代码拆分为 Subs。您循环访问的表将有一个Sub-Name字段和一个blnSuccess字段。您的代码将遍历运行每个子程序的表,然后根据您收到的任何错误更新blnSuccess 。当您尝试查看发生了什么时,这将为您提供可查询的结果集。

于 2012-12-11T19:23:46.720 回答
1

考虑使用宏。你不应该需要一张桌子。此外,考虑将硬编码的 SQL 移动到查询中。

于 2012-12-11T19:33:10.603 回答
1

我认为您不应该使用表格,只需为每个操作创建一个具有不同子项的模块。在您的按钮事件中,在组合选择之后,我会做一个案例陈述。

      dim strOperation as string
      strOperation = me!selectionOne
     Select Case strOperation        
    Case "delete": deleteTable(me!selectionTwo)
    Case "export": export(me!selectionTwo)
    case  "acquire": acquire(me!selectionTwo)     
     End Select

当然,您可以在模块中编写获取、删除和导出方法,并在其中为每个操作提供所需的任何参数。

这只是您可以用来解决此问题的许多想法中的一个。

于 2012-12-11T19:46:39.537 回答
0

我打算编辑原始答案,但这似乎采取了不同的策略......

我认为最好将代码拆分为函数,如果出现错误则返回字符串。您循环遍历的表将具有strFunction、strErrorstrObject字段。您的代码将循环遍历基于 case 语句运行每个函数的表,同时将strObject作为字符串传递,然后根据您收到的任何错误更新strError 。您可以在此过程之后查询表以查看哪些记录中有错误。

如果按钮被称为 cmdRunAll 这里是它的代码。

Private Sub cmdRunAll_Click()
    On Error GoTo ErrHandler
    Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("tblCode", dbOpenDynaset, dbSeeChanges)
    If Not rst.EOF Then
        With rst
            .MoveFirst
            Do While Not .EOF
                .Edit
                Select Case !strFunction
                    Case "fExport"
                        !strError = fExport(!strObject)
                End Select
                .Update
                .MoveNext
            Loop
        End With
    End If
    rst.Close
    Set rst = Nothing
    MsgBox "Processes complete"
Exit Sub
ErrHandler:
    Debug.Print Err.Description & " cmdRunAll_Click " & Me.Name
    Resume Next
End Sub

这是一个简单的示例函数

Public Function fExport(strTable As String) As String
    On Error GoTo ErrHandler
    Dim strError As String
    strError = ""
    DoCmd.TransferText acExportDelim, , strTable, "C:\users\IusedMyUserNameHere\" & strTable & ".txt"
    fExport = strError
Exit Function
ErrHandler:
    strError = Err.Description
    Resume Next
End Function
于 2012-12-11T22:22:51.283 回答