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
我已经编写了下面的代码,但是我无法通过要插入可变行数的行。编译器尖叫说它需要一个 "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 math3 + Anfangsjahr2 - Anfangsjahr1
补.Rows("3:" & 3 + Anfangsjahr2 - Anfangsjahr1).Insert