【问题标题】:Excel VBA - Insert row above specific text and copy formats and formulaExcel VBA - 在特定文本上方插入行并复制格式和公式
【发布时间】:2015-03-04 13:10:08
【问题描述】:

我发现我有类似的问题,但是我找不到包含我的两个查询的 VBA。我对 VBA 相当陌生,因此正在努力将两个代码组合成一个代码:

在包含文本“TTDASHINSERTROW”的行上方插入指定数量的行,并从上面的行复制格式和公式。

我的第一个代码插入了许多行并从上面复制公式,但基于“活动单元格”。

Sub insertRow()

Dim Rng, n As Long, k As Long
Application.ScreenUpdating = False
Rng = InputBox("Enter number of rows required.")
If Rng = "" Then Exit Sub
Range(ActiveCell, ActiveCell.Offset(Val(Rng) - 1, 0)).EntireRow.Insert
'need To know how many formulas To copy down.
'Assumesfrom A over To last entry In row.
k = ActiveCell.Offset(-1, 0).Row
n = Cells(k, 256).End(xlToLeft).Column
Range(Cells(k, 1), Cells(k + Val(Rng), n)).FillDown

End Sub

第二个代码基于对文本“TTDASHINSERTROW”的搜索插入一行。

Sub insertRow()

  Dim c As Range
  For Each c In Range("A:A")
    If c.Value Like "*TTDASHINSERTROW*" Then
        c.Offset(1, 0).EntireRow.Insert
    End If
  Next c

End Sub

任何将这些组合成单个代码的帮助,该代码可以在指定文本上方插入指定数量的行并复制格式和公式,我们将不胜感激。

更新

我想出了以下代码,它允许用户在运行宏时通过弹出窗口添加指定数量的行。该代码仍然需要一个活动单元格并从该单元格上方复制公式。

Sub InsertRow()

Dim d As Integer
d = Range("A:A").End(xlDown).Row
Dim c As Range
For i = d To 1 Step -1
If Cells(i, 1).Value Like "TTDASHINSERTROW" Then

Dim Rng, n As Long, k As Long
Application.ScreenUpdating = False
Rng = InputBox("Enter number of rows required.")
If Rng = "" Then Exit Sub

Range(ActiveCell, ActiveCell.Offset(Val(Rng) - 1, 0)).EntireRow.Insert
'need To know how many formulas To copy down.
'Assumesfrom A over To last entry In row.

k = ActiveCell.Offset(-1, 0).Row
n = Cells(k, 256).End(xlToLeft).Column
Range(Cells(k, 1), Cells(k + Val(Rng), n)).FillDown


End If
Next
End Sub

除了引用活动单元格的代码的第二部分之外,它是否可以找到带有“TTDASHINSERTROW”的单元格并从该行上方复制公式和格式?

很遗憾,我没有足够的代表来附上屏幕截图。

【问题讨论】:

  • 欢迎来到 Stackoverflow。我对你的问题有一种似曾相识的感觉......
  • @bonCodigo:这是否意味着那个人在问这个问题之前看起来不太好?
  • @JLILIAman,宾果游戏!但是,鉴于1. OP 发布了他/她尝试过的代码,2. 表示I see there are similar questions to mine however I am unable to find... 3. 这就是他的详细信息,我会犹豫行使严格的投票权 /她在 SO 的第一篇文章。
  • 我已经搜索过了。真的找不到任何不引用活动单元格的东西。我试过自己创建它,但没有运气。
  • @Justin,如果您在相邻的列和行数中有那个特定的字符串怎么办?这是否意味着您希望该函数向上、向下、向右和向左插入行?

标签: vba excel


【解决方案1】:
Sub insertRow()
Dim Rng As Long
Rng = InputBox("Enter number of rows required.")
If Rng = 0 Then Exit Sub
Application.ScreenUpdating = False 'this is unnecessary unless you often get seizures
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'tells the number of rows used
LastColumn = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 'tells the number of columns used

  For i = 1 To LastRow 'for each row
    If Cells(i, 1).Value Like "*TTDASHINSERTROW*" Then 'if Range("A"&i) is like your string
        For j = 1 To Rng
            Rows(i).EntireRow.Insert
            Range(Cells(i, 1), Cells(i + 1, LastColumn)).FillUp
        Next
    End If
  Next

Application.ScreenUpdating = True
End Sub

【讨论】:

  • 此代码为应用程序框中输入的每 1 行添加 48 个新行。 (即输入 1 = 48 个新行,输入 2 = 96 个新行等)。对原始问题的更新几乎是正确的,但是只需要调整以将“ActiveCell”更改为引用包含“TTDASHINSERTROW”的任何单元格
  • 我假设您的文件中有 48 个“TTDASHINSERTROW”实例。您的解决方案首先找到它然后询问数字,我的输入然后对所有实例执行相同的过程。你忘了详细说明你的规格,它是 GIGO。规范后,您的案例的正确子将添加 1. 允许屏幕更新 2. 选择 Cells(i,1) 3. 要求 Rng 4. 在 For j =... 行之前禁止屏幕更新。
【解决方案2】:

已解决。

我需要对我的代码做的只是包含一个“查找”函数,该函数定位包含“TTDASHINSERTROW”的单元格,从而使该单元格成为活动单元格。

Sub InsertRow()


Cells.Find(What:="TTDASHINSERTROW", After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

Dim d As Integer
d = Range("A:A").End(xlDown).Row
Dim c As Range
For i = d To 1 Step -1
If Cells(i, 1).Value Like "TTDASHINSERTROW" Then

Dim Rng, n As Long, k As Long
Application.ScreenUpdating = False
Rng = InputBox("Enter number of rows required.")
If Rng = "" Then Exit Sub

Range(ActiveCell, ActiveCell.Offset(Val(Rng) - 1, 0)).EntireRow.Insert
'need To know how many formulas To copy down.
'Assumesfrom A over To last entry In row.

k = ActiveCell.Offset(-1, 0).Row
n = Cells(k, 256).End(xlToLeft).Column
Range(Cells(k, 1), Cells(k + Val(Rng), n)).FillDown


End If
Next
End Sub

感谢大家对此的帮助!

【讨论】:

  • “在上方插入行”是新的“在下方插入行”。确保您的字符串包含预期的通配符,您已经更改了那个。
  • @user3819867 不确定我是否听懂了你的意思?我不熟悉通配符。正如我所拥有的那样,代码可以工作,但是如果您发现我没有发现的错误,我想了解您的评论。
  • 首先:如果您对每个事件进行评估,您可能希望使用类似于Resume Next 的东西来代替Exit Sub,这会完全放弃您的流程,而不是进入下一个流程细绳。字符串中的“*”表示该给定位置可以有任意数量的字符,例如“NDKJTTDASHINSERTROWNSGRJL”。
  • @user3819867 感谢您为我解决这个问题。现在将其标记为正确答案并关闭查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多