我具有此函数,只要特定范围内的单元格发生变化,就会调用该函数。
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,则更改字体大小。我需要它是自动的。无法更改单元格的高度或宽度
答案 0 :(得分:2)
请注意,Excel可以自动缩小字体大小以适合单元格。因此,选择您的单元格,按 Ctrl + 1 进入Alignment
标签,然后选择Shrink To Fit
。
要修改您的代码,请执行以下操作:
不要使用ActiveCell
。请改用Target
或Intersect
范围。 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