VBA添加具有相同名称的第二个工作表

时间:2018-04-23 10:24:03

标签: excel vba

我有一个CommandButton,它打开一个UserForm并创建一个名为ComboBox Value的复制Sheet。

这是我的代码:

Private Sub CommandButton1_Click()
    [UserForm1].Show                                       ' Open UserForm
End Sub

Private Sub CommandButton2_Click()
    Dim ws As Worksheet

    ActiveWorkbook.Sheets("Sheet1").Visible = True         ' Unhide Sheet
    Sheets("Sheet1").Copy _
    Before:=ActiveWorkbook.Sheets("Sheet1")                ' Copy Sheet
    Set ws = ActiveSheet
    ws.Name = ComboBox1.Value                              ' Name Sheet

    [UserForm1].Hide                                       ' Close UserForm
    ActiveWorkbook.Sheets("Sheet1").Visible = False        ' Hide Sheet again

End sub

现在我的问题是,如果有两台名为“Machine Type 1”的机器,则Excel会出现错误。那么我需要在我的代码中进行哪些更改,第二张表将命名为例如“机器类型1(2)?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你可以试试这个

Private Sub CommandButton1_Click()
    If IsSheetThere(ComboBox1.Value) Then 'if some sheet with chosen name already there
        Sheets(ComboBox1.Value).Copy Before:=Sheets(10) ' copy the existing sheet
        With ActiveSheet 'reference just copied sheet
            .UsedRange.Clear 'clear its content
            Sheets("Sheet1").UsedRange.Copy ActiveSheet.Range("A1") ' copy Sheet1 content and paste into it
        End With
    Else 'otherwise
        Sheets("Sheet1").Copy Before:=Sheets(Sheets.Count) ' make a copy of "Sheet1" sheet
        ActiveSheet.Name = ComboBox1.Value 'and rename it as per chosen name
    End If
    Me.Hide
End Sub

Function IsSheetThere(shtName As String) As Boolean
    On Error Resume Next
    IsSheetThere = Not Sheets(shtName) Is Nothing
End Function

代码行:

Sheets(ComboBox1.Value).Copy Before:=Sheets(10) ' copy the existing sheet

让Excel承担以某种方式“计算”已使用所选名称的现有工作表数量的负担,并适当地命名新工作表

答案 1 :(得分:0)

技术上这不是这个问题的答案...... 但它更好因为它可以帮助您解决这个问题以及许多其他编码任务自己的的。

有一种简单的方法可以为大多数基本任务创建VBA代码。

如果Excel可以执行某些操作,您希望能够以编程方式执行此操作,只需记录宏自己执行操作,然后查看代码 Excel生成的。

我的记忆很糟糕,我记不起昨天用的命令了。因此,对我来说,不仅让我自己弄清楚,而且让我自己弄清楚,这不仅更快,也更少令人沮丧,但我越经常这样做,我就会越快学习(不要求别人在基本问题上为我做思考)。

事实上,我猜大多数资深VBA程序员至少部分通过分析录制的宏来学习。我知道我做了。

img