我工作的一个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“程序员”和已经远远经过这里使用的论坛得到了这一点。
但愿我是清楚的 - 感谢任何输入。
仅通过循环Array("Sheet1", "Sheet2")
添加Type:=2
参数到的InputBox将确保myValue
将永远是一个字符串。 如果用户取消的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"
只在那些运行它。
文章来源: Excel VBA - Add new columns with text and formatting to multiple worksheets