AW: hilfe bei code
19.08.2005 14:01:28
Jolina
hallo..
@u_ dein vorschlage hat zwar in meiner beispieltabelle geklappt, aber wenn ich dies nun in meinen eigentlichen code übertrage bekomme ich die fehlermeldung: anwendungs- oder objektdefinierter fehler.
noch mal zu meinem problem:
hab eine tabelle, die so aussieht:
A..........................B..............E................I
Request-ID...UserID.....Country.....Priority
.........................................USA............2-medium
........................................Germany.........1-high
usw.
ich möchte die anzahl dieser werte nach bestimmten kriterien berechnen und in bestimmte zellen einer anderen tabelle einfügen.
bei dem kriterium priority(high, medium, low) hab ich das so gemacht, dass die werte nach den kriterien zunächst gefiltert und dann gezählt wurden. (siehe code unten)
da man jedoch diese methode nur bei wenigen kriterien verwenden kann, muss es irgendwie anders gelöst werden...aber ich weiß nicht wie.
bei country z.b. hab ich fast 50 länder (also 50 kriterien)
alle ergebnisse müssen außerdem in derselbe zeile in bestimmten zellen stehen...
hoffentlich kann mir jemand helfen :(
hier mein code:
Function count()
'Berechnet die Anzahl der angezeigten Zeilen
ActiveSheet.UsedRange.AutoFilter field:=1, Criteria1:="<>"
counter = 0
counter = ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeVisible).count - 1
count = counter
End Function
Filtert werte nach den Kriterien high, medium, low
Sub filter_priority_high()
'Anzahl aller Tickets nach priority high
If ActiveSheet.AutoFilterMode Then ActiveSheet.UsedRange.AutoFilter
ActiveSheet.UsedRange.AutoFilter field:=9, Criteria1:="1*"
End Sub
Sub filter_priority_medium()
'Anzahl aller Tickets nach priority medium
If ActiveSheet.AutoFilterMode Then ActiveSheet.UsedRange.AutoFilter
ActiveSheet.UsedRange.AutoFilter field:=9, Criteria1:="2*"
End Sub
Sub filter_priority_low()
'Anzahl aller Tickets nach priority low
If ActiveSheet.AutoFilterMode Then ActiveSheet.UsedRange.AutoFilter
ActiveSheet.UsedRange.AutoFilter field:=9, Criteria1:="3*"
End Sub
vorgeschlagener Befehl
Sub zaehlen()
Cells(65536, 5).End(xlUp).Offset(1, -6) = WorksheetFunction.CountIf(Columns(5), "USA")
End Sub
Sub MakroTest01()
Application.ScreenUpdating = False
If ActiveSheet.AutoFilterMode Then ActiveSheet.UsedRange.AutoFilter
WBname = ActiveWorkbook.Name
hier werden die Berechnungen ausgeführt
Call filter_priority_high
high = count()
Call filter_priority_medium
medium = count()
Call filter_priority_low
low = count()
Call zaehlen
If ActiveSheet.AutoFilterMode Then ActiveSheet.UsedRange.AutoFilter
Application.ScreenUpdating = True
Application.Workbooks("Zieldatei.xls").Worksheets("Tabelle1").Activate
hier wird nach der nächsten freien Zelle in der Spalte 2 gesucht, weil in dieser Zeile alle Ergebnisse erscheinen sollen
insertin = 0
For Each zelle In Columns(2).Cells
If IsEmpty(zelle) Then
insertin = zelle.Row
Exit For
End If
Next
hier wird bestimmt welches Ergebnis in welche Zelle kommt
Cells(insertin, 1).Value = MonthName(Month(Date - Day(Date)), True) & " " & (Year(Date - Day(Date)))
Cells(insertin, 129).Value = high
Cells(insertin, 131).Value = medium
Cells(insertin, 133).Value = low
Application.Workbooks(WBname).Close
End Sub