问题描述
大家好!
我一直在慢慢自学如何使用 vba,在取得了一些短暂的成功后,遇到了一个小问题。
我有两个命令按钮,一个插入新行并填充第 8 行的 4 个单元格,同时复制其下方行的数字和公式格式(日期和时间各一个单元格,两个固定文本单元格)。第二个按钮一旦被选中,它只会随时间填充一个单元格。
这两个宏在逐步调试时都按预期工作,但是当它们通过命令按钮运行时,我得到代码执行已被中断失败。
调试时,Range("A8:H8").SpecialCells(xlCellTypeConstants).ClearContents
行通常以黄色突出显示,但有时 Rows(9).EntireRow.Copy
是。我敢肯定,考虑到所涉及代码的简单性,我忽略了一些非常简单的东西。
我试图根据本网站和其他网站上的各种帖子重写台词,但没有成功。
以下是我拥有的全部代码,任何帮助将不胜感激!
Private Sub CommandButton1_Click()
Worksheets("Abyssal Chart").Rows(8).Insert Shift:=xlShiftDown
Rows(9).EntireRow.Copy
Rows(8).EntireRow.PasteSpecial xlPasteFormulasAndNumberFormats
Range("A8:H8").SpecialCells(xlCellTypeConstants).ClearContents
Range("A8").Value = Date
Range("B8").Value = "'T6"
Range("C8").Value = "'Electrical"
Range("D8").Value = Time
End Sub
Private Sub CommandButton2_Click()
Range("E8").Value = Time
End Sub
解决方法
插入行
标准模块Module1
Option Explicit
Sub InsertRow()
With ThisWorkbook.Worksheets("Abyssal Chart")
' Insert new row.
.Rows(8).Insert Shift:=xlShiftDown
' Copy formulas and number formats from row below.
.Rows(9).Copy
.Rows(8).PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False
' Clear contents but 'preserve' formulas.
.Range("A8:H8").SpecialCells(xlCellTypeConstants).ClearContents
' Write to new row.
.Range("A8").Value = Date
.Range("B8").Value = "'T6"
.Range("C8").Value = "'Electrical"
.Range("D8").Value = Time
End With
End Sub
Sub InsertTimeStamp()
ThisWorkbook.Worksheets("Abyssal Chart").Range("E8").Value = Time
End Sub
命令按钮所在的模块,例如Abyssal Chart
Option Explicit
Private Sub CommandButton1_Click()
InsertRow
End Sub
Private Sub CommandButton2_Click()
InsertTimeStamp
End Sub
,
您的脚本在我的 Excel 环境中运行良好。
如果多次运行宏时未做任何更改而出现错误:
- 偶尔
- 在不同的声明
- 但不是在调试时,
我认为 Excel 在开始下一个语句之前没有完成一个语句。
当我对大量数据运行批处理脚本时,当许多单元格具有必须更新的公式或当我调整图表时,通常会发生这种情况。
当我遇到这种情况时,我通常会稍微延迟一下,看看错误是否仍然发生。
Application.Wait (Now + TimeValue("0:00:01"))
在您的情况下,您可以开始将语句放在“Rows(9)...”和“Rows(8)...”之间
Rows(9).EntireRow.Copy
Application.Wait (Now + TimeValue("0:00:01"))
Rows(8).EntireRow.PasteSpecial xlPasteFormulasAndNumberFormats