我正在检查这段代码
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 1 And Target.Offset(1, 0) = "" Then
Target.Offset(-1, 0).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End If
End Sub
基本上,它应该做的是复制你正在输入/粘贴数据的单元格的格式,所以如果你粘贴了几个单元格,它会开始将格式复制到所有的单元格。
我已经测试了这段代码,但大多数时候我得到一个错误'13运行时,另一件事是当它确实工作,它只适用于列A,但由于某种原因,代码是不稳定的,它真的很脆弱,需要大约1.3秒的工作。当我将信息粘贴到单元格中时,它就不起作用了如果我在单元格中输入信息,它就不起作用了代码的实际目的就是强制所粘贴的任何类型的数据具有其上方单元格的格式
我们如何使这段代码复制/粘贴我输入数据的单元格上方的格式,但适用于所有列,而不仅仅是列A
此外,是否有一种方法可以使代码运行得更快?如果我删除任何东西,也会得到错误'13。此外,如果我将代码粘贴到我已经处理过的excel工作表中,它将根本不起作用。
我在上面的评论中提到了事件循环,在使用事件处理程序时注意这一点很重要。
这一行限制了您的代码仅为A列,特别是"And"之前的位:
If Target.Column = 1 And Target.Offset(1, 0) = "" Then
我将在这里进行这些更改,但也限制它排除第1行(如果您在第1行中这样做,您将在Target.Offset(-1,0)
上得到错误)。
我还将其限制为仅在单个细胞的目标上工作。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Not Target.Cells.Count = 1 Or Target.Row = 1 Then Exit Sub
If Target.Offset(1, 0) = "" Then
Target.Offset(-1, 0).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End If
Application.EnableEvents = True
End Sub
当然,可以在一系列单元格上使用事件处理程序,但随后我们会在Target.Offset(1,0)
上得到错误(这实际上是要求该单元格的.Value
,如果它是多个单元格的范围,则会失败)。就像我说的,有很多方法可以绕过它,但如果不知道你需要什么,就很难提出精确的建议。
这可能行得通;仍然限于单个行,但我认为将适用于多个单元格。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Dim nextRow as Variant
If Not Target.Rows.Count = 1 Or Target.Row = 1 Then Exit Sub
'store the next row in an array:
nextRow = Application.Transpose(Application.Transpose(Target.Offset(1, 0).Value)
If Join(nextRow, "") = "" Then
Target.Offset(-1, 0).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End If
Application.EnableEvents = True
End Sub