删除Excel文件中的行/列时的#REF,以便于db-import

时间:2017-12-28 17:34:17

标签: excel vba ref

我尝试更改excel文件的数据,以便更轻松地导入到我的数据库中。我在excel中使用3段宏代码来做这件事。

以下是代码:

1 - 删除两个第一列

Sub Del_Columns ()

Columns ("A:B").EntireColumn.Delete

End Sub

2 - 使用上述值填充最右侧的列,以新值结束。

Sub FillBlanks()

Dim wks As Worksheet
Dim rng As Range
Dim LastRow As Long
Dim col As Long

Set wks = ActiveSheet
with wks

col = .Range("M").Column
Set rng = .UsedRange
LastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
Set rng = Nothing
On Error Resume Next
Set rng = .Range(.Cells(2, col), .Cells(LastRow, col)) _ 
.Cells.SpecialCells(xlCellTypeBlanks))
On Error GoTo 0

If rng Is Nothing Then
MsgBox "No Blanks Found"
Exit Sub

Else
rng.FormulaR1C1 = "=R[-1]C"
End If

With .Cells(1, col).EntireColumn
.Value = .Value
End With
End With
End Sub

3 - 删除其中包含空单元格的所有行(以col F为例,当空行时删除整行。总是如此)

Sub DeleteBlankRows()
On Error Resume Next
Columns ("F").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

摘要

执行此操作时,我会在某些单元格上获取#REF,我应该怎么做以防止/修复此问题?

另外; 这个代码更适合数字2(填充具有以上值的单元格):

Sub FillCellsFromAbove()

Application.ScreenUpdating = False
On Error Resume Next
With Columns(1)
.SpecialCells(xlCellTypeBlanks).Formula = "=R[-1]C"
.Value = .Value

End With
Err.Clear
Application.Updating = True
End Sub

1 个答案:

答案 0 :(得分:0)

您的第二个代码示例更好,但您确实使用了不同的公式样式。确保您在代码的第2步中使用.FormulaR1C1

#REF错误几乎肯定与您在上面引用行时删除行有关。您应该考虑寻找不同的引用方式,或者先删除要消除的行,然后创建公式。

如果这不是一个选项,并且您确定您始终希望单元格引用其上方的一行,则可以使用间接Excel功能。它会降低性能,但我认为这是你正在尝试做的事情。

.Formula.FormulaR1C1方法适用于这种情况:

.SpecialCells(xlCellTypeBlanks).Formula = "=Indirect(""R[-1]C"",FALSE)"