VBA:插入可变行数

VBA: insert a variable number of rows

我已经编写了下面的代码,但是我无法通过要插入可变行数的行。编译器尖叫说它需要一个 "list separator or )" ,其中有一个冒号。但是我找不到其他的写法。请帮忙! =) 因此,有问题的线由两端的两颗星表示。在它上面有一条注释行,我也试过但没有成功。 另外,你能不能解释一下我需要以下命令的目的(它们也在有问题的行中找到):Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

最后,有什么改进代码的建议,s.t,有经验的程序员看了不会晕倒吧? =)

非常感谢您,

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

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

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

我没有完全理解您要到达这里的目的,但存在一些语法问题。

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

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

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

our string "3:"
transition from string to variable &
and our variables and math 3 + Anfangsjahr2 - Anfangsjahr1

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