0

さまざまなワークブックから一連のシートシートを取り出して1つのワークブックに配置する簡単なスクリプトを作成しています。私が持っている他のスクリプトで機能するように、すべてのシートの名前を変更する必要があります。私がeodループから取得しているシートを除いて、すべてのシートの名前が正しく変更されます。最初の2枚のシートは問題なく名前が変更されますが、その後はループ内のどのシートも名前が変更されません。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が初期化されることはありません。モジュール/シートコードのすべてのコードの上に「optionexplicit」を配置すると役立つ場合があります。あなたの仕事の一部は基本的にどこかで記憶に失われ、あなたが思っていた場所に行き着くことはないと思います。いくつかのキーラインにブレークポイントを追加し、参照されているワークブックを確認してみてください。実行中に変数をデバッグ/編集できるため、VBAの非常に優れた点の1つです。

于 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 に答える