【问题标题】:VBA Code will not rename sheetVBA 代码不会重命名工作表
【发布时间】:2017-05-12 21:56:58
【问题描述】:

在我向其添加消息框之前,它一直运行良好,从那时起,代码将不再重命名工作表,而是使用“从 (SHEET86) 复制”工作表名称。

我有 12 组由它们自己的按钮激活的相同代码,它们都可以正常工作,但不是第一个。我什至从工作宏中复制了一段代码并更改了单元格引用,但它根本不会像代码中那样重命名工作表。

我在此处复制了宏,因此您可以看到它们在各个方面都是相同的。我已经检查并重新检查了按钮是否分配了正确的宏但无济于事,所以想知道是否有其他人以前经历过这种情况,或者我是否应该寻找其他地方?

Sub copySht1()
    On Error Resume Next

    Dim mySheetname As String
    Dim MyCell As Range, MyRange As Range

    Set MyRange = Sheet74.Range("D6")

    For p = 1 To 1      
        mySheetname = MyRange.Text
        Sheet86.Copy After:=Sheet84
        ActiveSheet.Name = "Schedule - " & mySheetname
        ActiveSheet.Range("C1").Value = "Schedule - " & mySheetname
    Next p
    MsgBox "Schedule for aircraft" & Cells(6, "D") & " Created"
End Sub


Sub copySht2()
    On Error Resume Next

    Dim mySheetname As String
    Dim MyCell As Range, MyRange As Range
    Set MyRange = Sheet74.Range("E6")

    For p = 1 To 1 
        mySheetname = MyRange.Text
        Sheet86.Copy After:=Sheet84
        ActiveSheet.Name = "Schedule - " & mySheetname
        ActiveSheet.Range("C1").Value = "Schedule - " & mySheetname
    Next p
End Sub

【问题讨论】:

  • 从两个潜艇中删除 for p=1 to 1 和 next p。
  • 我建议:(1) 使用Option Explicit (see how) (2) 删除On Error Resume Next 并运行您的代码。 (3) Edit 您的问题并告诉我们在哪里您收到错误以及什么错误消息是。我认为这是了解您的问题所在的最佳方式。
  • 您好 Peh,感谢您抽出宝贵时间回复。我已经删除了 on error Resume next bit,添加了 Option Explicit,当我阅读时,我看到了一篇关于错误处理的帖子,因此将其插入并收到一个错误,表明该名称已被使用。如果没有该错误处理,我将收到我目前正在研究的 X 400 消息。奇怪的是,所有其他宏都使用同一张表进行复制,并成功运行并正常完成

标签: vba excel


【解决方案1】:

我可能会因为这样的解决方案而被石头砸死,但你能试试吗:

Sub copySht1()
    On Error Resume Next

    Dim mySheetname As String
    Dim MyCell As Range, MyRange As Range

    Set MyRange = Sheet74.Range("D6")

        mySheetname = MyRange.Text
        Sheet86.Copy After:=Sheet84
        Sheet86.Activate
        ActiveSheet.Name = "Schedule - " & mySheetname
        ActiveSheet.Range("C1").Value = "Schedule - " & mySheetname

    MsgBox "Schedule for aircraft" & Cells(6, "D") & " Created"
End Sub

只是为了检查它是否有效:)

【讨论】:

  • 您好,Vityata,感谢您的回复。结果没有变化。她仍然固执...
【解决方案2】:

我很确定 Sheet86 或 Sheet84 不是声明变量。

首先:使用Sheets("Sheet86")

第二:始终使用Option Explicit 以避免返回给我们这样一个微不足道的错误。

PS:我补充一下 Peh 的建议:on error resume next 仅适用于当您知道可能导致错误的原因并且知道可以恢复时。

【讨论】:

  • 我建议始终使用Worksheets 而不是Sheets。 Sheets 集合可以包含图表或工作表对象。 Worksheets 集合仅包含 Worksheet 对象。所以千万不要使用Sheets,除非你需要包含图表等。
  • @Peh 感谢您提供此信息,我不知道
  • Sheet74、Sheet84 和Sheet86 几乎可以肯定是三个不同工作表的CodeName,因此按原样使用它们可能是非常有效的。 (但有这些工作表已被删除的可能性。Option Explicit 肯定会检测到它们是否已删除。)
【解决方案3】:

我没有发现代码有任何问题。请仔细检查您是否正在执行 copySht1() 两次,或者工作表名称(“Schedule - ” & mySheetname)是否已经存在。只有在这些情况下,它才会采用“Sheet86(2)”(或)“从 (Sheets86) 复制”,因为您使用了“On Error Resume Next”,它不会抛出实际的错误消息。

【讨论】:

  • 感谢拉姆的回复。我已经检查过了,这个名字在其他任何地方都没有使用。其他 11 个宏都使用同一张表进行复制,唯一的区别实际上是 &mySheetname,它来自单元格“D6”。生成的消息也会生成正确的文件名,它只是不会重命名该表..
【解决方案4】:

非常感谢大家对我的问题的建议。在航空领域而不是在编码领域我对学习 VBA 还是很陌生,所以你们所有的 cmets 都让我搜索并了解更多关于它的信息。 现在问题已解决,我所做的是删除工作表 86 并从头开始重新创建它。然后我以新名称重新保存工作簿,关闭 Excel,重新打开,代码现在可以正常工作。我只能猜测必须与第 86 页有关的真正问题。 再次感谢您抽出宝贵时间提供反馈.. 最好的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多