Excel VBA:如何替换导入的工作表而不是“之后复制”?

问题描述 投票:1回答:1

我有以下代码,应该将表单“ update”导入另一个工作簿。然后将此工作表复制到工作表“ sheet2”之后的工作簿(我想将东西导入到该工作簿中):

Option Explicit
 Public Sub WOBImport()
        Dim sFileName As String
        Dim targetSht As Worksheet

        Set targetSht = ActiveWorkbook.Worksheets("Sheet2")


        sFileName = Application.GetOpenFilename("Excel Files (*.xlsm), *.xlsx")

        Do While Len(sFileName) > 0
            If sFileName <> targetSht.Parent.Name Then
                On Error Resume Next
                With Workbooks.Open(sFileName)
                    .Sheets("update").Copy After:=targetSht
                    .Close False
                End With
                On Error GoTo 0
            End If
            sFileName = ""
        Loop
    End Sub

到目前为止一切顺利。

而不是在“ Sheet2”之后粘贴工作表“ update”,如何用工作表“ update” 替换工作表“ Sheet2”。 ?

非常感谢您

Seb

excel vba excel-vba
1个回答
0
投票

我认为这段代码几乎可以完成您想要的事情。它会暂时以“更新”的名称重命名和现有工作表(而不是直接删除它,以防它是工作簿中的唯一工作表),在工作簿的末尾添加新的“更新”,然后删除以前的工作表,如果有以前的。请尝试。

Public Sub WOBImport()

    Const TempTabName As String = "X-Update"
    Dim Wb          As Workbook             ' activeworkbook
    Dim sFileName   As Variant
    Dim TargetSht   As Worksheet

    sFileName = Application.GetOpenFilename("Excel Files (*.xlsm), *.xlsx")
    If Len(sFileName) Then
        Set Wb = ActiveWorkbook
        If sFileName = Wb.Name Then Exit Sub

        On Error Resume Next
        Set TargetSht = Wb.Worksheets("Update")
        If Err = 0 Then TargetSht.Name = TempTabName

        With Application
            .ScreenUpdating = False
            .DisplayAlerts = False
        End With

        On Error Resume Next
        With Workbooks.Open(sFileName)
            .Sheets("Update").Copy After:=Wb.Sheets(Wb.Sheets.Count)
            .Close False
        End With

        Wb.Worksheets(TempTabName).Delete
        With Application
            .ScreenUpdating = True
            .DisplayAlerts = True
        End With
    End If
    Err.Clear
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.