Excel 导入图纸更改图纸名称

Excel 导入图纸更改图纸名称,excel,vba,rename,Excel,Vba,Rename,我正在使用此VBA从不同文件导入大量图纸名: Sub ImportSheets() Dim sPath As String Dim sFname As String Dim wBk As Workbook Dim wSht As Variant Application.EnableEvents = False Application.ScreenUpdating = False sPath = InputBox("Enter a fu

我正在使用此VBA从不同文件导入大量图纸名:

Sub ImportSheets()

    Dim sPath As String
    Dim sFname As String
    Dim wBk As Workbook
    Dim wSht As Variant


    Application.EnableEvents = False
    Application.ScreenUpdating = False
    sPath = InputBox("Enter a full path to workbooks")
    ChDir sPath
    sFname = InputBox("Enter a filename pattern")
    sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal)
    wSht = InputBox("Enter a worksheet name to copy")
    Do Until sFname = ""
        Set wBk = Workbooks.Open(sFname)
        Windows(sFname).Activate
        Sheets(wSht).Copy After:=ThisWorkbook.Sheets(1)
       ActiveSheet.Name = ActiveSheet.Range("A9")
        wBk.Close False
        sFname = Dir()
    Loop
    ActiveWorkbook.Save
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
现在,net sheetname是A9中写入的任何值,是否有方法可以更改它,以便将工作表重命名为其导入的文件名?
替代的解决方案可能是将其重命名为“导入”和后缀,但我不知道如何添加后缀1-1000 ect

要与Excel文件同名,只需尝试以下操作:

ActiveSheet.Name = wBk.Name

如果要与要从中复制的工作表同名, 这是您需要的代码,而不是
ActiveSheet.Name=ActiveSheet.Range(“A9”)

ActiveSheet.Name = Worksheets(wSht).Name
它将采用完全正确的名称。甚至是
ActiveSheet.Name=wSht
,只要您通过
InputBox
准确地指定它即可


通常,在尝试复制相应的工作表之前,您可以检查它是否存在,并且仅在存在时进行复制。这是一种方法(其他方法请参见下面的链接):

If WorksheetExists(wSht) Then
    Sheets(wSht).Copy After:=ThisWorkbook.Sheets(1)
    ActiveSheet.Name = ActiveSheet.Range("A9")
End If

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Not WorksheetFunction.IsErr(Evaluate("'" & sName & "'!A1"))
End Function

要获得导入+计数器,请在代码中尝试以下操作:

Option Explicit

Public Sub TestMe()

    Dim importName As String
    Dim cnt

    Do Until cnt = 10
        cnt = cnt + 1
        importName = "Import" & cnt
        Debug.Print importName
    Loop

End Sub
只需确保始终递增工作表的名称即可


您的工作簿名为sFname。剥下延长件并使用它

ActiveSheet.Name = left(sFname, instrrev(sFname, chr(46))-1)

可能想验证
wSht
的内容,但是:工作表名称中不允许包含所有内容。@Mat'smugh-这似乎太过分了,我宁愿制作一个
try catch
,并显示一条漂亮的错误消息。或者,是的<代码>出错时继续下一步,并检查
错误号
MsgBox
,以防出错。关键是要做点什么来解决wSht可能无效的问题;-)@Mat'sMug-按照OP代码的逻辑,最好的情况是检查他正在复制的文件的工作表集合中是否存在
wSht
。如果存在,则它是有效的工作表名称。