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

时间:2017-10-16 11:03:40

标签: excel vba excel-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

1 个答案:

答案 0 :(得分:2)

正如@John Coleman建议您只需要在要保留字体校准的工作表中使用此代码,

    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