2016-04-18 12 views
0

Ich habe grundlegende Daten mit mehreren Excel, die ich die Daten basierend auf den Spalten aussortieren muss, während die sortierten Daten, die eine eindeutige Werte und diese uniques Werte in Array, basierend auf eindeutigen Werten muss eine neue Arbeitsmappe erstellt werden.Fehler `saveas Methode Arbeitsmappe gescheitert` in VBA Excel

Mein Problem:

  1. Wenn im das Makro Executing manchmal sein, den Fehler saveas method workbook class failed
  2. zeigt, wie ich eine Spalte einfrieren?

Mein Code:

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 

kann jemand bitte helfen Sie mir, wie Sie dieses Problem zu beheben.

+0

Sollen 'sArray'- und' saArray'-Variablen vorhanden sein? Ist diese Zeile korrekt: 'sArray <>" APE "Und saArray =" APE "Oder sArray <>" XXUMA "Und saArray =" XXUMA "' oder sollte es sein '(sArray <>" APE "Und saArray =" APE ") Oder (sArray <> "XXUMA" Und saArray = "XXUMA)" '? Wie hoch ist der Wert in 'saArray' und' Check_date'? Ist 'saArray' ein Array von Werten, die Sie im Dateinamen verwenden? –

+0

Ich nehme an, dass der Name 'check_date' ein Datum ist und Schrägstriche enthalten kann. Dateinamen können die folgenden Zeichen nicht enthalten: \ /: *? "< > | – LiamH

+0

@ DarrenBartrup-Cook sArray und saArray enthält String-Variablen.EX APE, APED, APEA usw.' sArray <> "APE" Und saArray = "APE" Oder sArray <> "XXUMA" Und saArray = "XXUMA" '' ist die korrekte Zeile. 'Check_date' enthält den aktuellen Monat. saArray ist nicht der Wert, es ist eine Zeichenkette. Der Dateiname muss wie folgt erstellt werden: 'KPI APE 1604.xlsx' –

Antwort

0

Sowohl sArray als auch saArray scheinen nicht als tatsächliches Array definiert zu sein. Arrays sind wie folgt definiert:

Dim myArray() as Integer 

beliebigen Positionen zugewiesenen Wert zu einem Array müssen auf diese Weise gestellt werden:

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

Wenn Sie den Wert in einer bestimmten Position gehalten werden wollen, Sie würden auch auf diese Position verweisen. Also, wenn ich den Wert in der 4. Position Mai Array wollte, würde ich tun

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

so, wenn Sie tun:

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

Sie geben der Dateiname eine Variante variable Parameter, kann enthalten nichts, also würde die Linie einen Fehler werfen.

Ich nehme an, saArray und Check_date sind globale Variablen, die von einem anderen Sub stammen, und das Array wird erstellt und seine Werte werden dort zugewiesen; Es würde immer noch einen Fehler auslösen, da Sie dem SaveAs-Modul ein Array und keine Zeichenfolge geben. Sie müssen ihm einen der Werte im Array geben (und es muss eine Zeichenkette sein, da Dateiname eine Zeichenkette sein muss).

+0

sArray und saArray enthält String-Variablen.EX 'APE, APED, APEA' etc. Check_date' enthält den aktuellen Monat. saArray ist nicht der Wert, es ist eine Zeichenfolge. Der Dateiname muss wie folgt aussehen: KPI APE 1604.xlsx –

Verwandte Themen