VBA – 屏幕更新无法按预期工作

我已经保护了工作簿,用户只能在某些领域进行更改。 由于我们无法控制用户端的复制/粘贴格式。 我有下面的代码,这将帮助我保持目标格式。

我有用'Calibri'字体格式化的工作簿。 因此,如果用户将数据从其他任何格式复制到工作簿,它可以帮助我保留“Calibri”字体。

我关心的问题:当用户复制数据时,它会在代码被激活之前显示源格式,并更改我需要的格式。 我已closures屏幕更新,以加快您的macros代码。 但它是服务于我的目的。 是否有可能消除这个问题?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim vNewValues As Variant NewValues = Target Application.ScreenUpdating = False Application.EnableEvents = False Application.Undo Target = NewValues Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

我试图更新代码如下。 .Undofunction正在创build一个问题

  Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim vNewValues As Variant NewValues = Target Application.EnableEvents = False Target.Font.Name = "Calibri" Target.Font.Size = 11 Target.HorizontalAlignment = xlLeft Target.VerticalAlignment = xlTop Target.WrapText = True Application.Undo Target = NewValues End Sub 

正如@约翰·科尔曼(John Coleman)所build议的,你只需要在你想要保留字体的工作表中使用这个代码,

  Private Sub Worksheet_Change(ByVal Target As Range) Target.Font.Name = "Calibri" End Sub 

如果您希望为工作簿中的所有工作表添加此代码,请将其粘贴到工作簿中

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Target.Font.Name = "Calibri" End Sub 

@Sady,这是你的更新代码

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents = False Target.Font.Name = "Calibri" Target.Font.Size = 11 Target.HorizontalAlignment = xlLeft Target.VerticalAlignment = xlTop Target.WrapText = True Application.EnableEvents = True End Sub