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

7

我目前在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

3
考虑使用ADO。http://support.microsoft.com/kb/278973 - Gary's Student
1个回答

8
是的,您可以使用ADO来实现此操作,就像Gary所说的那样,但前提是您的Excel工作表必须按照数据库结构进行排列。
这意味着您必须将合法字段安排在列中(带或不带标题)。
例如:

enter image description here

现在,您看到ID号为12345的人名为John John,您想将其更新为John Knight
使用ADO,您可以尝试以下方法:
Edit1: 您实际上可以在不使用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

我不确定这是否是您想要的,但希望有所帮助。

注:

  1. 您需要添加对Microsoft ActiveX Data Objects X.X Library(早期绑定)的引用。
  2. 但是,您也可以使用后期绑定(无需引用)来执行此操作。
  3. 连接字符串用于Excel 2007及以上版本。
  4. Sheet1 是您要将值更新到的目标工作表的名称。

Edit1: 如果您的文件没有标题,则应按如下方式操作:

首先,将连接字符串中的 HDR 参数更改为NO:。

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"

所以这里的F1表示字段1F2表示字段2,以此类推。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接