首页 > 解决方案 > 如果字符计数器大于 100,则更改字体大小的事件

问题描述

我有这个函数,只要特定范围内的单元格发生变化,就会调用一个函数。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:L60")) Is Nothing Then
    Call fit_text
    End If
End Sub

函数 fit_text 更改活动单元格值的字体大小。

Sub fit_text()
    MsgBox ActiveCell.Characters.Count

    If ActiveCell.Characters.Count > 100 Then
        ActiveCell.Font.Size = 8
    Else
        ActiveCell.Font.Size = 10
    End If
End Sub

问题:每当我更改字符数大于 100 的单元格的值时,字体大小保持为 10,并且告诉计数值的消息框显示 0,但是每当我在 vba 上运行它时,消息框都会显示如果计数大于 100,则正确的值并更改字体大小。我需要它是自动的。无法更改单元格的高度或宽度

标签: excelvbaevents

解决方案


请注意,Excel 可以自动缩小字体大小以适应单元格。因此选择您的单元格,按 Ctrl+1转到Alignment选项卡并选择Shrink To Fit


修复您的代码:
不要使用ActiveCell. 改用TargetIntersect范围。ActiveCell可能不是已更改的单元格。也Target可以是多个单元格,因此您需要遍历所有更改的单元格并单独测试每个单元格。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRange As Range
    Set AffectedRange = Intersect(Target, Target.Parent.Range("A1:L60"))

    If Not AffectedRange Is Nothing Then
        Dim Cell As Range
        For Each Cell In AffectedRange 'loop through all changed cells
            MsgBox Len(Cell.Value)

            If Len(Cell.Value) > 100 Then
                Cell.Font.Size = 8
            Else
                Cell.Font.Size = 10
            End If
        Next Cell
    End If
End Sub

推荐阅读