2016-04-18 111 views
0

私は複数のExcelで基本データを持っていますが、列に基づいてデータをソートする必要がありましたが、ソートされたデータはユニークな値を持ち、ユニークな値に基づいて新しいワークブックを作成する必要があります。エラーvba Excelでsaveasメソッドブックが失敗しました

私の問題:

  1. イムがどのように私は列を固定することができます saveas method workbook class failed
  2. としてエラーを示す時々マクロをexcuting?

マイコード:

sub marcel() 
Dim sArray as string 
Dim saArray as string 
Dim Lastrow_Sub As Integer 
Dim Lastrow_Aging As Integer 
Dim Array_Sub As Variant 
Dim Array_Sub_Aging As Variant 
Dim rngFilter_Ws2 as range 
Dim Sht6 as worksheet 
Dim ColumnsToRemove2 as variant 
Dim j2 as integer 
Dim vItem2 as variant 


Check_date = Format(Date, "yymm") 

     Sheets("q_Aging_base_data_incl_FDB").Columns("D:D").AdvancedFilter Action:=xlFilterCopy, _ 
     CopyToRange:=.Range("AY1"), Unique:=True 
     Lastrow_Aging = .Cells(.Rows.Count, "AY").End(xlUp).Row 

     Array_Sub_Aging = Range("AY2:AY" & Lastrow_Aging) 
     saArray = Array_Sub_Aging(m, 1) 

      Sheets("BASE qry_Inventory Activation b").Columns("H:H").AdvancedFilter Action:=xlFilterCopy, _ 
      CopyToRange:=.Range("AZ1"), Unique:=True 
      Lastrow_Sub = .Cells(.Rows.Count, "AZ").End(xlUp).Row 

      Array_Sub = Range("AZ2:AZ" & Lastrow_Sub) 
      sArray = Array_Sub(k, 1) 

If sArray <> "APE" And saArray = "APE" Or sArray <> "XXUMA" And saArray = "XXUMA" Then 

        Dim NewBook_Sub_Aging As Workbook 
        Set NewBook_Sub_Aging = Workbooks.Add 

        With NewBook_Sub_Aging 

         .Title = saArray 
         NewBook_Sub_Aging.Worksheets("sheet1").Name = "Aging Inventory" 

         With rngFilter_Ws2 

          .AutoFilter Field:=4, Criteria1:=saArray, Operator:=xlFilterValues 
          .AutoFilter Field:=15, Criteria1:="reporting relevant Location", Operator:=xlFilterValues 
          .AutoFilter Field:=32, Criteria1:="<>(a) 0 - 360", Operator:=xlFilterValues 

          Set rngCopyAging_Sub = .SpecialCells(xlCellTypeVisible) 
                .AutoFilter ' Switch off AutoFilter 

         End With 

         rngCopyAging_Sub.Copy Destination:=NewBook_Sub_Aging.Worksheets("Aging Inventory").Cells(1, 1) 

         ' Delete unwanted columns for subregions(APE and XXUMA) Aging 

         Set Sht6 = NewBook_Sub_Aging.Worksheets("Aging Inventory") 

          ColumnsToRemove2 = Array("Period", "AP_BU", "Subregion", "Strategic_BU", "Company_Code", "Company_name", "Plant_name", _ 
              "Rep Location", "Storage_Location", "Storage_Location_name", "Date_last_goods_rec", "Stock_type", _ 
              "Stock_type_name", "Kind_of_Material_name", "Supplier_name", "SummevonVEU_OIV1", "Days_since_production", _ 
              "Remaining_shelf_life", "APO_Planner", "S_SCM_or_SVC") 

          For j2 = LBound(ColumnsToRemove2) To UBound(ColumnsToRemove2) Step 1 
           vItem6 = Application.Match(ColumnsToRemove2(j2), Sht6.Rows(1), 0) 
           Debug.Print vItem6 
          If IsNumeric(vItem6) Then 
           Sht6.Columns(vItem6).Delete 
          End If 
          Next j2 

           NewBook_Sub_Aging.Worksheets("Aging Inventory").Cells.EntireColumn.AutoFit 
           NewBook_Sub_Aging.Worksheets("Aging Inventory").Range("A1:P1").AutoFilter 
           NewBook_Sub_Aging.Worksheets("Aging Inventory").Range("A2:P2").Select 
           ActiveWindow.FreezePanes = True 


         .SaveAs Filename:="KPI" & " " & saArray & " " & Check_date & ".xlsx" 
         Application.DisplayAlerts = False 

        NewBook_Sub_Aging.Close 
        End With 

      End If 
end sub 

誰もがこの問題を解決する方法を私を助けてくださいすることができます。

+0

'sArray'と' saArray'変数がありますか?この行は正しいですか: 'sArray <>" APE "そしてsaArray =" APE "またはsArray <>" XXUMA "そしてsaArray =" XXUMA "'または '' sArray <> " )または(sArray <> "XXUMA"そしてsaArray = "XXUMA" "'? 'saArray'と' Check_date'に保持されている値は何ですか? 'saArray'はファイル名に使用している値の配列ですか? –

+0

'check_date'という名前は日付で、スラッシュを含むことがあります。ファイル名には以下の文字を含めることはできません:\ /:*? "| – LiamH

+0

@ DarrenBartrup-Cook sArrayとsaArrayには文字列変数が含まれていますAPE、APED、APEAなどsArray <>" APE "そしてsaArray =" APE "またはsArray <>" XXUMA "そしてsaArray =" XXUMA " 'KPI APE 1604.xlsx'のように作成する必要があります –

答えて

0

sArrayとsaArrayの両方が実際の配列として定義されていないようです。配列は、次のように定義されています。

Dim myArray() as Integer 

配列位置のいずれかに割り当てられた値は、このように配置する必要があります

myArray(i) = 815 'i being a position, like 0 or 5 

あなたは、特定の位置に保持された値を取得したい場合には、あなたはその位置を参照するでしょう。私は5月配列の4番目の位置に値を望んでいたのであれば、私はあなたがそうするとき

myArray(3) 'Arrays are zero-index based. 

にしてください:

.SaveAs Filename:="KPI" & " " & saArray & " " & Check_date & ".xlsx" 

をファイル名月バリアント変数をパラメータ与えています何も含まれていないので、行にエラーが発生します。

私はsaArrayとCheck_dateが異なるSubから来るグローバル変数であり、配列が作成され、その値がそこに割り当てられていると仮定します。あなたはSaveAsモジュールに文字列ではなく配列を与えているので、それでもエラーはスローされます。配列の値の1つを与える必要があります(Filenameは文字列でなければならないので、文字列でなければなりません)。

+0

sArrayとsaArrayには、文字列変数.ex 'APE、APED、APEA'などが含まれています。 Check_dateは現在の月を保持します。 saArrayは文字列の値ではありません。ファイル名はこの 'KPI APE 1604.xlsx'のように作成する必要があります –

関連する問題