Ms access &引用;“未定义用户定义类型”;对于Excel范围,在Access 2003中使用后期绑定

Ms access &引用;“未定义用户定义类型”;对于Excel范围,在Access 2003中使用后期绑定,ms-access,vba,Ms Access,Vba,我试图编写一个VBA脚本,将文件夹中的所有Excel文件导入Access 2003中的表中,首先检查它们是否已导入。那部分很好。我遇到的问题是清除电子表格中未使用的一些公式,这会在Access尝试导入范围时造成困难。当按原样运行代码时,我得到一个错误“用户定义类型未定义” 我正在使用后期绑定,因为我正在为一个使用多个Office版本的站点开发,因此不能使用早期绑定引用同一个库。问题代码如下: Private Sub Command2_Click() 'Declare Variables Dim

我试图编写一个VBA脚本,将文件夹中的所有Excel文件导入Access 2003中的表中,首先检查它们是否已导入。那部分很好。我遇到的问题是清除电子表格中未使用的一些公式,这会在Access尝试导入范围时造成困难。当按原样运行代码时,我得到一个错误“用户定义类型未定义”

我正在使用后期绑定,因为我正在为一个使用多个Office版本的站点开发,因此不能使用早期绑定引用同一个库。问题代码如下:

Private Sub Command2_Click()
'Declare Variables
Dim xlApp As Object
Dim xlBook As Object
Dim LSQL As String
Dim SkippedCounter As Integer
Dim ImportedCounter As Integer
Dim BUN As Long
Dim SubmitDate As Date
Dim LSQL2 As String
Dim LSQL3 As String

'Start counters for final notice
SkippedCounter = 0
ImportedCounter = 0

Dim myDir As String, fn As String

'Set directory for importing files
myDir = "U:\Five Star\Operations\restore\Surveys\My InnerView - 2010\Action plans\Action plans - input for DB\"

'Function for selecting files in folder
fn = Dir(myDir & "*.xls")

'Determine if there are files in side the folder
If fn = "" Then
    MsgBox "Folder is Empty!"
Else
    'Begin cycling through files in the folder
    Do While fn <> ""
        'Create new Excel Object
        Set xlApp = CreateObject("Excel.Application")
        'Make it appear on the screen while importing
        xlApp.Visible = True
        'Open the workbook at hand
        Set xlBook = xlApp.Workbooks.Open(myDir & fn)
        'Check to see if it has been imported already
        If xlBook.Sheets("Action plan form").Range("A1").Value = "Imported" Then
                'If it has been imported, add 1 to the counter, close the file and close the instance of Excel
                SkippedCounter = SkippedCounter + 1
                xlBook.Close
                xlApp.Quit
                Set xlBook = Nothing
                Set xlApp = Nothing
            Else
                'Otherwise, unprotect the worksheet
                xlBook.UnProtect Password:="2010"
                Dim c As Range
                'Unhide worksheet needed and clean it up
                xlBook.Sheets("Action plan DB data").Visible = True
                xlBook.Sheets("Action plan DB data").Range("B10:O10").ClearFormats
                xlBook.Sheets("Action plan DB data").Range("N11:N84").ClearFormats
                For Each c In xlBook.Sheets("Action plan DB data").Range("DB_import")
                    If c.Value = "" Or c.Value = 0 Then c.Clear
                Next c
                ...
Private子命令2_Click()
'声明变量
将xlApp作为对象
以书为对象
作为字符串的Dim LSQL
Dim SkippedCounter作为整数
将导入计数器设置为整数
点心和面包一样长
Dim提交日期为日期
Dim LSQL2作为字符串
Dim LSQL3作为字符串
'为最终通知启动计数器
SkippedCounter=0
导入计数器=0
Dim myDir作为字符串,fn作为字符串
'设置导入文件的目录
myDir=“U:\Five Star\Operations\restore\Surveys\My InnerView-2010\Action plans\Action plans-input for DB\”
'用于选择文件夹中文件的函数
fn=Dir(myDir&“*.xls”)
'确定文件夹中是否有文件
如果fn=”“,则
MsgBox“文件夹为空!”
其他的
'开始循环浏览文件夹中的文件
当fn“”时执行
'创建新的Excel对象
设置xlApp=CreateObject(“Excel.Application”)
'使其在导入时显示在屏幕上
xlApp.Visible=True
'打开手头的工作簿
设置xlBook=xlApp.Workbooks.Open(myDir&fn)
'检查是否已导入
如果xlBook.Sheets(“行动计划表”).Range(“A1”).Value=“导入”,则
'如果已导入,请在计数器中添加1,关闭文件并关闭Excel实例
SkippedCounter=SkippedCounter+1
书本,关上
xlApp.退出
设置xlBook=Nothing
设置xlApp=Nothing
其他的
'否则,请取消工作表的保护
xlBook.UnProtect密码:=“2010”
调光范围
'需要取消隐藏工作表并将其清理
xlBook.Sheets(“行动计划数据库数据”).Visible=True
xlBook.Sheets(“行动计划数据库数据”).Range(“B10:O10”).ClearFormats
xlBook.Sheets(“行动计划数据库数据”).Range(“N11:N84”).ClearFormats
对于xlBook.Sheets中的每个c(“行动计划DB数据”)。范围(“DB_导入”)
如果c.Value=“”或c.Value=0,则c.清除
下一个c
...

代码的其余部分应该可以正常运行,因为jsut对“range”的声明和循环有问题。谢谢你的帮助

Dim c As Range
中删除
As Range
,这将使
c
成为一个对象。这样,当它晚绑定到某个范围时,您将不会有任何问题。

@Remou:“作为对象”不是严格要求的,我相信,但是的,这就是效果。