我正在创建一小段具有特定公式的VBA代码,但是它有几个if
语句,其中一个语句来自双线字符串(vbNewLine
)
问题是我看不到文字。
所以我想用自动换行,但每次设置ActiveCell.WrapText = True
时都没有任何反应。
我查了一个消息框。我将WrapText
设置为True,我使用MessageBox返回属性值进行确认,并且它仍然是False。
我也被告知要使用ActiveCell.Rows.AutoFit
,但如果文字没有被包裹,则AutoFit
什么都不做。
知道我在这里做错了什么吗?
答案 0 :(得分:16)
尝试:
Sub WrapandFit()
ActiveCell.WrapText = True
ActiveCell.EntireRow.AutoFit
End Sub
它对我有用。确保您的screenupdating也设置为true。
答案 1 :(得分:4)
对我来说,下面的代码有效。 (仅设置为更改标题行,(更改范围))
ActiveSheet.Range("A1:R1").Select
With Selection
.WrapText = True
End With
答案 2 :(得分:2)
UDF(使用关键字Function的过程)仅返回值。它们无法更改Excel对象模型的其他部分,例如单元格格式。只有子程序(使用关键字Sub的程序)可以做到这一点。
在输入UDF之前,需要正确格式化单元格。或者您可以使用工作表更改事件子来在事实之后格式化它们。
答案 3 :(得分:1)
关闭/打开整页表格的自动换行可以通过以下VB代码完成: 如果第一行设置为true,则excel将继承整个工作表的该属性,除非您使用其他代码专门将其关闭。
MyWorkSheet.Rows.WrapText = True
要关闭特定行的包装属性:
MyWorkSheet.Rows(8).WrapText = False
答案 4 :(得分:1)
我怀疑您正在尝试将文本换行到合并的单元格中。如果是,您不能简单地致电:
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
答案 5 :(得分:-1)
这可能并不是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整洁地复制到服务器应用程序中,而不是一条巨大的线。