gpt4 book ai didi

vba - 每次更改工作表时运行宏

转载 作者:行者123 更新时间:2023-12-02 23:39:17 26 4
gpt4 key购买 nike

我对宏还很陌生,每次更新、更改或其他任何操作时,我都需要在工作表上运行一些代码。

这是我需要运行的代码:我该如何执行此操作?

Sub UnMergeFill()

Dim cell As Range, joinedCells As Range

For Each cell In ThisWorkbook.ActiveSheet.UsedRange
If cell.MergeCells Then
Set joinedCells = cell.MergeArea
cell.MergeCells = False
joinedCells.Value = cell.Value
End If
Next

End Sub

最佳答案

您可以通过定位要处理的合并单元格来提高宏的效率,而不是循环遍历 Worksheet.UsedRange property 中的每个单元格并检查它是否有 Range.MergeCells Property

在工作表的常规 Range.Find method 中,有一个用于查找格式的选项。在此子对话框的对齐选项卡上,您将找到用于定位合并单元格的选项。

         Merged Cells Find

可以使用 Range.Find methodApplication object's .FindFormat property 将其合并到您的 VBA 子过程中。

使用 FindFormat 的子过程:

Sub UnMergeFill(Optional ws As Worksheet)
If ws Is Nothing Then Set ws = ActiveSheet
Dim fndMrg As Range, joinedCells As Range

Application.FindFormat.MergeCells = True
With ws
On Error Resume Next
Set fndMrg = .Cells.Find(What:=vbNullString, SearchFormat:=True)
Do While Not fndMrg Is Nothing
Set joinedCells = fndMrg.MergeArea
fndMrg.MergeCells = False
'fndMrg.UnMerge '???
joinedCells.Value = fndMrg.Value
Set fndMrg = .Cells.Find(What:=vbNullString, SearchFormat:=True)
Loop
End With
Application.FindFormat.MergeCells = False

End Sub

稍微修改了 Worksheet_Change 事件宏,在处理过程中关闭更多环境。

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo bm_Safe_Exit
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False

Call UnMergeFill(Target.Parent)

bm_Safe_Exit:
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

我选择指定要处理的工作表,而不是依赖 ActiveSheet property 。当 Worksheet_Change 不是事件工作表时,外部进程可能会启动它。

简而言之,尽可能选择批量操作,并尽可能避免循环。这并不是快得令人眼花缭乱,但它应该比循环单元格快得多。

关于vba - 每次更改工作表时运行宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32237854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com