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

TimeScaleData, mir fehlt eine Schleife.

TimeScaleData, mir fehlt eine Schleife.
28.04.2008 15:31:00
Juan
Hallo zusammen,
weiter in der Absicht einige Daten aus MS Project zu importieren bin ich jetzt auf einen neuen Problem gestoßen.
Um die Projektkosten und den Aufwand intervallmäßig abzufragen benutze ich die Funktion
TimeScaleData (StartDate, EndDate, Type [Kosten, Arbeit,...], Unit [täglich, monatlich, quartalsweise,...], Count).
Bis dahin alles in Ordnung.
Und nun das Problem: es gibt keine halbmonatliche "Unit".
Man kann es wöchentlich machen, sogar 14-tägig wenn man "Count := 2" stellt.
Aber nicht halbmonatlich (1. bis 15., 16. bis Ende des Monates).
Der einzige Weg der dies vielleicht noch ermöglichen würde, wäre die Daten durch eine Schleife zu iterieren, indem die tägliche Werte irgendwie nach diesen Intervallen/Muster (1.-15., 16.-Ende, 1.-15, ...) addiert werden. Leider fällt mir diesbezüglich nichts ein.
Die intervallmässige Werte sollten in eine Tabelle geschrieben werden, die ab der 4. Spalte anfängt.
Hat jemand eine Idee?
Ich lege den Code bei und hoffe dass jemand mir damit helfen kann.
Beste Grüße,
Juan.

Private Sub CmdImportRes_Click()
Dim Datei As String
Dim pfad
Dim r As Integer
Dim mApp As MSProject.Application
Dim proj As MSProject.Project
Dim xlcell As Range
Dim found As Boolean
Dim sdatum As Date
Dim edatum As Date
Dim ResName As String
Dim c As Range, RR As Range
Dim x As Integer, AnzInt As Integer
Dim strValue As String
Dim tsv As Object
pfad = Application.GetOpenFilename("Microsoft Project Datei (*.mpp), *.mpp")
If pfad = False Then
MsgBox "Keine Datei wurde ausgewählt."
Exit Sub
Else
Datei = Mid$(pfad, InStrRev(pfad, "\") + 1)
Datei = Left(Datei, Len(Datei) - 4)
MsgBox Datei & vbCrLf & pfad, vbInformation
End If
Set mApp = New MSProject.Application
found = False
If mApp.Visible = True Then
MsgBox "visible", vbInformation
If mApp.Projects.Count > 0 Then
MsgBox "> 0", vbInformation
For Each proj In mApp.Projects
MsgBox proj.Name, vbInformation
If proj.Name = Datei Then
found = True
proj.Activate
MsgBox "activated", vbInformation
End If
Next
End If
End If
If found = True Then
MsgBox "works...", vbInformation
mApp.Visible = False
viewapply (mApp.ActiveProject.ViewList(3))
Set xlcell = Range("A2")
For r = 1 To mApp.ActiveProject.Resources.Count
If Not mApp.ActiveProject.Resources.Item(r) Is Nothing Then
If mApp.ActiveProject.Resources.Item(r).Type = 0 Then   '  _
pjResourceTypeWork
xlcell.Value = mApp.ActiveProject.Resources.Item(r).Name
Set xlcell = xlcell.Offset(1, 0) 'step down 1 row
ElseIf mApp.ActiveProject.Resources.Item(r).Type = 1 Then
xlcell.Value = mApp.ActiveProject.Resources.Item(r).Name
Set xlcell = xlcell.Offset(1, 0)
End If
End If
Next
sdatum = ActiveSheet.Range("C24").Value
edatum = ActiveSheet.Range("C25").Value
AnzInt = DateDiff("d", sdatum, edatum) + 1
For Each c In ActiveSheet.Range("RangeRessourcen")
ResName = Cells(c.Row, 1).Value
If ResName  "" Then
For r = 1 To mApp.ActiveProject.Resources.Count
If Not mApp.ActiveProject.Resources.Item(r) Is Nothing Then
If mApp.ActiveProject.Resources.Item(r).Name = ResName Then
Application.Caption = "Datensatz" & r
Application.Cells(c.Row, 2).Value = (mApp.ActiveProject. _
Resources(r).Cost)* 1        'gesamte Kosten
Application.Cells(c.Row, 3).Value = (mApp.ActiveProject. _
Resources(r).Work / 60)* 1        'gesamte Arbeit
For x = 1 To AnzInt
Set tsv = mApp.ActiveProject.Resources(r).TimeScaleData( _
sdatum, edatum, Type:=13, TimescaleUnit:=4)   'pjResourcesTimeScaledWork, täglich
'HIER SOLLTE DIE SCHLEIFE LIEGEN
'strValue = Val(tsv(x).Value) / 60
'Application.Cells(c.Row, x + 3).Value = strValue * 1
Next x
End If
End If
Next r
Set tsv = Nothing
End If
Next
Application.Cells(1, 1).Select
ElseIf found = False Then
Set mApp = New MSProject.Application
mApp.Visible = False
mApp.FileOpen pfad
viewapply (mApp.ActiveProject.ViewList(3))
Set xlcell = Range("A2")
For r = 1 To mApp.ActiveProject.Resources.Count
'-------- hier kommt das gleiche nochmal --------
Next
Application.Cells(1, 1).Select
mApp.FileClose pjDoNotSave
End If
Set mApp = Nothing
Set xlcell = Nothing
Set tsv = Nothing
Range("A1").Select
End Sub


2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: TimeScaleData, mir fehlt eine Schleife.
01.05.2008 02:29:00
fcs
Hallo Juan,
ich kenne die Objekte nicht, die die MS-Projekt Funktionen/Methoden erzeugen.
Wenn die Funktion eine einspaltige Matrix mit den Werten für jeden Tag zwischen Anfang und Ende erzeugt, dann müsste folgendes funktionieren:

Set tsv = mApp.ActiveProject.Resources(r).TimeScaleData( _
sdatum, sdatum, Type:=13, TimescaleUnit:=4) 'pjResourcesTimeScaledWork, täglich
For x = 1 To AnzInt
'Testzeile zur Kontrolle der Ergebnisse, löschen wenn alles funktioniert
MsgBox "Datum: " & Format(sdatum + x - 1, "DD.MM.YYYY") & "Wert: " _
& tsv(x).Value 'Testzeile
'Warum in der nächsten Zeile die Val-Funktion? Wird tsv als eine Matrix mit _
Stringwerten zurückgegeben?
Application.Cells(c.Row, x + 3).Value = Val(tsv(x).Value) / 60
'    Application.Cells(c.Row, x + 3).Value = tsv(x).Value / 60
Next x


Es kann aber sein, dass der Matrix-Zeilenzähler schon bei 0 beginnt. Dann muss du die Schleifenzähler anpassen.
Gruß
Franz

Anzeige
AW: TimeScaleData, mir fehlt eine Schleife.
02.05.2008 10:15:00
juan
Hallo Franz,
zunächst einmal Danke für die Antwort!
Ich hatte in den letzten Tagen keinen Zugriff aufs Forum, deswegen melde ich mich so spät. Sorry.
Inzwischen hatte ich auch mehr Zeit um mich die TimeScaleData-Methode näher anzuschauen, und konnte das Problem lösen. Ich habe auch festgestellt, dass ich einige grundsätzliche Konzepte falsch verstanden hatte. Mein Code war dementsprechend schwer zu verstehen. Von daher vielen Dank für die Mühe.
Zu deiner Frage ob tsv als eine Matrix mit Stringwerten zurückgegeben wird kann ich keine 100% sichere Antwort geben, aber ich denke schon, dass es sich um Stringwerte handelt.
Ich wünsche Dir einen schönen Tag.
Beste Grüße,
Juan.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige