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

时间:2016-07-20 20:02:48

标签: excel vba excel-vba macros

我正在开发一个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“程序员”,并通过这里使用论坛获得了这一点。

希望我很清楚 - 感谢任何意见。

2 个答案:

答案 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",仅在其上运行。