VBA - 屏幕更新无法正常工作
问题描述:
我有受保护的工作簿,用户只能在某些字段上进行更改。由于我们无法控制用户端的复制/粘贴格式。我有下面的代码,这将帮助我保持目标格式。VBA - 屏幕更新无法正常工作
我用Font'Calibri'格式化了工作簿。因此,如果用户将数据从任何其他格式复制到工作簿,它可以帮助我保留'Calibri'字体。
我的担忧:当用户复制数据时,它会在代码被激活之前显示源格式,并更改我需要的格式。我已关闭屏幕更新以加快您的宏代码。但它是服务于我的目的。是否有可能消除这个问题?
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
我试着更新下面的代码。 .Undo
功能是创建一个问题
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
答
正如@约翰·科尔曼建议你只需要在您要保留的字体宋体片验证码,
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
也许更轻量级的事件处理程序可直接设置“Target”的字体(以及其他相关格式)而不会受到ScreenUpdating或EnableEvents的干扰,这可能会减少甚至消除问题。这段代码对于陈述的问题似乎有些过火。 –
如果你走这条路线,应该简单地删除'NewValues = Target','Application.Undo'和'Target = NewValues'行。 –