"Anwendungsdefiniert oder Objektdefiniert" Fehler "1004"

749
Loading...

Ich erhalte den 1004-Laufzeitfehler für "Application Defined ... Defined"

und mit einigen Formatierungsanpassungen

Ich erhalte den 1004-Laufzeitfehler "Die Sortierreferenz ist ungültig. Stellen Sie sicher, dass sie sich innerhalb der Daten befindet, die Sie sortieren möchten, und das erste Feld" Sortieren nach "nicht gleich oder leer ist."

Ich habe ein begrenztes Wissen darüber, warum ich diesen Fehler erhalte, und auch ein begrenztes VBA-Codierungswissen. Mein Code scheint methodisch sehr ähnlich zu anderen im Web zu sein. Ja, mein Code ist sehr ineffizient, bitte kritisieren Sie ihn nicht, es sei denn, er gehört zur Lösung.

Alles funktioniert gut bis zum .sortund dann kommt diese Zeile raus.

Ich habe meinen anderen Versuch in dem unter 'SORTING' auskommentierten Code verlassen, damit jeder alle Fakten haben kann.

Sub Update()  Dim strCar As String 'Dim lastrow As Long strcrit = "MAINT"  'Opening CSV Workbooks.Open Filename:="G:\Common\Schedule Files\Workbook1.csv" Workbooks.Open Filename:="G:\Common\Schedule Files\Workbook2.csv"  Workbooks("Combo.xlsm").Worksheets("SheetA1").Cells.ClearContents Workbooks("Combo.xlsm").Worksheets("SheetB2").Cells.ClearContents  'Copying CSV to Workbook Workbooks("Combo.xlsm").Worksheets("SheetA1").Range("A:I").Value = Workbooks("Workbook1.csv").Worksheets("Sheet1").Range("A:I").Value Workbooks("Combo.xlsm").Worksheets("SheetB2").Range("A:I").Value = Workbooks("Workbook2.csv").Worksheets("Sheet2").Range("A:I").Value  'Close CSV Workbooks("Workbook1.csv").Close False Workbooks("Workbook2.csv").Close False  'AutoFilter Workbooks("Combo.xlsm").Worksheets("Sheet1").Cells.Clear Workbooks("Combo.xlsm").Worksheets("Sheet2").Cells.Clear  Workbooks("Combo.xlsm").Worksheets("SheetA1").Range("A:I").AutoFilter Field:=5, Criteria1:="=*" & strcrit & "*" Workbooks("Combo.xlsm").Worksheets("SheetA1").Range("A:I").AutoFilter Field:=8, Criteria1:=">0" Workbooks("Combo.xlsm").Worksheets("SheetA1").Range("A:I").SpecialCells(xlCellTypeVisible).Copy Destination:=Workbooks("Combo.xlsm").Worksheets("Sheet1").Range("A1") Workbooks("Combo.xlsm").Worksheets("SheetB2").Range("A:I").AutoFilter Field:=5, Criteria1:="=*" & strcrit & "*" Workbooks("Combo.xlsm").Worksheets("SheetB2").Range("A:I").AutoFilter Field:=8, Criteria1:=">0" Workbooks("Combo.xlsm").Worksheets("SheetB2").Range("A:I").SpecialCells(xlCellTypeVisible).Copy Destination:=Workbooks("Combo.xlsm").Worksheets("Sheet2").Range("A1")   'SORTING 'Dim lastrow As Long 'lastrow = Cells(Rows.Count, 2).End(xlUp).Row 'Workbooks("Combo.xlsm").Worksheets("Sheet2").Range("A2:I" & lastrow).Sort Key1:=Range("B2:B" & lastrow), Order1:=xlAscending, Header:=xlNo  Worksheets("Sheet2").Range("A:I").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo Worksheets("Sheet1").Range("A:I").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo  End Sub 
0
Es scheint keine Endzeile in Ihrem Range-Bereich zu geben ("A2: I") QHarr vor 6 Jahren 0

1 Antwort auf die Frage

0
paul bica

Ich habe versucht, Ihren Code ein bisschen überschaubarer zu machen, aber er wurde nicht getestet

Dies ist vom UsedRange abhängig. Löschen Sie daher alle leeren Zeilen aus Combo.xlsm auf allen Arbeitsblättern

Um festzustellen, ob Sie leere Zeilen haben, wählen Sie in jedem Blatt die Zelle aus A1und drücken Sie dann Ctrl+End


Option Explicit Public Sub SortAndCopyCSVs() Const CRIT = "MAINT" Const CSVF1 = "G:\Common\Schedule Files\Workbook1.csv" Const CSVF2 = "G:\Common\Schedule Files\Workbook2.csv"  Dim wbCSV1 As Workbook: Set wbCSV1 = Workbooks.Open(Filename:=CSVF1) Dim wbCSV2 As Workbook: Set wbCSV2 = Workbooks.Open(Filename:=CSVF2) Dim wbCMBO As Workbook: Set wbCMBO = Workbooks("Combo.xlsm") Dim wsCSV1 As Worksheet: Set wsCSV1 = wbCSV1.Worksheets("Sheet1") Dim wsCSV2 As Worksheet: Set wsCSV2 = wbCSV2.Worksheets("Sheet2") Dim wsA1 As Worksheet: Set wsA1 = wbCMBO.Worksheets("SheetA1") Dim wsB2 As Worksheet: Set wsB2 = wbCMBO.Worksheets("SheetB2") Dim wsS1 As Worksheet: Set wsS1 = wbCMBO.Worksheets("Sheet1") Dim wsS2 As Worksheet: Set wsS2 = wbCMBO.Worksheets("Sheet2") 'Copy CSVs to Workbook Getline, and close CSVs Dim lr1 As Long: lr1 = wsCSV1.UsedRange.Rows.Count Dim lr2 As Long: lr2 = wsCSV2.UsedRange.Rows.Count Dim urA1AI As Range: Set urA1AI = wsA1.Range("A1:I" & lr1) Dim urB2AI As Range: Set urB2AI = wsB2.Range("A1:I" & lr2) wsA1.UsedRange.Cells.Clear: wsB2.UsedRange.Cells.Clear urA1AI.Value2 = wsCSV1.Range("A1:I" & lr1).Value2: wbCSV1.Close False urB2AI.Value2 = wsCSV2.Range("A1:I" & lr2).Value2: wbCSV2.Close False 'AutoFilter and Copy wsS1.UsedRange.Cells.Clear: wsS2.UsedRange.Cells.Clear wsA1.UsedRange.AutoFilter Field:=5, Criteria1:="=*" & CRIT & "*" wsA1.UsedRange.AutoFilter Field:=8, Criteria1:=">0" wsA1.UsedRange.SpecialCells(xlCellTypeVisible).Copy Destination:=wsS1.Range("A1") wsB2.UsedRange.AutoFilter Field:=5, Criteria1:="=*" & CRIT & "*" wsB2.UsedRange.AutoFilter Field:=8, Criteria1:=">0" wsB2.UsedRange.SpecialCells(xlCellTypeVisible).Copy Destination:=wsS2.Range("A1") 'Sort wsS1.UsedRange.Columns("A:I").Sort Key1:=wsS1.UsedRange.Columns("B"), Header:=xlNo wsS2.UsedRange.Columns("A:I").Sort Key1:=wsS2.UsedRange.Columns("B"), Header:=xlNo End Sub 
Vielen Dank, ich werde das heute untersuchen und zu dieser "optimierten" (nicht sicher, ob es das richtige Wort ist) übergehen. Auf einen Blick sehe ich, ich habe viel zu lernen, danke! Loading... vor 6 Jahren 0
Dies schien den Trick zu tun. Ich bin mir nicht ganz sicher, woher das Problem kam. Wow, danke! Sehr geschätzt Loading... vor 6 Jahren 0