VBA:插入可变数量的行

时间:2016-02-19 13:45:49

标签: excel vba insert rows

我已经编写了下面的代码,但我无法通过我想要插入可变行数的行。编译器尖叫它需要一个“列表分隔符或”,其中有一个冒号。但我找不到其他的写作方式。请帮忙! =) 因此,有问题的线由两端的两颗星表示。就在它上面有一条评论线,我也试过没有成功。 另外,你会如此善良并向我解释我需要以下命令(它们也存在于有问题的行中):Shift:= xlDown,CopyOrigin:= xlFormatFromLeftOrAbove

最后,关于我如何改进代码的任何建议,经验丰富的程序员在阅读时都不会晕倒? =)

非常感谢你,

Option Explicit
Dim ws As Worksheet
Dim Blatt1, Blatt2 As String
Dim Anfangsjahr1, Anfangsjahr2 As Integer
Dim reporting_Jahr1, reporting_Jahr2 As String

Public Sub Dreiecke()

For Each ws In Worksheets

    If ws.Name Like "RVA_H*" Then

            If IsEmpty(Blatt1) = False Then
            Blatt2 = ws.Name
            Anfangsjahr2 = ws.Range("A3").Value
            reporting_Jahr2 = ws.Range("A1").Value
            Else
            Blatt1 = ws.Name
            Anfangsjahr1 = ws.Cells(3, 1).Value
            reporting_Jahr1 = ws.Cells(1, 1).Value
            GoTo X
            End If
    Else: GoTo X
    End If

    If reporting_Jahr1 <> reporting_Jahr2 Then
     MsgBox "Dreiecke von unterschiedlichen Jahren"
     Exit Sub

    ElseIf reporting_Jahr1 = reporting_Jahr2 Then
        If Anfangsjahr1 < Anfangsjahr2 Then

        'Sheets(Blatt2).Rows(3:3+Anfangsjahr2-Anfangsjahr1).EntireRow.Insert
        **Worksheets(Blatt2).Rows(3: 3 + Anfangsjahr2 - Anfangsjahr1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove**

    ElseIf Anfangsjahr1 > Anfangsjahr2 Then
        Worksheets(Blatt1).Rows(3:3+Anfangsjahr1-Anfangsjahr2).Insert Shift:=xlDown

    ElseIf Anfangsjahr1 = Anfangsjahr2 Then GoTo X
    End If


    End If
X: Next ws



End Sub

2 个答案:

答案 0 :(得分:1)

我并不完全按照您要访问的内容进行操作,但存在一些语法问题。

不确定这是否是您想要的,但它修复了语法。你是否愿意

Worksheets(Blatt2).Rows("3:" & 3 + Anfangsjahr2 - Anfangsjahr1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

编辑在下面的评论中扩展OP的问题 双引号用于包含字符串。因此,通常在引用行时,可以说.Rows("3:9").Insert这样就可以将要处理的行作为字符串提供。
在你的情况下,你想动态提供最后一行,所以我们有

  
    

我们的字符串"3:"
    从字符串转换为变量&
    以及我们的变量和数学3 + Anfangsjahr2 - Anfangsjahr1

  

弥补.Rows("3:" & 3 + Anfangsjahr2 - Anfangsjahr1).Insert

答案 1 :(得分:0)

您需要将行号放在双引号中,然后使用&符号将变量连接到字符串:

Worksheets(Blatt2).Rows("3:" & 3 + Anfangsjahr2 - Anfangsjahr1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove