在Excel中的字符串后插入空行

在Excel中的字符串后插入空行,excel,vba,Excel,Vba,我试图在excel 2010中创建一个宏,用于查找表中的每个单元格,其值为“所有客户”。每次找到该值时,我都需要在其下方插入一个空行。虽然它会很简单,但我已经搜索了很多论坛,并试图使用一些示例代码,但我无法让它正常工作。我是一个完全的新手,当谈到VBA的东西。我想我会在这里发布,然后去读一些VBA的基础知识 如果任何人有任何好的培训资源,请张贴这些以及 提前谢谢 编辑:在我的专栏文章中,我忽略了提到任何包含所有客户值的行最好都突出显示,并用粗体加大字体 这些操作是旧的Crystal报表查看/格式

我试图在excel 2010中创建一个宏,用于查找表中的每个单元格,其值为“所有客户”。每次找到该值时,我都需要在其下方插入一个空行。虽然它会很简单,但我已经搜索了很多论坛,并试图使用一些示例代码,但我无法让它正常工作。我是一个完全的新手,当谈到VBA的东西。我想我会在这里发布,然后去读一些VBA的基础知识

如果任何人有任何好的培训资源,请张贴这些以及

提前谢谢

编辑:在我的专栏文章中,我忽略了提到任何包含所有客户值的行最好都突出显示,并用粗体加大字体

这些操作是旧的Crystal报表查看/格式化程序在拉取报表时用来自动处理的。根据软件制造商的技术支持,在升级程序后,我了解到,随着新版本程序的发布,这种格式化功能已经被删除。如果在发行说明中定义了这一点,我就不会执行升级。不管怎样,这就是我在这场宏观灾难中发现自己的方式

Public Sub InsertRowAfterCellFound()

    Dim foundRange As Range
    Set foundRange = Cells.Find(What:="yourStringOrVariant", After:=ActiveCell) 'Find the range with the occurance of the required variant

    Rows(foundRange.Row + 1 & ":" & foundRange.Row + 1).Insert 'Insert a new row below the row of the foundRange row

    foundRange.Activate 'Set the found range to be the ActiveCell, this is a quick and easy way of ensuring you aren't repeating find from the top

End Sub
您可能需要向代码中添加错误处理,因为如果找不到具有指定值的单元格,则会出现错误


您可能需要将错误处理添加到代码中,因为如果找不到具有指定值的单元格,您将得到一个错误。

假设这在第一页第1页上,下面是一个缓慢的答案:

Sub InsertRowsBelowAllCustomers()

    'Set your worksheet to a variable
    Dim sheetOne as Worksheet 
    Set sheetOne = Worksheets("Sheet1")

    'Find the total number of used rows and columns in the sheet (where "All Customers" could be)
    Dim totalRows, totalCols as Integer
    totalRows = sheetOne.UsedRange.Rows.Count
    totalCols = sheetOne.UsedRange.Columns.Count

    'Loop through all used rows/columns and find your desired "All Customers"
    Dim row, col as Integer
    For row = 1 to totalRows
        For col = 1 to totalCols
            If sheetOne.Cells(row,col).Value = "All Customers" Then
                  Range(sheetOne.Cells(row,col)).Select
                  ActiveCell.Offset(1).EntireRow.Insert
                  totalRows = totalRows + 1 'increment totalRows because you added a new row
                  Exit For  
            End If 
        Next col
    Next row
End Sub 

假设这在第一页1上,下面是一个缓慢的答案:

Sub InsertRowsBelowAllCustomers()

    'Set your worksheet to a variable
    Dim sheetOne as Worksheet 
    Set sheetOne = Worksheets("Sheet1")

    'Find the total number of used rows and columns in the sheet (where "All Customers" could be)
    Dim totalRows, totalCols as Integer
    totalRows = sheetOne.UsedRange.Rows.Count
    totalCols = sheetOne.UsedRange.Columns.Count

    'Loop through all used rows/columns and find your desired "All Customers"
    Dim row, col as Integer
    For row = 1 to totalRows
        For col = 1 to totalCols
            If sheetOne.Cells(row,col).Value = "All Customers" Then
                  Range(sheetOne.Cells(row,col)).Select
                  ActiveCell.Offset(1).EntireRow.Insert
                  totalRows = totalRows + 1 'increment totalRows because you added a new row
                  Exit For  
            End If 
        Next col
    Next row
End Sub 

此函数从最后一行开始,返回到第一行,在包含列A上所有客户的每个单元格后插入一个空行:

Sub InsertRowsBelowAllCustomers()
  Dim R As Integer
  For R = UsedRange.Rows.Count To 1 Step -1
    If Cells(R, 1) = "All Customers" Then Rows(R + 1).Insert
  Next R
End Sub

此函数从最后一行开始,返回到第一行,在包含列A上所有客户的每个单元格后插入一个空行:

Sub InsertRowsBelowAllCustomers()
  Dim R As Integer
  For R = UsedRange.Rows.Count To 1 Step -1
    If Cells(R, 1) = "All Customers" Then Rows(R + 1).Insert
  Next R
End Sub

类似这样的代码是有效的,可以避免循环

它加粗并增加整行文本的字体大小,正如Tim指出的那样,您应该指定是否仅指单元格 它在匹配项下面添加一个空行 代码


类似这样的代码是有效的,可以避免循环

它加粗并增加整行文本的字体大小,正如Tim指出的那样,您应该指定是否仅指单元格 它在匹配项下面添加一个空行 代码


错误是因为工作表未在使用范围内指定。 我稍微修改了代码,文本位于AJ列,并在单元格上方插入了一行

Dim R As Integer

For R = ActiveSheet.UsedRange.Rows.Count To 1 Step -1

  If Range("AJ" & R) = "Combo" Then Rows(R).Insert

Next R

错误是因为工作表未在使用范围内指定。 我稍微修改了代码,文本位于AJ列,并在单元格上方插入了一行

Dim R As Integer

For R = ActiveSheet.UsedRange.Rows.Count To 1 Step -1

  If Range("AJ" & R) = "Combo" Then Rows(R).Insert

Next R

你应该发布你尝试过的coce,描述你遇到的错误,或者描述它不起作用的方式。蒂姆,谢谢你的留言。我试图从另一个源代码中使用的代码并不是我试图使用它的目的。所以,基本上我什么都没有。为了避免任何事情过于复杂化,从零开始解释手头的任务似乎是最好的选择,而不是发布一些根本不适用于我想要如何使用它的随机代码。是所有客户都是你想要的单元格的唯一内容,还是它是更大文本的一部分?它是否出现在特定的列中?如果找到,是整行加粗,还是只有一个单元格?所有客户是单元格中唯一的内容。它只出现在A列中。如果找到,最好将整行高亮显示并用粗体字显示。您应该发布您尝试过的coce,描述您遇到的错误,或者描述它不起作用的方式。谢谢您的提示。我试图从另一个源代码中使用的代码并不是我试图使用它的目的。所以,基本上我什么都没有。为了避免任何事情过于复杂化,从零开始解释手头的任务似乎是最好的选择,而不是发布一些根本不适用于我想要如何使用它的随机代码。是所有客户都是你想要的单元格的唯一内容,还是它是更大文本的一部分?它是否出现在特定的列中?如果找到,是整行加粗,还是只有一个单元格?所有客户是单元格中唯一的内容。它只出现在A列中。如果找到,最好将整行高亮显示并以粗体字体显示。我尝试使用您提供的代码,它返回运行时错误424:Object Required。当我运行debug时,它会高亮显示第3行。我应该使用usedrange.rows.count以外的其他工具吗?我尝试了,它对我有效,既可以从VBA编辑器运行它,也可以通过单击工作表上的按钮。你是怎么运作的?丢失的东西是什么?当您得到错误信息时,您可以通过单击调试按钮来找到它
年龄,然后在当前行中选择一个变量,然后按Shift+F9。如果选择UsedRange并按Shif+F9,则值字段应显示为空。如果它显示错误消息,那么这就是问题所在。如果没有值,则选择UsedRange.Rows并按Shift+F9等进行尝试。当我单击调试选项并执行Shift+F9时,它会显示一条消息,说明未选择任何监视表达式。要运行,我进入查看选项卡、宏、查看宏,然后从那里运行。当VBA用完时,我也会得到同样的结果。我已经使用了brettdj的代码,到目前为止它是有效的。感谢您在这方面花费的时间,现在我有了一个有效的解决方案,我不希望您在这方面再浪费时间。我尝试使用您提供的代码,它返回运行时错误424:Object Required。当我运行debug时,它会高亮显示第3行。我应该使用usedrange.rows.count以外的其他工具吗?我尝试了,它对我有效,既可以从VBA编辑器运行它,也可以通过单击工作表上的按钮。你是怎么运作的?丢失的东西是什么?您可以在收到错误消息时单击“调试”按钮,然后在当前行中选择一个变量,然后按Shift+F9来找到它。如果选择UsedRange并按Shif+F9,则值字段应显示为空。如果它显示错误消息,那么这就是问题所在。如果没有值,则选择UsedRange.Rows并按Shift+F9等进行尝试。当我单击调试选项并执行Shift+F9时,它会显示一条消息,说明未选择任何监视表达式。要运行,我进入查看选项卡、宏、查看宏,然后从那里运行。当VBA用完时,我也会得到同样的结果。我已经使用了brettdj的代码,到目前为止它是有效的。感谢您在这方面花费的时间,现在我有了一个有效的解决方案,我不希望您在这方面再浪费时间。当我尝试运行您的代码块时,它确实在找到第一个All Customers值后插入了一个空行。在我正在测试的这个特定示例电子表格中,总共有6个单元格和所有客户。您能否指出如何调整此代码以识别工作表中所有客户的每个实例的正确方向?如果只运行一次,那么它将只找到第一个实例。如果要多次运行它,它将自动搜索下一次出现的所有客户,因为它被设置为ActiveCell。你可以将代码放入for循环和循环中6次。这个解决方案对我来说效果最好。但是,我必须按住F5键才能在20000多行中循环。非常感谢。当我试图运行您的代码块时,它确实在找到第一个All Customers值后插入了一个空行。在我正在测试的这个特定示例电子表格中,总共有6个单元格和所有客户。您能否指出如何调整此代码以识别工作表中所有客户的每个实例的正确方向?如果只运行一次,那么它将只找到第一个实例。如果要多次运行它,它将自动搜索下一次出现的所有客户,因为它被设置为ActiveCell。你可以将代码放入for循环和循环中6次。这个解决方案对我来说效果最好。但是,我必须按住F5键才能在20000多行中循环。非常感谢。这很好用,谢谢!我只需要弄清楚如何将高亮显示添加到整行。这对我来说应该是一个很好的任务,因为我至少有一个工作解决方案,可以覆盖98%的所需内容。要突出显示整行更改。Font.Bold=True to.EntireRow.Font.Bold=True,如果需要,字体大小也一样。这非常有效,谢谢!我只需要弄清楚如何将高亮显示添加到整行。这对我来说应该是一个很好的任务,因为我至少有一个工作解决方案,可以覆盖所需的98%。要突出显示整行更改,Font.Bold=True到.EntireRow.Font.Bold=True,如果需要,字体大小也一样