我尝试更改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
答案 0 :(得分:0)
您的第二个代码示例更好,但您确实使用了不同的公式样式。确保您在代码的第2步中使用.FormulaR1C1
。
#REF错误几乎肯定与您在上面引用行时删除行有关。您应该考虑寻找不同的引用方式,或者先删除要消除的行,然后创建公式。
如果这不是一个选项,并且您确定您始终希望单元格引用其上方的一行,则可以使用间接Excel功能。它会降低性能,但我认为这是你正在尝试做的事情。
.Formula
或.FormulaR1C1
方法适用于这种情况:
.SpecialCells(xlCellTypeBlanks).Formula = "=Indirect(""R[-1]C"",FALSE)"