使用Excel VBA更改已关闭工作簿中单元格的值?

时间:2015-01-12 18:37:18

标签: excel vba excel-vba

我目前在VBA中使用此函数来获取已关闭工作簿中单元格的值。我想使用类似的过程将单元格的值设置为我想要的任何内容,而无需打开文件。这可能吗?

Private Function GetValue(path, file, sheet, ref)

    Dim arg As String
    If Right(path, 1) <> "\" Then path = path & "\"
    If Dir(path & file) = "" Then
        GetValue = "File Not Found"
        Exit Function
    End If
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
        Range(ref).Range("A1").Address(, , xlR1C1)
    GetValue = ExecuteExcel4Macro(arg)
End Function

1 个答案:

答案 0 :(得分:4)

是的,您可以使用ADO作为Gary评论,但前提是您的Excel工作表安排在类似数据库的结构中。
这意味着您将有效字段排列在列中(带或不带标题) 例如:

enter image description here

现在,您看到ID号 12345 的名称为 John John ,您希望将其更新为 John Knight
使用ADO,您可以尝试:

编辑1:您实际上可以在不使用 Recordset 的情况下执行此操作。见下面的更新。

Sub conscious()
    Dim con As ADODB.Connection
    Dim sqlstr As String, datasource As String

    Set con = New ADODB.Connection
    datasource = "C:\Users\UserName\Desktop\TestDataBase.xlsx" 'change to suit

    Dim sconnect As String
    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                "Data Source=" & datasource & ";" & _
                "Extended Properties=""Excel 12.0;HDR=YES"";"

    With con
        .Open sconnect
        sqlstr = "UPDATE [Sheet1$] SET [Name] = ""John Knight"" WHERE [ID Number] = 12345"
        .Execute sqlstr
        .Close
    End With

    Set con = Nothing
End Sub

<强>结果:

enter image description here

我不完全确定这是否是你想要的但HTH。

注意:

  1. 您需要添加对 Microsoft ActiveX Data Objects X.X Library 的引用(早期绑定)。
  2. 但您也可以使用后期绑定(无引用)来执行此操作。
  3. 使用的连接字符串适用于Excel 2007及更高版本。
  4. Sheet1 是您要将值更新为的目标工作表的名称。
  5. 编辑1:如果您的文件没有标题

    ,这是怎么做的

    首先将连接字符串 HDR 参数更改为 :.

    sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
               "Data Source=" & datasource & ";" & _
               "Extended Properties=""Excel 12.0;HDR=NO"";"
    

    然后将您的SQL字符串调整为:

    sqlstr = "UPDATE [Sheet1$] SET F2 = ""John Knight"" WHERE F1 = 12345"
    

    因此字段1 F1字段2 等为F2