Excel-VBA:代码正在生成意外数字(0)
我被困在这个问题上,我不明白为什么代码会在D列中添加那些额外的零;我做错了什么 代码: 输入: 输出:Excel-VBA:代码正在生成意外数字(0),excel,vba,Excel,Vba,我被困在这个问题上,我不明白为什么代码会在D列中添加那些额外的零;我做错了什么 代码: 输入: 输出: 避免选择对象。它被创建为用户和VBA之间通过屏幕进行通信的媒介。VBA可以直接访问Excel工作簿,因此不需要它。请尝试此代码 Private Sub InsertThreeColumns() Dim Rl As Long ' last used row Dim Rng As Range With Workshee
避免选择
对象。它被创建为用户和VBA之间通过屏幕进行通信的媒介。VBA可以直接访问Excel工作簿,因此不需要它。请尝试此代码
Private Sub InsertThreeColumns()
Dim Rl As Long ' last used row
Dim Rng As Range
With Worksheets("NewTest") ' change to suit
Rl = .Cells(.Rows.Count, "B").End(xlUp).Row
.Columns(2).Copy
.Columns(1).Insert Shift:=xlToRight
Application.CutCopyMode = False
.Columns("A:B").Insert Shift:=xlToRight
.Columns(5).EntireColumn.Delete
On Error Resume Next
' next line will cause a crash if there are no blanks
Set Rng = .Range(.Cells(2, "D"), .Cells(Rl, "D")).SpecialCells(xlCellTypeBlanks)
If Err = 0 Then
Rng.FormulaR1C1 = "=R[-1]C[6]"
Rng.Copy
Rng.PasteSpecial xlPasteValues
End If
On Error GoTo 0
With .Cells(1, "D")
.Value = Time
.NumberFormat = "h:mm:ss"
End With
End With
End Sub
困扰您的额外零是由定义希望公式提供单元格内容的范围的方法引起的。在您的代码中,该范围是选择的派生。在上面的代码中,它由起始单元格和结束单元格定义。结果应该是一样的。这并不是因为通过选择
对象的路径迂回且难以遵循。范围(“D2:D2”和last)
是原因。如果last=3,则除了您应该阅读的内容外,还将引用D2:D23
Private Sub InsertThreeColumns()
Dim Rl As Long ' last used row
Dim Rng As Range
With Worksheets("NewTest") ' change to suit
Rl = .Cells(.Rows.Count, "B").End(xlUp).Row
.Columns(2).Copy
.Columns(1).Insert Shift:=xlToRight
Application.CutCopyMode = False
.Columns("A:B").Insert Shift:=xlToRight
.Columns(5).EntireColumn.Delete
On Error Resume Next
' next line will cause a crash if there are no blanks
Set Rng = .Range(.Cells(2, "D"), .Cells(Rl, "D")).SpecialCells(xlCellTypeBlanks)
If Err = 0 Then
Rng.FormulaR1C1 = "=R[-1]C[6]"
Rng.Copy
Rng.PasteSpecial xlPasteValues
End If
On Error GoTo 0
With .Cells(1, "D")
.Value = Time
.NumberFormat = "h:mm:ss"
End With
End With
End Sub