«Определенный пользователем тип не определен» для диапазона Excel с использованием позднего связывания в Access 2003 - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь написать сценарий 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
                ...

Остальная часть кода должна работать нормально, так как в jsut есть проблема с объявлением «range» и циклическим циклом. Спасибо за вашу помощь!

1 Ответ

1 голос
/ 01 июля 2010

Удалите As Range из Dim c As Range, и c превратится в объект. Таким образом, когда он будет поздно привязан к диапазону, у вас не будет никаких проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...