Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Vba 在表格中循环,为空行着色并删除已占用单元格中的空格_Vba_Excel - Fatal编程技术网

Vba 在表格中循环,为空行着色并删除已占用单元格中的空格

Vba 在表格中循环,为空行着色并删除已占用单元格中的空格,vba,excel,Vba,Excel,我正在寻找一种方法来循环遍历表中每一行的第三列。 如果该单元格为空,则应为整行着色 如果该单元格已被占用,它应查找任何空格,并用单个替换所有空格(例如123 abc变为123 abc)。 它不应在表的标题行上运行 一些随机项目- 工作表名称为Quote 表名为QuoteTable 底纹应为RGB(255、248、220) 表中的行数始终会有所不同,但宏将始终检查表中名为Model.的第三列的内容 谢谢你的回答,我将尝试每一行,同时我提出了这个——它做了所有的事情,除了突出显示A-N中的每一行,而

我正在寻找一种方法来循环遍历表中每一行的第三列。 如果该单元格为空,则应为整行着色 如果该单元格已被占用,它应查找任何空格,并用单个
替换所有空格(例如
123 abc
变为
123 abc
)。 它不应在表的标题行上运行

一些随机项目-
工作表名称为
Quote

表名为
QuoteTable

底纹应为RGB(255、248、220)
表中的行数始终会有所不同,但宏将始终检查表中名为
Model.
的第三列的内容

谢谢你的回答,我将尝试每一行,同时我提出了这个——它做了所有的事情,除了突出显示A-N中的每一行,而不仅仅是正确的一行

Public Sub ValidateSKUs()
Dim sMfrPN As String
Dim tbl1 As Range
Dim myCell As Range
Set tbl1 = Sheets("Quote").Range("QuoteTable")
    For Each myCell In tbl1.Columns(3).Cells
    If myCell.Value = "" Then
            Sheets("Quote").Range("A" & myCell & ":N" & myCell).Interior.Color = RGB(255, 248, 220)
            Sheets("Quote").Range("A" & myCell & ":N" & myCell).Interior.Pattern = xlSolid
    Else
        sMfrPN = CleanUpPN(myCell)
            myCell = sMfrPN
    End If
    Next

End Sub

Public Function CleanUpPN(ByVal sMfrPN As String) As String
Dim sPN As String
'Trim trailing spaces
sPN = Trim(sMfrPN)
'Replace space with #
sPN = Replace(sPN, " ", "#")
'remove multiple # (e.g. ##)
Do Until InStr(1, sPN, "##") = 0
    sPN = Replace(sPN, "##", "#")
Loop
CleanUpPN = sPN
End Function

结构化表的VBA编码可能是一个难题。您可以将该表作为或
将变量设置为,并像处理任何其他工作表引用一样处理单元格地址

Sub fix_model_no()
    Dim mn As Range

    With Worksheets("Sheet1")    '<~~ set this properly!
        With .ListObjects("QuoteTable")
            For Each mn In Range("QuoteTable[Model '#]")
                If Len(Trim(mn.Value2)) Then
                    Intersect(.DataBodyRange, Rows(mn.Row)).Interior.ColorIndex = xlColorIndexNone
                    mn = Replace(Application.Trim(mn.Value2), Chr(32), Chr(35))
                Else
                    mn.ClearContents
                    Intersect(.DataBodyRange, Rows(mn.Row)).Interior.ColorIndex = 3  'red
                End If
            Next mn
        End With
    End With
End Sub
Sub-fix\u model\u no()
暗锰砷范围
使用工作表(“Sheet1”)将“Z”更改为所需的任何列

Sub Oh_Ya()
    Dim sh As Worksheet
    Dim rng As Range, c As Range
    Dim rws As Long, r

    Set sh = Sheets("Quote")
    With sh
        rws = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set rng = .Range("C2:C" & rws)
        For Each c In rng.Cells
            c = Replace(c, " ", "#")
            If c = "" Then
                r = c.Row
                Range("A" & r & ":Z" & r).Interior.Color = RGB(255, 248, 220)
            End If
        Next c
    End With
End Sub

“循环通过每行的第三列”,这是否与循环通过“C”列相同?是的,循环通过“QuoteTable”的C列我不确定是否最好将其称为“C”或“Model”#“我有一个宏,当它在某个范围内时运行良好,但在最后使用的行之后会对空行进行着色,因此,我决定使用一个表而不是一个范围,现在必须重新编写宏,因为它不再像您使用的Application.Trim一样正常工作。但是如果值改为“123 abc”,它会工作吗?VBA会删除前导/尾随空格,但工作表会删除前导/尾随空格以及内联双空格。当然,你可以试一下,然后回来汇报。