2010-07-01 2 views
0

Я пытаюсь написать скрипт VBA, который импортирует все файлы Excel в папке в таблицу Access 2003, сначала проверяя, есть ли у них были импортированы или нет. Эта часть в порядке. Проблема, с которой я сталкиваюсь, - это очистить некоторые из формул, которые не используются в электронной таблице, что создает трудности при попытке Access импортировать диапазон. при запуске кода as-is появляется ошибка «Определенный пользователем тип не определен».«Определенный пользователем тип не определен» для диапазона Excel Использование позднего связывания в Access 2003

Я использую позднюю привязку, так как я разрабатываю сайт, который использует несколько версий Office и therfore, не может ссылаться на одну и ту же библиотеку, используя раннее связывание. Код ошибки ниже:

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 
       ... 

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

ответ

1

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

+0

Несомненно, как объект? – Fionnuala

+0

@Remou: «Как объект» строго не требуется, я верю, но да, это эффект. – grammar31

Смежные вопросы