2016-08-03 14 views
0

私はこのコードを使用しています(Splitting worksheet into multiple workbooks)、列3でフィルタリングする短いデータベースを使用するとコードが不思議に思えます。フィルタとして使用される列、別名フィールドは、35列または "AI"にあり、この場合コードは機能しません。したがって、このコードでは、フィルタリングされた列の値に応じてワークブックが作成されますが、データ自体はフィルタリングされず、この場合は3つの同一ファイルが作成されます。助言がありますか?これは私が使用したコードです:Excelワークシートのデータを列の値に基づいて複数のワークブックに分割する

Sub CreateBatchWorkbooks() 

On Error Resume Next 
Application.DisplayAlerts = False 

With ThisWorkbook.Sheets("CalcData") 'Replace the sheet name with the raw data sheet name 

Set Newsheet = ThisWorkbook.Sheets("cal") 

    If Newsheet Is Nothing Then 
      Worksheets.Add.Name = "cal" 
     Else 
      ThisWorkbook.Sheets("cal").Delete 
      Worksheets.Add.Name = "cal" 
    End If 

     FilterField = WorksheetFunction.Match("BatchNumber()", ThisWorkbook.Sheets("CalcData").Range("1:1"), 0) 

     .Columns(FilterField).Copy 

      With ThisWorkbook.Sheets("cal") 
       .Range("a1").PasteSpecial (xlPasteAll) 
       .Columns("a").RemoveDuplicates Columns:=1, Header:=xlYes 
      End With 

        For Each cell In ThisWorkbook.Sheets("cal").Columns("a").Cells 
         i = i + 1 
          If i <> 1 And cell.Value <> "" Then 
           .AutoFilterMode = False 
           .Rows(1).AutoFilter field:=FilterField, Criteria1:=cell.Value 
           Set new_book = Workbooks.Add 
           .UsedRange.Copy 
           new_book.Sheets(1).Range("a1").PasteSpecial (xlPasteAll) 
           new_book.SaveAs Filename:=ThisWorkbook.Path & "\" & cell.Value & ".xlsx" 
           new_book.Sheets(1).UsedRange.Columns.AutoFit 
           new_book.Save 
           new_book.Close 
          End If 
        Next cell 

         ThisWorkbook.Sheets("cal").Delete 
End With 

End Sub 

ありがとうございます!

+0

vba/3211 /エラー処理/ 11022/resume-keyword))。この行のために、コード内のエラーは完全に無視されています。表示されているエラーメッセージを報告してください(投稿を編集してください)。次に、エラー処理に関するそのドキュメンテーションのセクションの残りの部分を読んでください。 OERNを使用する正当な理由はほとんどありません**。 – FreeMan

+0

また、フィールド#35を1つの列範囲でフィルタリングしようとしています。あなたがリンクした前の投稿は、この訂正をコメントに示しています。 –

+0

私はちょうどコードを更新しました。まだ何も解決されていません。助言がありますか? – dmalvareg

答えて

0

答えが見つかりました。 Iここ場合にはそれを投稿する `エラーで再開Next`(参照[ドキュメント](https://stackoverflow.com/documentation/を取り除くという名前のテーブルやデータベースを使用して誰かのために助けにされ:)

Sub CreateBatchWorkbooks() 

On Error Resume Next 
Application.DisplayAlerts = False 

With ThisWorkbook.Sheets("CalcData") 'Replace the sheet name with the raw data sheet name 

Set Newsheet = ThisWorkbook.Sheets("cal") 

    If Newsheet Is Nothing Then 
      Worksheets.Add.Name = "cal" 
     Else 
      ThisWorkbook.Sheets("cal").Delete 
      Worksheets.Add.Name = "cal" 
    End If 

     FilterField = WorksheetFunction.Match("BatchNumber()", ThisWorkbook.Sheets("CalcData").Range("1:1"), 0) 

     .Columns(FilterField).Copy 

      With ThisWorkbook.Sheets("cal") 
       .Range("a1").PasteSpecial (xlPasteAll) 
       .Columns("a").RemoveDuplicates Columns:=1, Header:=xlYes 
      End With 

        Dim rngFilteredCalcData 
        For Each cell In ThisWorkbook.Sheets("cal").Columns("a").Cells 
         i = i + 1 
          If i <> 1 And cell.Value <> "" Then 
           Set rngFilteredCalcData = .ListObjects("tblCalcData").Range 
           rngFilteredCalcData.AutoFilterMode = False 
           rngFilteredCalcData.AutoFilter field:=FilterField, Criteria1:=cell.Value 

           Set new_book = Workbooks.Add 
           rngFilteredCalcData.SpecialCells(xlCellTypeVisible).Rows.Copy 
           new_book.Sheets(1).Range("a1").PasteSpecial (xlPasteAll) 
           new_book.SaveAs Filename:=ThisWorkbook.Path & "\" & cell.Value & ".xlsx" 
           new_book.Sheets(1).UsedRange.Columns.AutoFit 
           new_book.Save 
           new_book.Close 
          End If 
        Next cell 

         ThisWorkbook.Sheets("cal").Delete 
End With 

End Sub 
関連する問題