Home Office-Hilfe.com - Wir lösen Ihr Problem mit Microsoft Excel, Word, Outlook, PowerPoint, Access gratis Forum Impressum

 [Excel 2002] Monatszahlenzuordnung
Neues Thema eröffnenNeue Antwort erstellen
Autor Nachricht
Christine
Newbie
Newbie


Anmeldedatum: 17.07.2007
Beiträge: 21

BeitragVerfasst am: 07.08.2008, 18:28 Nach oben

Hallöchen,

Ich hätte ein kleines und wahrscheinlich banales Problem.
Ich hab einen Code der Zahlen aus Monatsarbeitsblättern in eine Tabelle einer anderen Arbeitsmappe einfügt. Es ist ganz deutlich programmirt dass wenn das Tabellenblatt 1 ist, also Januar, dass er dann in der dazugehörigen Tabelle diese Zahl in die Zeile einer Zelle einfügt die auch eine 1 enthält. Aber irgendwie klappt es nicht. Ich hoffe ich habe es irgendwie verständlich erklärt.
Könnt ihr mir sagen wo der Fehler liegt?

Danke schon im Vorraus.

[code]Sub AddKstToJahresdiagramm(ByVal kst As Integer, ByVal wert As Integer, ByVal month As Integer)
' Finden des Projekts zu der Kostenstelle
Dim projektName As String

If wert = 0 Then
Exit Sub
End If

With Tabelle3
' finde das projekt zu der kst
Dim currZeile As Integer
currZeile = 7
Do While (.Cells(currZeile, 4).Value <> "" Or .Cells(currZeile, 5).Value <> "" Or .Cells(currZeile, 6).Value <> "")
If .Cells(currZeile, 4).Value = kst Then
projektName = .Cells(currZeile, 8).Value
Exit Do
End If
currZeile = currZeile + 1
Loop

If projektName = "" Then
MsgBox "Kein Projektname für Kostenstelle " & kst & " gefunden"
Exit Sub
End If

' Finden der Tabelle für dieses Projekt in der Jahresübersicht
currZeile = jahresdiagrammZeile
Do While (.Cells(currZeile, 1).Value <> "ENDE DER TABELLE")
If .Cells(currZeile, 1).Value = projektName Then
' Suche den passenden monat
Dim i As Integer

For i = 1 To 24
If .Cells(currZeile + i, 1).Value = month Then
' Finden der Kostenstelle-Spalte
Dim j As Integer
j = 1
Do While (.Cells(jahresdiagrammZeile, j).Value <> "")
If .Cells(jahresdiagrammZeile, j).Value = kst Then
' Gibt es bereits einen Wert für diese Konstelation?
Dim neuerWert As Integer
If .Cells(currZeile + i, j).Value <> "" Then
neuerWert = .Cells(currZeile + i, j).Value + wert
Else
neuerWert = wert
End If

' den neuen Wert eintragen
.Cells(currZeile + i, j).Value = neuerWert
End If
j = j + 1
Loop
End If
Next i
End If
currZeile = currZeile + 1
Loop

End With
End Sub[/code]
Benutzer-Profile anzeigenPrivate Nachricht senden
schatzi
Moderator
Moderator


Anmeldedatum: 09.12.2006
Beiträge: 5729

BeitragVerfasst am: 07.08.2008, 19:30 Nach oben

Hallo!

Ich bin zwar VBA-Anwender im Anfangs-Stadium, aber jetzt wird's schwierig...
1. Keiner außer dir kennt hier die übergebenen Variablen kst, wert und month.
2. Die Variable jahresdiagrammZeile kennen wir auch nicht. (oder habe ich etwas übersehen?)
3.
Zitat:
Es ist ganz deutlich programmirt dass wenn das Tabellenblatt 1 ist, also Januar, dass er dann in der dazugehörigen Tabelle diese Zahl in die Zeile einer Zelle einfügt die auch eine 1 enthält.

In diesem Fall ist "Deutlichkeit" äußerst subjektiv, denn eine solche Abfrage kann ich nicht entdecken... (Hilf mir auf die Sprünge, bitte!)

Daher erstmal nur dieser Hinweis:
Die Excel-Formel =MONAT(0) ergibt auch 1.
Solltest du also Nullwerte in deiner Tabelle haben, dann könnte hier der Fehler liegen.

_________________

Viele Grüße vom Schatzi

------------------------
Ich bin nur noch sporadisch erreichbar!
Bitte hofft nicht auf eine schnelle Beantwortung einer Rückfrage meinerseits!
Jeder andere Helfer darf Rückfragen gerne übernehmen und hilft sicher gerne weiter!
Benutzer-Profile anzeigenPrivate Nachricht senden
miriki
Schlauberger
Schlauberger


Anmeldedatum: 05.03.2007
Beiträge: 461
Wohnort: Kiel

BeitragVerfasst am: 08.08.2008, 11:14 Nach oben

Christine hat Folgendes geschrieben:
Ich hätte ein kleines und wahrscheinlich banales Problem.

Hmmm... Also... Ich hab den Source mal durchgeguckt und etwas umformatiert. Vor allem:
* Ich mag keine GOTOs und versuche aus gleichem Grund, auch EXITs zu vermeiden. Deswegen sehen die IF-Konstrukte in meiner Version etwas anders aus.
* Einrückungen im Source machen diesen bedeutend leichter lesbar. Das kann aber auch nur deswegen verloren gegangen sein, weil die <code> Formatierung in Deinem Posting nicht funktionierte.

2 der Variablen kann man nur erraten:
* jahresdiagrammZeile - sieht nach Konstante aus, die nur eine Startzeile angibt. Das scheint dann unkritisch.
* Tabelle3 - Refenz auf ein Tabellenblatt, unkritisch.

Die 3 Übergabewerte kst, wert und month sind im Prinzip auch unkritisch. Aber: "month" als Variablenname ist sehr unglücklich, da es auch eine gleichlautende Funktion gibt. Ähnlich wie z.B. auch "name" sollte man solche Variablennamen vermeiden. Ich glaub's zwar nicht, aber vielleicht löst das Ändern dieses Namens schon Dein Problem?

Code:
Option Explicit

Sub AddKstToJahresdiagramm(ByVal kst As Integer, ByVal wert As Integer, ByVal month As Integer)

Dim projektName As String
Dim currZeile As Integer
Dim i As Integer
Dim j As Integer
Dim neuerWert As Integer
Dim jahresdiagrammZeile As Long
Dim Tabelle3 As Worksheet

    Set Tabelle3 = Worksheets(1)
    jahresdiagrammZeile = 1

    If wert <> 0 Then
        With Tabelle3

            ' finde das projekt zu der kst
            projektName = "": currZeile = 7
            Do While (projektName = "") And (.Cells(currZeile, 4).Value <> "" Or .Cells(currZeile, 5).Value <> "" Or .Cells(currZeile, 6).Value <> "")
                If .Cells(currZeile, 4).Value = kst Then
                    projektName = .Cells(currZeile, 8).Value
                End If
                currZeile = currZeile + 1
            Loop

            If projektName <> "" Then

                ' Finden der Tabelle für dieses Projekt in der Jahresübersicht
                currZeile = jahresdiagrammZeile
                Do While (.Cells(currZeile, 1).Value <> "ENDE DER TABELLE")
                    If .Cells(currZeile, 1).Value = projektName Then
                        ' Suche den passenden monat
                        For i = 1 To 24
                            If .Cells(currZeile + i, 1).Value = month Then
                                ' Finden der Kostenstelle-Spalte
                                j = 1
                                Do While (.Cells(jahresdiagrammZeile, j).Value <> "")
                                    If .Cells(jahresdiagrammZeile, j).Value = kst Then
                                        ' Gibt es bereits einen Wert für diese Konstelation?
                                        If .Cells(currZeile + i, j).Value <> "" Then
                                            neuerWert = .Cells(currZeile + i, j).Value + wert
                                          Else
                                            neuerWert = wert
                                        End If
                                        ' den neuen Wert eintragen
                                        .Cells(currZeile + i, j).Value = neuerWert
                                    End If
                                    j = j + 1
                                Loop
                            End If
                        Next i
                    End If
                    currZeile = currZeile + 1
                Loop

              Else
                MsgBox "Kein Projektname für Kostenstelle " & kst & " gefunden"
            End If
        End With
    End If
End Sub


Den ganzen Block
Code:
                                        If .Cells(currZeile + i, j).Value <> "" Then
                                            neuerWert = .Cells(currZeile + i, j).Value + wert
                                          Else
                                            neuerWert = wert
                                        End If
                                        ' den neuen Wert eintragen
                                        .Cells(currZeile + i, j).Value = neuerWert

kannst Du auch bedeutend kürzer als
Code:
                                        ' den neuen Wert eintragen
                                        .Cells(currZeile + i, j).Value = .Cells(currZeile + i, j).Value + neuerWert

schreiben. Denn: Ist die Zeile leer, wird der Wert als "0" interpretiert und hat somit keinen Einfluß. Das DIM für neuerWert kann entsprechend entfallen.

Die DIM für currZeile, i und j würde ich persönlich übrigens auch eher auf "long" setzen, aber das hat hier wahrscheinlich keinen Einfluß.

Deine Aussage
Zitat:
Aber irgendwie klappt es nicht.

ist ja nun aber auch etwas... ähm... unspezifisch... Wink Was genau klappt denn nicht? Findet er den Projektnamen schon nicht? Oder findet er bei gefundenem Projektnamen nicht die zugehörige Tabelle? Oder den passenden Monat?

Wenn das Ding irgendwas tut, was es nicht sollte, dafür aber etwas nicht tut, was man erwartet, dann sind ja normalerweise immer irgendwelche IF-Konstrukte dafür, also für vermeintlich falsche Wege, verantwortlich. Setz ruhig mal den einen oder anderen Breakpoint auf die IF-Zeilen und laß Dir bei Erreichen der Zeilen im Überwachungsfenster mal die relevanten Variablen anzeigen. Meist bringt das schon Licht ins Dunkel. Wink

Gruß, Michael
Benutzer-Profile anzeigenPrivate Nachricht sendenICQ-Nummer
Beiträge der letzten Zeit anzeigen:      
Neues Thema eröffnenNeue Antwort erstellen



 Gehe zu:   



Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen

Haftungsausschluss/Disclaimer


SMS kostenlos versenden | Battle-Dream | Tuning Forum | Join the YoungGeneration | krankenversicherungsvergleich | Kalorienarme Rezepte!
Versicherungsvergleich | Bürobedarf | Papier | Betten

Ranking-Hits



Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Alle Zeiten sind GMT + 1 Stunde
Deutsche Übersetzung von phpBB.de