Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Berechen

Berechen
24.07.2020 08:52:20
Sigi
Hallo,
mit nachfolgendem Makro möchte ich Berechnungen durchführen.
Leider bekomme ich eine Fehlermeldung wenn nur ein Artikel (TB Art) eingetragen ist.
Sind mehrere Artikel vorhanden funktioniert es.
Wie kann ich dies umgehen?
Danke!
Gruß
Sigi
Sub rechnen()
Dim objDic As Object
Dim arr As Variant
Dim lZeile As Long
Dim dValue As Double
Dim lZL As Long
Dim lZA As Long
Dim lZWa As Long
Dim x As Integer
Set wksA = ThisWorkbook.Worksheets("Art")
Set wksR = ThisWorkbook.Worksheets("RE")
lZA = wksA.Cells(Rows.Count, 1).End(xlUp).Row
wksR.Range(wksR.Cells(2, 1), wksR.Cells(3, 4)).ClearContents
'Bezeichnung
Set objDic = CreateObject("Scripting.Dictionary")
arr = wksA.Range("E2:E" & lZA)                                                   ' _
FEHLERMELDUNG"
For x = LBound(arr) To UBound(arr)
objDic(arr(x, 1)) = 0
Next
wksR.Range("A2").Resize(objDic.Count) = WorksheetFunction.Transpose(objDic.keys) ' _
Ausgeben
For lZeile = 2 To wksR.Cells(Rows.Count, 1).End(xlUp).Row
wksR.Cells(lZeile, 2) = Application.WorksheetFunction.SumIf(wksA.Range("E2:E" & lZA) _
, wksR.Cells(lZeile, 1), wksA.Range("H2:H" & lZA)) 'Anzahl
wksR.Cells(lZeile, 3) = Application.WorksheetFunction.SumIf(wksA.Range("E2:E" & lZA) _
, wksR.Cells(lZeile, 1), wksA.Range("N2:N" & lZA))
wksR.Cells(lZeile, 4) = Application.WorksheetFunction.SumIf(wksA.Range("E2:E" & lZA) _
, wksR.Cells(lZeile, 1), wksA.Range("S2:S" & lZA))
Next
Set wksA = Nothing
Set wksR = Nothing
End Sub

https://www.herber.de/bbs/user/139265.xlsm

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Berechen
24.07.2020 09:08:54
peterk
Hallo
WenN Du nur eine Zelle ansprichst ist "arr" kein Array sondern ein String und damit funktioniert auch Ubound/Lbound nicht.

Verschieden Möglichkeiten:
- Du fragst den Typ von "arr" ab:  If vartype(arr)=8 (String) =8204 (Array)
- Du verwendest LZA: If lZA > 2
Peter
AW: Berechen
24.07.2020 09:12:25
Daniel
HI
wenn du nur eine Zelle hast, ergibt arr = range(…) kein Array, sondern nur eine Einzelwertvariable.
diese musst du aber anders verarbeiten als ein Array.
ich würde hier einfach so vorgehen:
if lZA = 2 then
wksR.Range("A2") = wksA.Range("E2")
else
For x = LBound(arr) To UBound(arr)
objDic(arr(x, 1)) = 0
Next
wksR.Range("A2").Resize(objDic.Count) = WorksheetFunction.Transpose(objDic.keys)
End if

Gruß Daniel
Anzeige
AW: Berechen
24.07.2020 09:28:30
Sigi
Vielen Dank, peterK und Daniel,
hab's kapiert!
Gruß
Sigi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige