Excel VBA在指定范围内插入行[已解决]
我正在用Excel 2019编写一个VBA脚本,该脚本将生成一个仪表板。我的程序的第一步是从一个命名(Excel VBA在指定范围内插入行[已解决],excel,vba,Excel,Vba,我正在用Excel 2019编写一个VBA脚本,该脚本将生成一个仪表板。我的程序的第一步是从一个命名(DonneesBrutes)范围中提取数据,用一些过滤器将它们复制到另一个范围(donneesanees) 其工作方式如下: 它测试数据是否与过滤器对应 它将线复制到范围内 它将在复制的行之后的donneesannes中插入一行 但我的问题是:这些行实际上并没有插入,而且DonneesAnnees仍然有3行。这会导致基于此范围的公式出现问题(使用名称DonneesAnnees编写,因为根据过
DonneesBrutes
)范围中提取数据,用一些过滤器将它们复制到另一个范围(donneesanees
)
其工作方式如下:
- 它测试数据是否与过滤器对应
- 它将线复制到范围内
- 它将在复制的行之后的
中插入一行donneesannes
DonneesAnnees
仍然有3行。这会导致基于此范围的公式出现问题(使用名称DonneesAnnees
编写,因为根据过滤器的不同,行数不同,并且文档不断填充)
这是我的密码:
For Each ligne In Worksheets(1).Range("DonneesBrutes").Rows
sDateLue = ligne.Cells(1, 3).Text 'Reading the different data that will be filtred
intervenantLu = ligne.Cells(1, 10).Text
coteLu = ligne.Cells(1, 8).Text
If sDateLue <> vbNullString Then
sDateLue = Split(sDateLue, "/")(2)
dateLue = CInt(sDateLue)
If dateLue = consAnnee And UCase(intervenantLu) Like UCase(sConsTete) And coteLu Like sConsCote Then
ligne.Copy Destination:=Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees").Rows(ligneActive)
ligneActive = ligneActive + 1
Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees").Rows(ligneActive).Insert
End If
End If
Next
我试着让DonneesAnnees2行、3行或4行,但不起作用
编辑:我试过这个:
'First :
Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees") = Union(Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees"), Worksheets("GRAPHIQUE_DATA").Range(Worksheets("GRAPHIQUE_DATA").Cells(ligneActive + 1, 1), Worksheets("GRAPHIQUE_DATA").Cells(ligneActive + 1, 8)))
'Second : (returns a compilation error)
Set Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees") = Union(Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees"), Worksheets("GRAPHIQUE_DATA").Range(Worksheets("GRAPHIQUE_DATA").Cells(ligneActive + 1, 1), Worksheets("GRAPHIQUE_DATA").Cells(ligneActive + 1, 8)))
'Third : (also doesn't compile)
Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees").Set(Union(Worksheets("GRAPHIQUE_DATA").Range("DonneesAnnees"), Worksheets("GRAPHIQUE_DATA").Range(Worksheets("GRAPHIQUE_DATA").Cells(ligneActive + 1, 1), Worksheets("GRAPHIQUE_DATA").Cells(ligneActive + 1, 8))))
编辑:
以下是我使用的解决方案:
Names.Item("DonneesAnnees").RefersTo = Names.Item("DonneesAnnees").RefersToRange.Resize(ligneActive, 13)
请参阅.Union
方法。试着像这样使用它Set YourNamedRange=Union(YourNamedRange,YourRangeToAdd)
谢谢,但我尝试在行首使用Set
或在行尾添加。Set
,但它返回了一个错误。所以我尝试了以下方法:工作表(“GRAPHIQUE_数据”).Range(“Donneesannes”)=(Union(工作表(“GRAPHIQUE_数据”).Range(“Donneesanes”)、工作表(“GRAPHIQUE_数据”).Range(工作表(“GRAPHIQUE_数据”).Cells(ligneActive+1,1)、工作表(“GRAPHIQUE_数据”).Cells(ligneActive+1,8))
但仍然不起作用错误消息是什么?
Names.Item("DonneesAnnees").RefersTo = Names.Item("DonneesAnnees").RefersToRange.Resize(ligneActive, 13)