VBA Excel如何插入预定的标题行

我很难find我想做的事情,因为我很难把我正在努力做的事情变成文字。

基本上,我想要做的是采取一组头(可能10-12列长),并在macros,我想粘贴这些头(replace)表1行1中的当前标头。我目前已经设置的东西是我的数据正在插入每张工作表的第2行开始生成该工作表时。 我有一个写入的macros,将表1的第1行复制到每个现有的表中,但是,我不需要手动插入第一个表头(它应该是macros的一部分)。

所以我想我需要帮助,如何在表1的第一行(我想把实际的头名写入macros代码)插入一行预定的头。

编辑:

Application.CutCopyMode = True Dim Counter As Long Counter = Sheets.Count For i = 1 To Counter Sheets("Sheet1").Cells(1, 1).EntireRow.Copy Sheets(i).Cells(1, 1).PasteSpecial Next i Application.CutCopyMode = False 

这是我有复制代码,这工作正常。 我想要的是能够把一行代码,基本上说'粘贴“标题1”“标题2”“标题3”等'到行1表1的相应列。所以我有我的标题名称挑出来,但我想把它们直接放入macros代码。 所以如果我的头文件是“应用香蕉生菜番茄”,我想把这些文字放到macros代码中,然后粘贴在上面列出的复制粘贴代码之前的第1行1中。

由于您提前知道您的标题,因此可以在下面将它们切换出来。 这应该把你input的标题,并将其粘贴到所有表。 注意:这也将删除任何表中的行1中的任何信息,所以如果你不希望发生这种情况,评论/删除行。

 Sub AddHeaders() Dim headers() As Variant Dim ws As Worksheet Dim wb As Workbook Application.ScreenUpdating = False 'turn this off for the macro to run a little faster Set wb = ActiveWorkbook headers() = Array("Superhero", "City", "State", "Country", "Publisher", "Demographics", _ "Planet", "Flying Abilities", "Vehicle", "Sidekick", "Powers") For Each ws In wb.Sheets With ws .Rows(1).Value = "" 'This will clear out row 1 For i = LBound(headers()) To UBound(headers()) .Cells(1, 1 + i).Value = headers(i) Next i .Rows(1).Font.Bold = True End With Next ws Application.ScreenUpdating = True 'turn it back on MsgBox ("Done!") End Sub 

你也可以使用它作为一般的macros – 它可以防止需要复制/粘贴(这是一个很好的事情,学习VBA,以避免复制/粘贴),你也可以创build一个dynamic的头数组,如果你的头经常改变。 让我知道,如果这是在跟踪你正在寻找什么!

编辑:关于数组的说明。 默认情况下,有5个项目的数组将被索引从0到4.即如果你做这个循环(psuedocode):

 myArray() = Array("Batman","Superman","Catwoman","Rorschach") for i = 1 to uBound(myArray()) debug.print myArray(i) Next i 

它只会打印“超人”,“猫女”,“罗夏”。 这是因为“蝙蝠侠”作为第一个入口是0指数。 简单地用这个for i = lBound(myArray()) to uBound(myArray())行replacefor for i = lBound(myArray()) to uBound(myArray())从第一个到最后一个入口。 或者,你可以使用for i = 0 to uBound(...

但是你会注意到在这个循环中,我有.Cells(1, 1+i)... 这是因为我的循环是从0开始,所以我不得不加1到我所以它会在第二列开始。

不喜欢那个基于零的数组(从0开始)? 你可以从1开始! 怎么样? 只要做Dim myArray(1 to 10) 。 这将创build一个数组,但从1开始。然后,这个例子将打印所有四个人:

 for i = 1 to uBound(myArray()) debug.print myArray(i) next i 

一个提示,循环整个数组,只是使用分别为第一个值和最后一个值的lBound(array())uBound(array()) 。 这也将允许你做.Cells(1,i).Value ... ,因为我从1开始。这是否有意义?

假设您的标题在Sheet1上的A1:J1Sheet1 ,可以使用以下内容将它们复制到Sheet2上的B1:K1

 Sheets("Sheet1").Range("A1:J1").Copy Sheets("Sheet2").Range("B1:K1") 

为了自动将Sheet1的标题复制到所有其他工作表,请使用:

 srcSheet = "Sheet1" For dst = 1 To Sheets.Count If Sheets(dst).Name <> srcSheet Then Sheets(srcSheet).Rows("1:1").Copy Sheets(dst).Range("A1").Select ActiveSheet.Paste End If Next 

这段代码迭代了除srcSheet之外的所有表单,并将第一行从srcSheet到它们