我正在尝试将excel文件导出到访问数据库。某些列/字段需要包含字段类型数字,因为稍后将在涉及sum,count等函数的查询中使用这些字段。
现在问题是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 :(得分: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 。然而,它也将爆炸公式。如果你有公式,那么运行宏,然后导出,但不要保存。
修改#1:强>
对于稍微简洁的方法,此代码将创建一个特殊的,仅用于导出的工作表副本,而不包含空值或公式:
Sub ForExportOnly()
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "For Export Only"
With ActiveSheet.UsedRange
.Value = .Value
End With
End Sub
答案 1 :(得分:1)
如果你有公式,这应该对你有用,并在我的测试数据集上运行,在不到5秒的时间内有360000行:
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