2016-06-22 7 views
1

私は個人的な仕事のためにこれを作成しました。 Googleで検索した後、複数のワークブック(それぞれ1つのワークシートがある)を1つのワークブックにマージするコードが見つかりました。そして、これらのワークシートは、それが "shXetnaXe" と呼ぶ同じ名前を持っているので、私はワークブックを選択しようとすると、それは複数のワークブックを1つのワークブックにマージした後に、ファイル名に基づいてシートの名前を変更します。

"shXetnaXe" for sheet(1)

"shXetnaXe(1)" for sheet(2)

"shXetnaXe(2)" for sheet(3)

終わりました等々。

私はそれらの元の名前、それらのシートは自動的に元の選択ワークブックの名前 という名前にしたいのです:「9月1日」「9月2日」「9月3日」 、私はそれを少し変更してみましたが、それは常に失敗します。

ここでの問題はopenfiles.nameは、ファイルの完全なファイルパスと名前を返すことで、コード

`Sub opensheets() 
Dim openfiles 
Dim crntfile As Workbook 
Set crntfile = Application.ActiveWorkbook 
Dim x As Integer 
On Error GoTo ErrHandler 
Application.ScreenUpdating = False 
openfiles = Application.GetOpenFilename _ 
(FileFilter:="Microsoft Excel Files (*.xls;*.xlsx),*.xls;*.xlsx", _ 
MultiSelect:=True, Title:="Select Excel file to merge!") 

If TypeName(openfiles) = "Boolean" Then 
    MsgBox "You need to select atleast one file" 
    GoTo ExitHandler 
End If 

x = 1 
While x <= UBound(openfiles) 
    Workbooks.Open Filename:=openfiles(x) 
    Sheets().Move After:=crntfile.Sheets(crntfile.Sheets.Count) 
    Set rnmsht = Workbook.Open 
    Sheets(openfiles) = rnmsht 

    Before:=ActiveWorkbook.Sheets(openfiles.name) 
    x = x + 1 
Wend 


Application.DisplayAlerts = False 
Sheets(1).Select 
ActiveWindow.SelectedSheets.Delete 


ExitHandler: 
Application.ScreenUpdating = True 
Exit Sub 

ErrHandler: 
MsgBox Err.Description 
Resume ExitHandler 
End Sub' 
+0

(同じ位置)にこの行を置きますか?または、これは正常に動作しているだけで、その追加機能を取得したいですか?元のコードに追加した行はどれですか? rnmsht = Workbook.Open シート(openfiles)= rnmsht前 設定します: –

+0

はここに私のコードです=のActiveWorkbook.Sheets(openfiles.name) – tianda

答えて

0

コードをいくつか変更しました。これらの変更の一部を非常に簡単に元に戻すことができます。

Sub opensheets() 
    Dim openfiles 
    Dim crntfile As Workbook 
    Set crntfile = Application.ActiveWorkbook 
    Dim targetWkbk As Workbook 
    Dim newName As String 
    Dim x As Integer 
    On Error GoTo ErrHandler 
    Application.ScreenUpdating = False 
    openfiles = Application.GetOpenFilename _ 
       (FileFilter:="Microsoft Excel Files (*.xls;*.xlsx),*.xls;*.xlsx", _ 
       MultiSelect:=True, Title:="Select Excel file to merge!") 

    If TypeName(openfiles) = "Boolean" Then 
     MsgBox "You need to select atleast one file" 
     GoTo ExitHandler 
    End If 

    With crntfile 
    x = 1 
    While x <= UBound(openfiles) 
     Set targetWkbk = Workbooks.Open(Filename:=openfiles(x)) 
     newName = targetWkbk.Name 
     'you need this part if there are several (more than 1) worksheets 
     'in your workbook, this might come in handy for later purposes 
     'however, if it is always just one worksheet, delete the following parts 
     'Line: For i = 1.. 
     'Line: Next 
     'part & " Sheet " & i 
     For i = 1 To targetWkbk.Sheets.Count 
      targetWkbk.Worksheets(i).Copy After:=.Sheets(.Sheets.Count) 
      .Worksheets(.Sheets.Count).Name = newName & " Sheet " & i 
     Next 
     targetWkbk.Close 
     x = x + 1 
    Wend 
    End With 
ExitHandler: 
    Application.ScreenUpdating = True 
    Exit Sub 

ErrHandler: 
    MsgBox Err.Description 
    Resume ExitHandler 
End Sub 

私はそれは、現在のファイルの最初のワークシートを削除し、この部分に

Application.DisplayAlerts = False 
Sheets(1).Select 
ActiveWindow.SelectedSheets.Delete 

を削除しました。これが意図されているかどうかはわかりませんでした。その場合は、バックラインがエラーをスロー

crntfile.Worksheets(1).Delete 

HTH

+0

答えのtomのためにありがとう、シートは元のファイル名によって名前が変更されますが、私はそれを実行し、選択、別のウィンドウのポップアップと選択されたファイルの名前である "1 sept" "あなたは1 sept.xls?msに変更を保存しますか?excelは以前のバージョンのExcelで最後に保存されたファイルを開くときに式を再計算します"というポップアップを防ぐためのアイデアは何ですか? – tianda

+0

私はmsgboxを削除した後、それは私の願い、感謝、大きな感謝として動作します! – tianda

+0

ああ、忘れてしまった。今すぐ編集します。私はあなたを助けることができた。 –

0

です。特定の特殊文字を含むワークシートに名前を付けることはできません。 /、\または:

Sub opensheets() 
    Dim openfiles 
    Dim xlWB As Workbook 
    Dim NewSheetName as String 
    Dim x As Integer 
    On Error GoTo ErrHandler 
    Application.ScreenUpdating = False 
    openfiles = Application.GetOpenFilename _ 
       (FileFilter:="Microsoft Excel Files (*.xls;*.xlsx),*.xls;*.xlsx", _ 
       MultiSelect:=True, Title:="Select Excel file to merge!") 

    If TypeName(openfiles) = "Boolean" Then 
     MsgBox "You need to select atleast one file" 
     GoTo ExitHandler 
    End If 

    x = 1 
    While x <= UBound(openfiles) 
     Set xlWB = Workbooks.Open(Filename:=openfiles(x)) 
     NewSheetName = xlWB.Name 
     xlWB.Sheets(1).Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 
     ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = NewSheetName 

     x = x + 1 
    Wend 


' Application.DisplayAlerts = False 
' Sheets(1).Select 
' ActiveWindow.SelectedSheets.Delete 


ExitHandler: 
    Application.ScreenUpdating = True 
    Exit Sub 

ErrHandler: 
    MsgBox Err.Description 
    Resume ExitHandler 
End Sub 
+0

申し訳ありませんが、私は別のエラーを取得します。 "自動化エラー" – tianda

+1

ワークシートのみが移動された後、xlWBが終了するとエラーが発生しました。私はコードを編集しました。今はうまくいくはずです。 –

関連する問題