0

今天是个好日子!

我一直在慢慢地自学如何使用 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
4

2 回答 2

0

插入行

标准模块 例如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
于 2021-06-14T21:26:59.893 回答
-1

您的脚本在我的 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
于 2021-06-14T20:36:11.387 回答