如果字符计数器大于100,则更改字体大小的事件

时间:2019-03-18 10:48:53

标签: excel vba events

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

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,则更改字体大小。我需要它是自动的。无法更改单元格的高度或宽度

3 个答案:

答案 0 :(得分:2)

请注意,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

答案 1 :(得分:0)

<EditButton label="Edit" /> 是Change事件之后的活动目录。您可以将PROCEDURE PROC_GetLAWCAndCommonVariables(P_QuoteRequestID IN TB_QUOTEREQUEST.QUOTEREQUESTID%TYPE, P_CaseQuoteID IN TB_CASEQUOTE.CASEQUOTEID%TYPE, P_POSTCODE IN TB_STRUCTUREDADDRESS.POSTCODE%TYPE, P_UserID IN TB_CUSTOMERINDIVIDUAL.USERID%TYPE, P_Sector IN TB_CUSTOMERINDIVIDUAL.DEFAULTSECTOR%TYPE, P_DWSSuppID IN TB_PRODUCTSUPPLIERLINK.SUPPID%TYPE, P_LASuppID IN TB_PRODUCTSUPPLIERLINK.SUPPID%TYPE, O_LAWCIDsAndVariables OUT NOCOPY ref_Cursor); 从事件传递到方法ActiveCell,以便它始终引用更改后的单元格:

Target

您还将希望检查一下Target是否超过单个单元格;在这种情况下,您可能希望您的过程检查每个单元格的内容。

答案 2 :(得分:0)

问题出在“ ActiveCell”上。

例如,当您编辑单元格Private Sub Worksheet_Change(ByVal target As Range) If Not Intersect(target, Range("A1:L60")) Is Nothing Then Call fit_text(target) End If End Sub Sub fit_text(target As Range) MsgBox ActiveCell.Address(False, False) MsgBox target.Characters.Count ' If ActiveCell.Characters.Count > 100 Then ' ActiveCell.Font.Size = 8 ' Else ' ActiveCell.Font.Size = 10 ' End If If target.Characters.Count > 100 Then target.Font.Size = 8 Else target.Font.Size = 10 End If End Sub 并按Enter键时,您在<div fxLayout="row" flex fxLayoutGap="10px"> <div fxLayout="column" flex="50"> Content 1... </div> <div fxLayout="column" flex="50"> Content 2... </div> </div> 中使用的A1不是ActiveCell,而是fit_text。 / p>

不过,只需将单元格从A1传递到A2,就可以轻松解决此问题。

Worksheet_Change
相关问题