【问题标题】:Excel wont rename sheet with vba codeExcel不会用vba代码重命名工作表
【发布时间】:2018-02-12 01:43:06
【问题描述】:

我正在尝试将工作簿名称 Source.xlsm 的 sheet1 复制到工作簿名称 s.xlsx。然后将复制的工作表重命名为 D1 列值。 我的代码正确复制了工作表,但重命名时出错。

不是显示消息名称已经退出,而是转到其他部分并给出错误:运行时错误'1004':无法将工作表重命名为另一个工作表的名称。并且这一行 Sheet.Name = range("D1") 被突出显示。

请纠正我做错了什么。

我的代码是:

Sub savesheet()


Dim sPath As String

Dim wbPath1 As Workbook
Dim wsName As String

sPath = Application.ActiveWorkbook.Path & "\s\s.xlsx"


        Set wbPath1 = Workbooks.Open(sPath)


        Workbooks("Source.xlsm").Sheets("Sheet1").Copy After:=wbPath1.Sheets(1)

        'For Each Sheet In ActiveWorkbook.Sheets
        For Each Sheet In Workbooks("s.xlsx").Sheets
            If Sheet.Name = range("D1") Then
             MsgBox "name already exits"
              Exit Sub

             Else
                Sheet.Name = range("D1")
            End If
          Next

End Sub

【问题讨论】:

  • 您的range("D1") 不是每个工作表上的范围(“D1”)。在循环浏览 wbPath1 中的工作表时提供适当的父工作表参考。
  • 如果工作表名称已经存在,您希望复制的工作表被称为什么?还是要将其默认为自动生成的名称(例如 sheet4)?
  • @Alex 现在我只想,这个代码显示消息框,通知工作表名称已经退出并退出子。
  • @Jeeped:如果您打算更改这行代码 If Sheet.Name = range("D1") 那么。我用这一行更改它 If Sheet.Name = Workbooks("Cash Loading.xlsm").Sheets("Sheet1").range("D1") Then 但仍然没有运气。能否请您详细说明您的意思。
  • 尝试将range("D1") 更改为range("D1").value。最好通过将此范围分配给您已经贴花的变量来跟踪错误:wsName = range("D1").value。并确保您引用了正确的工作簿和工作表。所以扩展代码是:wsName = Workbooks("Source.xlsm").sheets(1).range("D1").value

标签: excel vba


【解决方案1】:

更改了代码并解决了问题。下面是代码供参考:

Sub movesheet3()
Dim name As String
Dim sPath As String
Dim wbPath1 As Workbook

name = Workbooks("Source.xlsm").Sheets("Sheet1").range("D1").value


sPath = Application.ActiveWorkbook.Path & "\s\s.xlsx"

       Set wbPath1 = Workbooks.Open(sPath)
       wbPath1.Activate
        'Workbooks("Source.xlsm").Sheets("Sheet1").Copy After:=wbPath1.Sheets(Sheets.Count)

For i = 1 To (Worksheets.Count)


    If ActiveWorkbook.Sheets(i).name = name Then

     MsgBox "Sheet name already exist. GO back to the sheet and enter valid name in D1 cell"

     Exit Sub
     End If

   Next
     Workbooks("Source.xlsm").Sheets("Sheet1").Copy After:=wbPath1.Sheets(Sheets.Count)

     Sheets(ActiveSheet.name).name = name
     ActiveWorkbook.Close True

End Sub

感谢大家的帮助....干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多