我目前在 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
是的,您可以使用 ADO 来执行此操作,正如 Gary 评论的那样,但前提是您的 Excel 工作表排列在类似数据库的结构中。
这意味着您有按列排列的有效字段(带或不带标题)。
例如:
现在,您可以看到该 ID 号码12345有名字约翰约翰并且您想将其更新为约翰·奈特.
使用 ADO 您可以尝试:
Edit1:您实际上可以在不使用的情况下执行此操作记录集。请参阅下面的更新。
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
Result:
我不完全确定这是否是你想要的,但是 HTH。
Notes:
- 您需要添加对Microsoft ActiveX 数据对象 X.X 库(早期绑定)。
- 但您也可以使用后期绑定来执行此操作(无参考)。
- 使用的连接字符串适用于 Excel 2007 及更高版本。
-
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
for field 1, F2
for field 2 etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)