在DoCmd.TransferSpreadSheet中正确设置范围(Excel中的VBA Access)?
我在VBA Excel中编写了此代码,用于将数据从Excel备份到access中。代码不喜欢我在for-each循环中编写范围的方式。我还尝试了第二个for each循环,但这只是重复备份主页面(尽管使用了正确的表名) 我认为第一条路很近,但我不明白全量程线路有什么问题,它是全量程的 编辑:错误为对象变量或未在全范围行上设置块变量 更新6-18,似乎完整范围应该是字符串形式。我已经编辑了一点,但我现在在transferspreadsheet行上遇到的错误是“Microsoft数据库引擎找不到对象的1301数组$a$1:J$12”。请确保该对象存在并且拼写正确 我取出了fullrange并放入page.name,它给了我同样的错误在DoCmd.TransferSpreadSheet中正确设置范围(Excel中的VBA Access)?,excel,vba,ms-access,backup,data-transfer,Excel,Vba,Ms Access,Backup,Data Transfer,我在VBA Excel中编写了此代码,用于将数据从Excel备份到access中。代码不喜欢我在for-each循环中编写范围的方式。我还尝试了第二个for each循环,但这只是重复备份主页面(尽管使用了正确的表名) 我认为第一条路很近,但我不明白全量程线路有什么问题,它是全量程的 编辑:错误为对象变量或未在全范围行上设置块变量 更新6-18,似乎完整范围应该是字符串形式。我已经编辑了一点,但我现在在transferspreadsheet行上遇到的错误是“Microsoft数据库引擎找不到对象
For Each Page In Worksheets
PageName = Split(Page.Name, " ")
If UBound(PageName) > 0 Then
Worksheets(Page.Name).Activate
lRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
LCol = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Fullrange = Worksheets(Page.Name).Range(Worksheets(Page.Name).Cells(1, 1), _
Worksheets(Page.Name).Cells(lRow, LCol))
accappl.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
Page.Name, strpathxls, True, Fullrange
End If
Next
我对你的代码做了一些修改,看看你能不能看出哪里出了问题
For Each Page In Worksheets
PageName = Split(Page.Name, " ")
If UBound(PageName) > 0 Then
' Worksheets(Page.Name).Activate - this line is most likely not needed
lRow = Page.Range("A" & Rows.Count).End(xlUp).Row
LCol = Page.Cells(2, Columns.Count).End(xlToLeft).Column
fullRange = Page.Name & Page.Range(Page.Cells(1, 1), _
Page.Cells(lRow, LCol)).Address
accappl.DoCmd.TransferSpreadsheet acImport, _
acSpreadsheetTypeExcel12Xml, Page.Name, strpathxls, True, Page.Name
End If
Next
这是一些工作代码,由于某些原因,范围中必须有一个
Dim Page As Worksheet
Dim lRow As Long, LCol As Long
Dim fullRange As Range
Dim PageName As Variant
For Each Page In Worksheets
PageName = Split(Page.Name, " ")
If UBound(PageName) > 0 Then
' Worksheets(Page.Name).Activate - this line is most likely not needed
lRow = Page.Range("A" & Rows.Count).End(xlUp).Row
LCol = Page.Cells(1, Columns.Count).End(xlToLeft).Column
Set fullRange = Page.Range(Cells(1, 1), Cells(lRow, LCol))
accappl.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, Page.Name, strpathxls, True, fullRange
End If
Next
我将dim pagename下的fullrange注释为variant,因为我需要更新。for each循环中的fullrange给了我range方法failed error。我做了一些更改,现在出现了与以前相同的错误。嗯…尝试使用
设置fullrange
我进行了一个小更新。结果表明fullrange必须是一个字符串,但因为我需要a无论如何,整个工作表我将accpl.docmd行中的范围替换为页面名称,给出了更新6-18,似乎完整范围应为表单字符串。我已经编辑了一点,但我现在在transferspreadsheet行上遇到的错误是“Microsoft数据库引擎找不到对象的1301数组$a$1:J$12”。确保对象存在并且拼写正确。Range(“A1:A50”)。Address
返回该范围的字符串表示形式
Sub BU_ACCESS()
Dim accappl As Access.Application
Dim strpathdb As String
Dim strpathxls As String
'Dim myrange As String, myrow1 As String, myrow2 As String
'Dim fullRange As Range
strpathdb = "C:\Users\tgfesaha\Desktop\Database1.accdb"
'path to the upload file
strpathxls = ActiveWorkbook.FullName
Set accappl = New Access.Application
accappl.OpenCurrentDatabase strpathdb
Dim Page As Worksheet
Dim lRow As Long, LCol As Long
Dim fullrange As String
Dim PageName As Variant
'fullRange = Worksheets(Page.Name).Range(Worksheets(Page.Name).Cells(1, 1), Worksheets(Page.Name).Cells(lRow, LCol))
For Each Page In Worksheets
PageName = Split(Page.Name, " ")
If UBound(PageName) > 0 Then
' Worksheets(Page.Name).Activate - this line is most likely not needed
lRow = Page.Range("A" & Rows.Count).End(xlUp).Row
LCol = Page.Cells(2, Columns.Count).End(xlToLeft).Column
fullrange = Page.Range(Page.Cells(1, 1), Page.Cells(lRow, LCol)).Address
xclam = Page.Name & "!" & fullranges
accappl.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, Page.Name, strpathxls, True, xclam
End If
Next
accappl.Quit
End Sub