Excel VBA-将动态范围转换为静态范围,然后作为新记录导出到Access 2010

FSDT

更新4

发布解决方案。


更新3

终于设法找到了解决我的问题的方法,将在接下来的几天内发布答案。


更新2!

将更新放在顶部,以提高可读性。

因此,显然在导出到访问时,不可能直接在vba代码中使用excel中的命名范围。

经过更多研究后,我发现有一种解决方法:首先将动态范围更改为静态范围,然后将整个字符串用作变量。

但是我下面的当前代码说,即使我确定语法正确,也无法找到范围,这是因为我没有正确设置对excel文件的引用吗?

Sub ExportAccess()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strQuery As String

    myAddress = Replace(ThisWorkbook.Names("ExportData").RefersToRange.Address, "$", "")
    myAddress = "[GWU$" & myAddress & "]"

' [Excel 8.0;HDR=NO;DATABASE=C:\Users\Public\test.xls]    < unused code snippet

strQuery = "INSERT INTO Table1" & vbCrLf & _
"SELECT * FROM " & myAddress & ""

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "C:\Users\Public\Database.accdb"
.Open
End With

rs.Open strQuery, cn

cn.Close
rs.Close

Set rs = Nothing
Set cn = Nothing

End Sub

更新!

在花了我几个小时并检查了我发布的链接以获取一些急需的参考信息之后,我想到了以下内容:

Sub ExportAccess()

Dim cn As ADODB.Connection
Dim strQuery As String

strQuery = "INSERT INTO Table1" & vbCrLf & _
"SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=C:\Users\Public\test.xls].ExportData"

Set cn = New ADODB.Connection
With cn

.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "C:\Users\Public\Database1.accdb"
.Open
.Execute strQuery
End With

With cn
.Close
End With

End Sub

我尚未能够对此进行测试(明天将做第一件事),但是我担心以下代码片段:

"SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=C:\Users\Public\test.xls].ExportData"

从技术上讲,这应该基于Stackoverflow上的另一个问题从测试工作表中选择'ExportData'范围,我不确定100%是否能正常工作

.Open
.Execute strQuery
End With

With cn
.Close
End With

这实际上会执行INSERT INTO吗?真的需要关闭连接吗?(我想是这样,只是想肯定地知道)

亲切的问候,


我一直在努力使自己的脑袋工作一段时间,但是老实说,我现在没有所需的专业知识。我对编程还是很陌生,因此设置自己可以实际使用的变量和数组对我来说仍然很困难。希望你能帮助我。

情况:因此,在一个Excel只读文件中,我基本上有一个10行乘14列的范围,用户可以将自己的数据放入其中,我只想将具有这些用户填写的实际数据的行导出到Access中2010数据库。

我之前尝试过的内容:最初,我想尽可能简化解决方案,我尝试通过将Excel工作表连接到Access数据库,然后对数据不为空的行执行SQL追加查询来做到这一点。(检查最后一列中的条目是否不为空)

但是,由于许多人会同时使用该文件,因此我担心Access数据库/ Excel工作表的连接可能会变得混乱,并开始执行原本不应该的操作。当我尝试使用Google查明这是否确实是一个问题时,我的搜索结果是否为空,因此我不确定是否应该继续朝这个方向发展,最终放弃了该解决方案。

我现在要执行的操作:基本上,我认为可以在导出之前,在Excel宏中执行相同的操作,设置命名范围(通过名称管理器),然后使用简单宏,然后将命名范围内的其余行追加到Access数据库。

有一些例子,人们尝试过几次Google搜索后尝试做同样的事情(不幸的是,我不能发布两个以上的链接,也不能发布linkbu.ch链接):

但是,所有这些示例似乎都使用静态范围,而不是动态范围。如何在VBA代码中从名称管理器插入范围?如果有人对其他解决方案有任何想法,也将不胜感激。

亲切的问候,FSDT


FSDT

好的,大家好,正如之前所说的,这是我在反复试验后想到的解决方案:

Sub ExportAccess()

Dim cn As ADODB.Connection
Dim strQuery As String
Dim dbFilepath As String
Dim xlFilepath As String

    dbFilepath = "C:\Users\Public\Database1.accdb"
    xlFilepath = Application.ActiveWorkbook.FullName
    xlFilepath = "[Excel 8.0;HDR=Yes;DATABASE=" & xlFilepath & ";IMEX=1]"

    myAddress = Replace(ThisWorkbook.Names("ExportData").RefersToRange.Address, "$", "")
    myAddress = "[Sheet1$" & myAddress & "]"
    myAddress = "" & xlFilepath & "." & myAddress & ""

 STRcn = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbFilepath & ";"

 strQuery = "INSERT INTO Table1" & vbCrLf & _
"SELECT * FROM " & myAddress & ""

Set cn = CreateObject("ADODB.Connection")
cn.Open STRcn
cn.Execute strQuery
cn.Close
Set cn = Nothing

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Excel 2010 VBA帮助复制列的范围

来自分类Dev

无法将Excel 2010 UI排序转换为VBA代码

来自分类Dev

Excel 2010 VBA仅影响范围的最后一行

来自分类Dev

VBA Excel 2010:将值从字典插入新行

来自分类Dev

VBA Excel 2010 isError函数

来自分类Dev

删除文件,然后在Excel 2010 VBA中的文件夹

来自分类Dev

Excel 2010 VBA数组作为类成员错误

来自分类Dev

Excel 2010 VBA数组作为类成员错误

来自分类Dev

Excel将范围转换为HTML?Excel 2010

来自分类Dev

Excel 2010 VBA宏制作Excel冻结

来自分类Dev

Excel 2010 VBA将多列列表框传输到命名范围

来自分类Dev

Excel 2010:VBA将传入的文本转换为多选下拉列表

来自分类Dev

在Excel 2010 VBA中调用Shell命令

来自分类Dev

Excel 2010 VBA,路径/文件访问错误

来自分类Dev

VBA代码中的OLEObjects错误(Excel 2010)

来自分类Dev

Excel 2010 VBA错误1004与公式

来自分类Dev

Excel 2010中的VBA位置图

来自分类Dev

在Excel 2010中隐藏MS VBA屏幕

来自分类Dev

具有Excel VBA的Outlook 2010 GAL

来自分类Dev

Excel 2010 VBA启动宏执行-错误

来自分类Dev

Excel 2010中的VBA位置图

来自分类Dev

从bash菜单调用excel 2010 vba

来自分类Dev

Excel 2010 VBA,多个新窗口,排列

来自分类Dev

Excel 2010 VBA,路径/文件访问错误

来自分类Dev

从bash菜单调用excel 2010 vba

来自分类Dev

用于删除 Excel 2010 的 VBA 代码

来自分类Dev

Excel 2010+ VBA-如何搜索范围公式而不是值

来自分类Dev

2010 Access vba 如何将 Excel 中的 displaygridlines 设置为 false?

来自分类Dev

VBA 将 Access DB 导出到 Excel