Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
692to696
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
692to696
692to696
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datum

Datum
07.11.2005 04:36:50
gnilk
Hallo Leute,
ich habe eine Tabelle mit Auftraegen. Diese Auftraege haben einen in Geldeinheiten bewerteten Betrag. Des Weiteren sind die Auftraege mit einem Datum besehen.
Wenn ich jetzt z.B. die Summe der Betraege fuer den Februar haben will, dann setze ich den Autofilter und setze ihn mir dem entsprechend, dass mir nur die Betraege vom Februar angezeigt werden.
Mein Makro nimmt jedoch als Suchkriterium (so habe ich es programmiert) immer den 31 eines Monats, dadurch habe ich das Problem, dass im Februar nichts gefunden wird. Der Wert ist dadurch 0.
Hier mein Code ohne

Sub und End Sub
:
' hier sollen die ganzen forwards aufgezaehlt werden
' am besten mache ich das mit einem for to Kram, gibt aber Kopfschmerzen
Dim bcklgunt_i As Long
Dim bcklgunt_i2 As Long
Dim fwdMon As Long
Dim fwdMonnJ As Long
Dim i As Long
Dim jahr As Long
For i = 1 To 13
fwdMon = ComboBox1 + i
If fwdMon > 12 Then fwdMonnJ = ComboBox1 + i - 12
If fwdMon > 12 Then jahr = 2000 + ComboBox2 + 1
If fwdMon > 12 Then _
ActiveCell.Range("A1").AutoFilter field:=8, _
Criteria1:=" bcklgunt_i = Worksheets("Daten").Range("A1").Offset(1, 6).End(xlDown).Row
' hier wird die Formel fuer die Zelle gemacht
If bcklgunt_i = 65536 Then _
x.Worksheets("overview (month)").Cells(8 + i, 3) = 0 _
Else _
x.Worksheets("overview (month)").Cells(8 + i, 3).FormulaLocal = _
"=SUM(Daten!G2:G" & bcklgunt_i & ") - SUM(C7:C" & 7 + i & ")"
' x.Worksheets("overview (month)").Cells(8 + i, 3).Copy
' x.Worksheets("overview (month)").Cells(8 + i, 3).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
If fwdMon ActiveCell.Range("A1").AutoFilter field _
:=8, Criteria1:=" bcklgunt_i2 = Worksheets("Daten").Range("A1").Offset(1, 6).End(xlDown).Row
' hier wird die Formel fuer die Zelle gemacht
If bcklgunt_i2 = 65536 Then _
x.Worksheets("overview (month)").Cells(8 + i, 3) = 0 _
Else _
x.Worksheets("overview (month)").Cells(8 + i, 3).FormulaLocal = _
"=SUM(Daten!G2:G" & bcklgunt_i2 & ") - SUM(C7:C" & 7 + i & ")"
' x.Worksheets("overview (month)").Cells(8 + i, 3).Copy
' x.Worksheets("overview (month)").Cells(8 + i, 3).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
Next i
Schaut es Euch am Besten mal an. Vielleicht findet ihr ja einen anderen Weg, wie ich es loesen kann.
Vielen Dank im Voraus
ciao
Gnilk

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum
07.11.2005 07:30:06
Erich
Hallo Klaus,
dein Code war etwas schwer zu lesen. Ungetestet (und ohne Kenntnis deiner UserForm und deiner Daten): Versuchs mal so:

Dim i As Integer
Dim fiJah As Integer, fiMon As Integer, fiTag As Integer, fiDat As String
Dim bcklgunt_i As Long
For i = 1 To 13
If ComboBox1 + i <= 12 Then
fiJah = ComboBox2
fiMon = ComboBox1 + i
fiTag = ComboBox12       ' steht da der Tag drin ?
Else
fiJah = ComboBox2 + 1
fiMon = ComboBox1 + i - 12
fiTag = Day(DateSerial(fiJahr, fiMon + 1, -1) - 1) ' Monatsletzter
End If
fiDat = Format(DateSerial(fiJahr, fiMon, fiTag), "mm/dd/yy")
ActiveCell.AutoFilter field:=8, Criteria1:="<=" & fiDat
'                          hier wird die Formel fuer die Zelle gemacht
bcklgunt_i = Cells(7, 7).End(xlDown).Row
If bcklgunt_i < 65536 Then
Cells(8 + i, 3).FormulaLocal _
= "=SUM(Daten!G2:G" & bcklgunt_i & ") - SUM(C7:C" & 7 + i & ")"
Else
Cells(8 + i, 3) = 0
End If
' x.Worksheets("overview (month)").Cells(8 + i, 3).Copy
' x.Worksheets("overview (month)").Cells(8 + i, 3).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
Next i

Noch ein paar Tipps nebenbei:
Für das Posten von Code gibts hier die Möglichkeit, vor dem Code fünf Zeichen zu schreiben: Kleinerzeichen p r e Größerzeichen
Hinter den Code gehören dann sechs Zeichen: Kleinerzeichen / p r e Größerzeichen
If-Blöcke sind so

If x > 12 Then
y = 1
Else
y = 2
End If

viel übersichtlicher als
If x > 12 Then _
y = 1 _
Else y = 2
mit den Forsetzungszeichen.
Besser und kürzer ist meist

If x > 12 Then
y = 1
Else
y = 2
End If
'statt
If x > 12 Then
y = 1
End If
If x <= 12 Then
y = 2
End If

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datum
08.11.2005 01:20:03
gnilk
Hallo Erich,
Du bist zu gut! Ich bin echt begeistert was Du da hin gezaubert hast! Ist so etwas schwer? Irgendwie fehlt mir da wohl noch ein bisschen das abstrakte Denken um so etwas zu machen. Und mit den Datum-Funktionen kannte ich bis heute gar nicht aus. Es hat alles so geklappt wie Du mir es beschrieben hast. Ok, ein paar Aenderungen waren noch noetig um das Makro zum Laufen zu bringen. Aber im Grossen und Ganze hat es meinen Vorstellungen entsprochen.
Ich habe Dir am Ende noch einmal meinen Code angehaengt. Also so, wie er laueft. Vielleicht interessiert es Dich ja. Kostet ja nix!
Wie lange bist Du eigentlich schon am VBA programmieren? Bei mir ist der dritte Monat, daher sieht alles bei mir noch ein wenig nach Holzhammer aus. Bin auch gar kein Programmierer, bin eigentlich angehender Wirtschaftsingenieur (8. Semester), bin fast fertig und mache gerade ein Praktikum in Australien.
Rueckmeldung waere nett.
Vielen Dank noch einmal
Ciao
Gnilk
Hier der Code wie ich verwendet habe. Aenderungen maginal!
Dim i As Integer
Dim fiJah As Integer, fiMon As Integer, fiTag As Integer, fiDat As String
Dim bcklgunt_i As Long
For i = 1 To 13
If ComboBox1 + i &lt= 12 Then
fiJah = ComboBox2
fiMon = ComboBox1 + i
fiTag = ComboBox4 ' steht da der Tag drin ?
Else
fiJah = ComboBox2 + 1
fiMon = ComboBox1 + i - 12
fiTag = Day(DateSerial(fiJah, fiMon + 1, 1 - 1)) ' Monatsletzter
End If
fiDat = Format(DateSerial(fiJah, fiMon, fiTag), "mm/dd/yy")
x.Worksheets("Daten").Range("A1").AutoFilter field:=8, Criteria1:="&lt=" & fiDat
' hier wird die Formel fuer die Zelle gemacht
bcklgunt_i = x.Worksheets("Daten").Cells(7, 7).End(xlDown).Row
If bcklgunt_i &lt 65536 Then
x.Worksheets("overview (month)").Cells(8 + i, 3).FormulaLocal _
= "=SUM(Daten!G2:G" & bcklgunt_i & ") - SUM(C7:C" & 7 + i & ")"
' ist nur zum testen muss ich spaeter wieder loeschen
x.Worksheets("overview (month)").Cells(8 + i, 4).FormulaLocal _
= fiDat
Else
Cells(8 + i, 3) = 0
End If
x.Worksheets("overview (month)").Cells(8 + i, 3).Copy
x.Worksheets("overview (month)").Cells(8 + i, 3).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next i
Anzeige
AW: Datum
08.11.2005 07:47:02
Erich
Hallo Klaus,
danke für deine Rückmeldung - war echt nett!
Ich habe gesehen, dass du die Macken aus meinem Code ausgebaut hast - bei der Berechnung des Monatsletzten lag ich ja voll (einen vollen Tag) daneben,

Day(DateSerial(fiJah, fiMon + 1, 0))
wäre richtig gewesen.
Dafür war das ja auch nur ein "Trockenschwimmen" - für einen Test hätte ich mir erst noch eine passende Umgebung (Userform, Comboboxen, ...) anlegen müssen.
Wenn du wieder einmal Code postest, denk doch bitte an die PRE-Tags, die hatte ich dir beschrieben. Dann ist es gleich viel besser lesbar.
Für jemanden, der seinen Vornamen nicht gern nennt ( https://www.herber.de/forum/archiv/676to680/t679752.htm#679801 ), schreibst du recht viel über dich - und möchtest auch viel über mich wissen. Kein Problem: Auch ich bin von der Ausbildung her kein Programmierer, sondern Mathematiker - da ist abstraktes Denken schon gefordert. Das gilt sicher auch für Wirtschaftsingenieure, oder?
Zu VBA bin ich über Algol60, Fortran IV, IBM-Basic, Cobol (alles in der Vor-PC-Zeit) und Word-Basic gekommen und verdiene seit acht Jahren meine Brötchen als selbständiger Softwareentwickler, hauptsächlich mit Excel, Access und dabei jeweils viel VBA. Insgesamt sind da schon ein paar Jahre zusammen gekommen...
Dafür, dass du erst im dritten VBA-Monat bist, beschäftigst du dich schon mit ziemlich anspruchsvollen Dingen. Was wird da wohl bis zum neunten Monat alles entstehen? Vielleicht beantwortet sich die einfach Frage dadurch, dass wir uns bis dahin ab und zu hier im Forum begegnen ...
Grüße von Erich aus Kamp-Lintfort ins ferne Australien
Anzeige
AW: Datum
08.11.2005 23:46:24
gnilk
Hallo Erich,
ja ja das mit dem Vornamen ist so eine Sache. Jetzt mal im ernst. Ich benutze meinen Nickname schon bevor ich das Internet kennengelernt habe. Habe in der Schulzeit gerne Comics gemalt und schon diesen Namen benutzt. Hat sich bei mir so ergeben.
Vielen dank fuer Deine Antwort von Gestern. Hat mich motiviert mehr in VBA zu schreiben. Der Kram machtauch auf eine gewisse Art und Weise suechtig. Man hat naemlich jeden Tag Erfolgserlebnisse, Niederlagen und neue Kenntnisse. Wuensche Dir noch viel Spass und wir lesen bestimmt wieder von einander.
Ciao
Gnilk

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige