Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 循环遍历单元格并更改字体_Excel_Vba_Fonts_Size - Fatal编程技术网

Excel 循环遍历单元格并更改字体

Excel 循环遍历单元格并更改字体,excel,vba,fonts,size,Excel,Vba,Fonts,Size,我正在尝试循环一行中的所有单元格,并使用以下条件更改字体大小: 如果字体大小小于10,则将字体大小更改为10 如果工作表中的所有单元格的字体大小相同,则此操作有效。如果工作表中的任何单元格具有不同的字体大小,则返回null。如果A1中的字体大小为8,A2中的字体大小为20,则没有变化 Sub SetSheetFont(ws As Worksheet) Dim x As Integer Dim NumRows As Long Application.ScreenUpda

我正在尝试循环一行中的所有单元格,并使用以下条件更改字体大小:

  • 如果字体大小小于10,则将字体大小更改为10
如果工作表中的所有单元格的字体大小相同,则此操作有效。如果工作表中的任何单元格具有不同的字体大小,则返回
null
。如果A1中的字体大小为8,A2中的字体大小为20,则没有变化

Sub SetSheetFont(ws As Worksheet)
    Dim x As Integer
    Dim NumRows As Long
    Application.ScreenUpdating = False
    NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
    Range("A1").Select
    With ws
        ' If the font size is lower than 10, set to 10
        For x = 1 To NumRows
            If .Cells.Font.Size < 10 Then .Cells.Font.Size = 10
            ActiveCell.Offset(1, 0).Select
        Next
        Application.ScreenUpdating = True
    End With
End Sub
子设置表字体(ws-As工作表)
作为整数的Dim x
暗淡的珠子长得一样
Application.ScreenUpdating=False
NumRows=Range(“A1”,Range(“A1”).End(xlDown)).Rows.Count
范围(“A1”)。选择
与ws
'如果字体大小小于10,则设置为10
对于x=1到NumRows
如果.Cells.Font.Size<10,则.Cells.Font.Size=10
ActiveCell.Offset(1,0)。选择
下一个
Application.ScreenUpdating=True
以
端接头
最终目标是循环遍历列中的所有单元格,直到有一定数量的空单元格,然后从下一列开始(在本例中为B1)


我如何至少在一篇专栏文章中做到这一点?如果我从那里开始,我很确定我可以让它工作。

你可以在
UsedRange

Sub SetSheetFont(ws As Worksheet)
    Dim myCell As Range
    Application.ScreenUpdating = False
    With ws
        For each myCell in ws.UsedRange
            ' If the font size is lower than 10, set to 10
            If myCell.Font.Size < 10 Then myCell.Font.Size = 10
        Next
    End With
    Application.ScreenUpdating = True
End Sub
子设置表字体(ws-As工作表)
暗淡的迈塞尔山脉
Application.ScreenUpdating=False
与ws
对于ws.UsedRange中的每个myCell
'如果字体大小小于10,则设置为10
如果myCell.Font.Size<10,则myCell.Font.Size=10
下一个
以
Application.ScreenUpdating=True
端接头

旁注:一般来说,您希望在代码中保留您的代码,如注释所示,您希望访问每个单元格(而不是所有单元格,这是
.cells.
所做的:

For x = 1 To NumRows
    If .Cells(x,1).Font.Size < 10 Then .Cells(x,1).Font.Size = 10
Next

编辑:为了确保,
xlDown
可以工作,只需注意它将在第一个空单元格处停止。像我那样使用
xlUp
,将确保获得列A中的所有行……这可能是您想要的,也可能不是您想要的。

根据我的评论,我认为这可能是
FindFormat
ReplaceFormat
的一个很好的用例:

Dim x As Double

'Set ReplaceFormat just once
Application.ReplaceFormat.Clear
Application.ReplaceFormat.Font.Size = 10

'Set FindFormat in a For loop
For x = 1 To 9.5 Step 0.5
    Application.FindFormat.Clear
    Application.FindFormat.Font.Size = x
    ws.Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
Next x
这防止了对所有
ws.Cells
的迭代。循环是必要的,因为我们不能设置如下内容:
Application.FindFormat.Font.Size<10
。而且
Font.Size
将自动调整(至少对我来说)到最接近的0.5(1是最小的大小),我们可以用0.5的步长从1逐步调整到9.5


根据您的描述,您可能希望将其更改为
ws.UsedRange
,如@controlnetic.nomad所述。因此,它将显示为:
ws.UsedRange.Replace…

,这可能是
FindFormat
ReplaceFormat
的一个很好的用例。但不确定。而且您的循环并没有真正改变每次迭代。每次都检查相同的单元格(整个工作表的单元格)。如果要检查A列中的单元格,请将
.cells.
更改为
.cells(x,1).
然后它将循环遍历从第1行到
numRows
的所有单元格,检查A列中的单元格。
xlDown
可能是故意的,因为OP提到“循环遍历列中的所有单元格,直到有一定数量的空单元格”。我想OP的结尾有点不清楚。尽管如此,一个可靠的答案:)@JvdV-同意
xlDown
,我试图在我的回答中注意到这一点,但我将进行编辑以澄清。作为附加选项,OP可以使用
ws.Range(“A1:C1000”)。替换…
。我个人对使用
UsedRange
总是犹豫不决,因为它不一定能达到您所期望的使用范围。和
.Cells.
,当然,它对所有单元格都有效。只是想显示使用特定范围的选项。:)
Dim x As Double

'Set ReplaceFormat just once
Application.ReplaceFormat.Clear
Application.ReplaceFormat.Font.Size = 10

'Set FindFormat in a For loop
For x = 1 To 9.5 Step 0.5
    Application.FindFormat.Clear
    Application.FindFormat.Font.Size = x
    ws.Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
Next x