ユーザーが特定のフィールドのみを変更できるブックを保護しました。私たちはユーザー側からコピー/貼り付けフォーマットを制御することができないからです。私は宛先の書式を維持するのに役立つ以下のコードを持っています。VBA - 画面更新が期待どおりに機能しない
フォント「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
以下のコードを更新しようとしました。 @ジョン・コールマンは、あなただけのフォントcalibriを維持したいシートにこのコードが必要に示唆したように、あなたはすべてのためにこれをしたい場合.Undo
機能は
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)
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
おそらく、 'ScreenUpdating'や' EnableEvents'で気にせずに 'Target'のフォント(および他の関連フォーマット)を直接設定するより軽量なイベントハンドラは、この問題を減らしたり、排除したりするかもしれません。このコードは、述べられている問題のために過剰なもののようです。 –
'NewValues = Target'、' Application.Undo'、 'Target = NewValues'の行は、このルートに行くと削除されます。 –