0

我正在制作一个简单的脚本,从不同的工作簿中取出一堆工作表并将它们放在一个工作簿上。我必须重命名所有工作表,以便它们与我拥有的其他脚本一起使用。除了我从 eod 循环中获得的工作表之外,所有工作表都被重命名了。前两张纸被重命名得很好,但之后循环中的一张都没有。来自 eod 表的所有工作簿都是 xlsx 格式,其余的是 xls 格式。宏完成后,我放入的每张 xls 表格都会关闭,但所有 xlsx 格式文件都不会。我不知道这是否是问题的一部分。什么会导致这只重命名某些工作表?

     Sub getSheets()
        num = 1
 ----->   ' loop for eod 
        Do Until copyover("Weekly", "EOD Week " & num) = False
            num = num + 1
        Loop

        temp = copyover("Voice_of_the_Customer", "VOC")
        temp = copyover("Daily_Cp%_v2", "COMP")
        temp = copyover("MPJ-Scorecard-QC-Summary", "QC")
        temp = copyover("MPJ-Scorecard-SCOI-Summary", "SCOI")
        temp = copyover("TechUpstreamTransmit", "UPSQ")
        temp = copyover("Daily_CCG_OTG", "MTF")
        temp = copyover("summary", "S7 QC")
        temp = copyover("MPJ-Scorecard-TCF-Summary", "TCF")

    End Sub

Function copyover(SheetAd As String, SheetName As String) As Boolean

    Dim origWork As Workbook
    Dim fileName As String
    Dim copytoFile As Variant
    Dim copytoFile2 As Workbook
    Set origWork = ActiveWorkbook

    tem = MsgBox("Do you want to add " & SheetName, vbYesNoCancel)
    If (tem = vbYes) Then
        copyover = True
        On Error GoTo ErrHandler
        copytoFile = Application.GetOpenFilename _
        (Title:=SheetAd, _
        FileFilter:="Excel Files *.x* (*.x*),")
        Workbooks.Open copytoFile
        Set copytoFile2 = ActiveWorkbook
        copytoFile2.Sheets(SheetAd).Move After:=origWork.Sheets("TechScore")
        'ActiveSheet.Name = SheetName
        origWork.Activate
        origWork.Sheets(SheetAd).Name = SheetName
        'ThisWorkbook.VBProject.VBComponents(SheetAd).Name = "Mudface"
         Workbooks(copytoFile).Close False
    Else
    If (tem = vbNo) Then
          copyover = False
    End If
    End If

ErrHandler:

End Function
4

2 回答 2

2

这对我来说很难理解。看起来你的编码方式相当危险。origWork 从未初始化。如果您将“选项显式”放在模块/工作表代码中的所有代码之上,它可能会对您有所帮助。我认为你的部分工作基本上是在某个地方迷失在记忆中,并且永远不会在你认为的地方结束。尝试在某些关键行添加断点并检查正在引用哪些工作簿。这是关于 VBA 的一件非常非常好的事情,因为您可以在它运行时调试/编辑变量。

于 2012-09-26T20:32:13.373 回答
0

如果您只想重命名具有特定名称的某些工作表,我已经制作了几个宏来快速完成此操作:

宏 1

Sub Sheetlist()
Dim x As Integer

Sheets.Add After:=ActiveSheet
ActiveSheet.Name = "sheetlist"
Range("A1").Select
ActiveCell.FormulaR1C1 = "Sheet List"
Range("C1").Select
ActiveCell.FormulaR1C1 = "New List"
For x = 1 To Worksheets.Count
Cells(x + 1, 1).Value = Worksheets(x).Name
Next x
End Sub

这将在您的工作簿中创建一个名为 sheetlist 的工作表,该工作表将列出当前工作簿中的所有工作表。您可以消除任何不想用下一个宏重命名的工作表名称,但要确保没有空格。

有一个标题为“新列表”(C) 的列,您可以在其中放置要调用工作表的名称列表。确保此工作表具有与 A 列相同数量的名称。

宏 2:

Sub batchrename()
'
' batchrename Macro
'
Dim OldSheetName As String
Dim NewSheetName As String
Dim SheetCount As Integer
Dim NewSheetList As String

NewSheetList = InputBox("How many names are there?") + 1
For SheetCount = 1 To Range("C2:C" & NewSheetList).Count
OldSheetName = Sheets("sheetlist").Cells(SheetCount + 1, 1)
NewSheetName = Sheets("sheetlist").Cells(SheetCount + 1, 3)

Sheets(OldSheetName).Select
ActiveSheet.Name = NewSheetName
Next SheetCount

End Sub

这会将工作表从 A 重命名为 C 中的名称。提示将询问您名称列表在哪里,输入新名称列表的完整范围(例如:C2:C250),然后按 Enter。

希望这可以帮助,

于 2016-03-07T18:31:09.217 回答