我正在创建一小段具有特定公式的VBA代码,但它有几个if
语句,其中一个语句来自双线字符串(使用vbNewLine
)问题是我看不到文本。
所以我想把它包装好,但每次我设置ActiveCell.WrapText = True
时都没有任何反应。
我查了一个消息框。我将WrapText
设置为True,我使用MessageBox返回属性值进行确认,并且它仍然是False。
我被告知也使用ActiveCell.Rows.AutoFit
,但如果文本没有被包裹,AutoFit
什么都不做。
知道我在这里做错了什么吗?
尝试:
Sub WrapandFit()
ActiveCell.WrapText = True
ActiveCell.EntireRow.AutoFit
End Sub
它对我有用。确保您的screenupdating也设置为true。
对我来说,下面的代码工作。 (仅设置为更改标题行,(更改范围))
ActiveSheet.Range("A1:R1").Select
With Selection
.WrapText = True
End With
UDF(使用关键字Function的过程)仅返回值。它们无法更改Excel对象模型的其他部分,例如单元格格式。只有子程序(使用关键字Sub的程序)可以做到这一点。
在进入UDF之前,需要正确格式化单元格。或者您可以使用工作表更改事件子在事后进行格式化。
关闭/打开整个表格行的自动换行可以通过下面显示的VB代码完成:如果第一行设置为true,excel将继承该整个工作表的属性,除非您使用其他代码专门关闭它。
MyWorkSheet.Rows.WrapText = True
要关闭特定行的包装属性:
MyWorkSheet.Rows(8).WrapText = False
我怀疑你试图在合并的单元格中包装文本。如果是,您不能简单地致电:
MyWorkSheet.Rows.WrapText = True
相反,您必须模拟包装操作。我发现http://blog.contextures.com/archives/2012/06/07/autofit-merged-cell-row-height/的代码去年帮助了我。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MergeWidth As Single
Dim cM As Range
Dim AutoFitRng As Range
Dim CWidth As Double
Dim NewRowHt As Double
Dim str01 As String
str01 = "OrderNote"
If Not Intersect(Target, Range(str01)) Is Nothing Then
Application.ScreenUpdating = False
On Error Resume Next
Set AutoFitRng = Range(Range(str01).MergeArea.Address)
With AutoFitRng
.MergeCells = False
CWidth = .Cells(1).ColumnWidth
MergeWidth = 0
For Each cM In AutoFitRng
cM.WrapText = True
MergeWidth = cM.ColumnWidth + MergeWidth
Next
'small adjustment to temporary width
MergeWidth = MergeWidth + AutoFitRng.Cells.Count * 0.66
.Cells(1).ColumnWidth = MergeWidth
.EntireRow.AutoFit
NewRowHt = .RowHeight
.Cells(1).ColumnWidth = CWidth
.MergeCells = True
.RowHeight = NewRowHt
End With
Application.ScreenUpdating = True
End If
End Sub
这可能不是OP的想法,但我想我会分享我的VBA Word Wrap功能,因为我在网上找不到任何我想要的东西。
此函数将CR + LF插入到字符串中以便将其包装,因此如果将文本复制到另一个应用程序(基于文本或其他方式),则会保留自动换行。
Function wrapText(strIn As String, Optional maxLen As Long = 110) As String
Dim p As Long: wrapText = strIn
Do
p = InStrRev(wrapText, " ", p + maxLen) - 1
wrapText = Left(wrapText,p) & vbCrLf & Right(wrapText, Len(wrapText)-p-1)
Debug.Print Mid(Replace(wrapText, vbCrLf, "||"), p - 20)
'Stop
Loop While p + maxLen < Len(wrapText)
End Function
默认最大宽度为115个字符,但可以选择更改为任何内容。它只会在空格(最后一个出现在位置#115之前/之前)中断,并且它只插入CR + LF(使用常量vbCrLf
),但它们可以根据需要进行调整。
作为应用程序的一个例子,我在Excel中构建复杂的SQL查询,并希望将SQL复制到服务器应用程序整洁而不是一条巨线。