我正在开发一个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“程序员”,并通过这里使用论坛获得了这一点。
希望我很清楚 - 感谢任何意见。
答案 0 :(得分:2)
循环浏览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
答案 1 :(得分:2)
@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"
,仅在其上运行。