Excel VBA – 添加新的文本和格式的列到多个工作表

我正在一个Excelmacros(button),将添加到多个工作表中的相同点的列。 此外,此列必须具有通过对话框input的列标题。

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

这是我到目前为止:

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),并将通过对话框指定的标题名称input到单元格F5,同时将列的格式从列立即复制到右侧。 然而,所有它为Sheet2(和所有其他人,但为了简洁而删除它们)添加到列中,而不从右侧复制格式或添加通过对话框指定的文本。

初学VBA的“程序员”,并通过在这里使用论坛得到了这一点。

希望我很清楚 – 感谢您的任何意见。

只需循环Array("Sheet1", "Sheet2") 。 将Type:=2参数添加到InputBox将确保myValue将始终是一个string。 如果用户取消了InputBox,那么myValue = ""

 Sub CommandButton2_Click() Dim ws Dim myValue As Variant myValue = Application.InputBox(Prompt:="Enter Thought Leadership Title", Title:="New Thought Leadership", Default:="XXXXX", Type:=2) If myValue <> "" Then For Each ws In Array("Sheet1", "Sheet2") With ws .Columns("F:F").Insert Shift:=xlToRight .Range("F5").Value = myValue End With Next End If End Sub 

@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 

我试图尽可能保持它类似于你的代码,同时避免。select(如我在下面的评论中提到OP)。

注意:这将遍历工作簿中的所有工作表。 您可以添加一行If worksheet.name = "Sheet1" or worksheet.name = "Sheet2"只能在这些上运行。