Excel VBA-将带有文本和格式的新列添加到多个工作表中

Excel VBA-将带有文本和格式的新列添加到多个工作表中,vba,excel,macros,Vba,Excel,Macros,我正在处理一个Excel宏(按钮),它将在多个工作表的同一位置添加一列。此外,此列必须具有通过对话框输入的列标题 每个工作表都包含一个格式完全相同的表-唯一的区别是工作表名称 以下是我到目前为止的情况: Sub CommandButton2_Click() Sheets(Array("Sheet1", "Sheet2")).Select Sheets("Sheet2").Activate Columns("F:F").Select Selection.Insert Shift:=xlToRig

我正在处理一个Excel宏(按钮),它将在多个工作表的同一位置添加一列。此外,此列必须具有通过对话框输入的列标题

每个工作表都包含一个格式完全相同的表-唯一的区别是工作表名称

以下是我到目前为止的情况:

Sub CommandButton2_Click()

Sheets(Array("Sheet1", "Sheet2")).Select
Sheets("Sheet2").Activate
Columns("F:F").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromRightOrBelow

Dim myValue As Variant

myValue = InputBox("Enter Thought Leadership Title", "New Thought    Leadership", "XXXXX")

Sheets(Array("Sheet1", "Sheet2”)).Select
Range("F5").Value = myValue

End Sub
这正是我想要的“Sheet1”-添加一列(F)并将通过对话框指定的标题名输入到单元格F5中,同时将格式从列立即复制到右侧。但是,它对Sheet2(以及所有其他文件,但为了简洁起见删除了它们)所做的只是将其添加到列中,而无需从右侧复制格式或添加通过对话框指定的文本

初学者VBA“程序员”,并通过使用这里的论坛取得了这一成就


希望我说得很清楚-谢谢你的任何意见。

只需在
数组(“Sheet1”、“Sheet2”)中循环即可。
。将
Type:=2
参数添加到输入框将确保
myValue
始终为字符串。如果用户取消输入框,则
myValue=”“

子命令按钮2\u单击()
昏暗的天气
Dim myValue作为变量
myValue=Application.InputBox(提示:=“输入思维领导力标题”,标题:=“新思维领导力”,默认值:=“XXXXX”,类型:=2)
如果myValue为“”,则
对于阵列中的每个ws(“Sheet1”、“Sheet2”)
与ws
.列(“F:F”)。插入移位:=xlToRight
.Range(“F5”).Value=myValue
以
下一个
如果结束
端接头

只需通过
数组(“Sheet1”、“Sheet2”)
循环即可。将
Type:=2
参数添加到输入框将确保
myValue
始终为字符串。如果用户取消输入框,则
myValue=”“

子命令按钮2\u单击()
昏暗的天气
Dim myValue作为变量
myValue=Application.InputBox(提示:=“输入思维领导力标题”,标题:=“新思维领导力”,默认值:=“XXXXX”,类型:=2)
如果myValue为“”,则
对于阵列中的每个ws(“Sheet1”、“Sheet2”)
与ws
.列(“F:F”)。插入移位:=xlToRight
.Range(“F5”).Value=myValue
以
下一个
如果结束
端接头

替代@ThomasInzina的方法是:

Sub commandButton2_Click_Test()
Dim myValue As Variant

For Each Worksheet In ActiveWorkbook.Worksheets
    With Worksheet
        .Range("F:F").EntireColumn.Insert shift:=xlToRight, copyOrigin:=xlFormatFromRightOrBelow
        myValue = InputBox("Enter Thought Leadership Title", "New Thought    Leadership", "XXXXX")

    End With
Next Worksheet
Worksheets("Sheet1").Range("F5").Value = myValue ' I'm not sure where you wanted this,
Worksheets("Sheet2").Range("F5").Value = myvalue ' or what it does, so tweak as necessary.
End Sub
我尽量使它与您的代码相似,同时避免使用
。选择
(如我在下面的评论中所述)


注意:这将在工作簿中的所有工作表中循环。如果sheetwork.name=“Sheet1”或sheetwork.name=“Sheet2”
仅在这些工作表上运行,则可以添加一行

替代@ThomasInzina的方法是:

Sub commandButton2_Click_Test()
Dim myValue As Variant

For Each Worksheet In ActiveWorkbook.Worksheets
    With Worksheet
        .Range("F:F").EntireColumn.Insert shift:=xlToRight, copyOrigin:=xlFormatFromRightOrBelow
        myValue = InputBox("Enter Thought Leadership Title", "New Thought    Leadership", "XXXXX")

    End With
Next Worksheet
Worksheets("Sheet1").Range("F5").Value = myValue ' I'm not sure where you wanted this,
Worksheets("Sheet2").Range("F5").Value = myvalue ' or what it does, so tweak as necessary.
End Sub
我尽量使它与您的代码相似,同时避免使用
。选择
(如我在下面的评论中所述)


注意:这将在工作簿中的所有工作表中循环。如果worksheet.name=“Sheet1”或worksheet.name=“Sheet2”
仅在这些工作表上运行,则可以添加一行

您可以尝试在工作表数组
工作表(数组(0))中循环。。。和工作表(数组(1))
如果有两个以上的工作表,请使用循环,如i=0到NumberOfWorksheets的
这是一个很好的例子,说明了为什么应该这样做。我强烈建议您通读一遍,并将其应用到宏中。如果在那之后,您被卡住/出现错误,请告诉我。您可以尝试通过工作表数组
工作表(数组(0))。。。和工作表(数组(1))
如果有两个以上的工作表,请使用循环,如i=0到NumberOfWorksheets的
这是一个很好的例子,说明了为什么应该这样做。我强烈建议您通读一遍,并将其应用到宏中。如果在此之后,您遇到了问题/出现了错误,请告诉我。(a)我认为OP希望每张工作表上的标题都相同,因此您应该将myValue的设置移到循环之外。(b) 在量子计算中,工作表名称可以同时为“Sheet1”和“Sheet2”之前,每个工作表名称都会通过建议的If语句中的两个测试之一。我认为,如果worksheet.name=“Sheet1”或worksheet.name=“Sheet2”
@YowE3K,那么它应该是
——这很好!谢谢这些,我会在里面编辑的。(我从头开始就解决了这个问题,如果工作表名称是…
,我想不起执行
的最佳方法,所以谢谢!)您将错误的内容移出了循环。您将标题的设置移出了,但它应该在循环中完成,而您将InputBox留在了循环中,但只应该执行一次。我会编辑你的答案。(a)我认为OP希望每张纸上都有相同的标题,所以你应该将myValue的设置移到循环之外。(b) 在量子计算中,工作表名称可以同时为“Sheet1”和“Sheet2”之前,每个工作表名称都会通过建议的If语句中的两个测试之一。我认为,如果worksheet.name=“Sheet1”或worksheet.name=“Sheet2”
@YowE3K,那么它应该是
——这很好!谢谢这些,我会在里面编辑的。(我从头开始就解决了这个问题,如果工作表名称是…
,我想不起执行
的最佳方法,所以谢谢!)您将错误的内容移出了循环。您将标题的设置移出了,但它应该在循环中完成,而您将InputBox留在了循环中,但只应该执行一次。我会编辑你的答案。