2015-03-11 6 views
0

Я пытаюсь экспортировать файл excel в базу данных доступа. Некоторые столбцы/поля должны иметь тип поля номер, так как эти поля будут использоваться позже в запросах, включающих такие функции, как сумма, счет и т. Д.Очистка ячеек со значениями пустой строки

Теперь проблема состоит в том, что соответствующие столбцы в excel содержат пустые строки, которые создают проблема при экспорте в базу данных доступа (несоответствие типа поля). Даже если эти столбцы в excel имеют ячейки, отформатированные как числа, проблема не устранена

Я использовал следующий код VBA, чтобы устранить все пустые строки в этих столбцах и работает для приличного количества строк. Но файл excel будет содержать 350000 плюс строки, и для такого большого количества строк код, кажется, работает вечно.

Любые советы по улучшению моего кода или с другой подход будет высоко оценен

Dim r As Range 
For Each r In ActiveSheet.Range("AG2:AJ" & lastRow) 
    With r 
     If .Value = "" Then 
      .Clear 
     End If 
    End With 
Next 
+0

Вы повернули выключение экрана и т. д.? – Raystafarian

+0

Да, я пробовал это – Shazu

ответ

1

В случае у вас есть формулы, это должно сработать для вас, и я использовал тестовый набор данных для меня, у которого было 360000 строк менее чем за 5 секунд:

Sub tgr() 

    Dim lCalc As XlCalculation 
    Dim lCol As Long 
    Dim lLastRow As Long 

    With Application 
     lCalc = .Calculation 
     .Calculation = xlCalculationManual 
     .ScreenUpdating = False 
     .EnableEvents = False 
    End With 

    lLastRow = Range("AG:AJ").Find("*", Range("AG1"), , , , xlPrevious).Row 

    For lCol = Columns("AG").Column To Columns("AJ").Column 
     With Cells(1, lCol).Resize(lLastRow) 
      .AutoFilter 1, "=" 
      .Offset(1).Resize(.Rows.Count - 1).ClearContents 
      .AutoFilter 
     End With 
    Next lCol 

    With Application 
     .Calculation = lCalc 
     .ScreenUpdating = True 
     .EnableEvents = True 
    End With 

End Sub 
1

Если у вас нет формулы в колонках затем работает:

Sub clearTHEM() 
    Dim r As Range 
    Dim N As Long 
    N = Cells(Rows.Count, "AG").End(xlUp).Row 
    Set r = Range("AG2:AJ" & N) 
    With r 
     .Value = .Value 
    End With 
End Sub 

очистит NULLS. Однако он также уничтожит формулы. Если у вас есть формулы, запустите макрос, затем экспортируйте, но не сохраняйте.

EDIT # 1:

Для немного чистого подхода, этот код будет создан специальный, только на экспорт, копия листа без либо провалов или формул:

Sub ForExportOnly() 
    ActiveSheet.Copy After:=Sheets(Sheets.Count) 
    ActiveSheet.Name = "For Export Only" 
    With ActiveSheet.UsedRange 
     .Value = .Value 
    End With 
End Sub 
Смежные вопросы