1

我一直在寻找一个直接的解决方案,但还没有找到与我在这个板上尝试做的完全一样的事情。我有一个 Excel 工作表,其中包含不同公司的几个不连续的债券列表(想想一个公司的 5 个债券,3 个完全空的行,然后另一个公司的 6 个债券的另一个列表,5 个完全空的行,等等) .

我正在尝试编写一个 SQL 更新查询,它将直接更新 .accdb 格式的 Access 表。我的字段与 Excel 中的列标题具有相同的名称,并且具有相同的数据。

我需要执行此逻辑:如果范围 A1 & B1 & C1 不为空,则向表中添加一条新记录,将 A1 & B1 & C1 显示为字段 [Ticker]、[Coupon]、[Maturity]。在这些单元格为空白的地方,移动到下一行。

有人可以帮助评估我的代码吗?我在指定“Set db”时收到错误 3343。

我的初步代码如下(从我可以在网上找到的与 Excel 和 SQL 命令的接口):

Sub UpdateDatabase()

    Dim x As Integer
    Dim strSQL As String
    Dim db As Database
    Dim dbLocation As String
    Dim objConnection As Object

        Worksheets("Bonds Clean").Activate
        Range("A6").Select

    dbLocation = "c:\Folders\Workflow Tables.accdb"

    Set objConnection = CreateObject("DAO.DBEngine.36")
    Set db = objConnection.OpenDatabase(dbLocation)


        For x = 1 To Range(Selection, Selection.End(xlDown)).Rows.Count

            If Not (Selection.Value = "") Then

                strSQL = "UPDATE tblBonds_Temp SET"
                strSQL = strSQL & "Ticker =" & Chr(34) & Selection.Offset(0, 1).Value & Chr(34) & ","
                strSQL = strSQL & "Coupon =" & Chr(34) & Selection.Offset(0, 2).Value & Chr(34) & ","
                strSQL = strSQL & "Maturity =" & Chr(34) & Selection.Offset(0, 3).Value & Chr(34) & ";"

                db.Execute strSQL

            Else
            End If

        Selection.Offset(1, 0).Select
        Next


End Sub
4

1 回答 1

3

DAO.DBEngine.36适用于适用于 MDB 格式数据库文件的 DAO 3.6。但是,您的数据库是 ACCDB 格式,这意味着 DAO 3.6 将无法工作。您必须改用较新的 DAO。

'Set objConnection = CreateObject("DAO.DBEngine.36")
Set objConnection = CreateObject("DAO.DBEngine.120")
于 2013-09-20T18:56:59.310 回答