Thema Datum  Von Nutzer Rating
Antwort
Rot Laufzeitfehler 5 Kosten berechnen
18.09.2015 10:06:16 Susanne
NotSolved
18.09.2015 12:30:24 Gast63818
NotSolved
18.09.2015 12:36:02 Gast18845
NotSolved

Ansicht des Beitrags:
Von:
Susanne
Datum:
18.09.2015 10:06:16
Views:
1406
Rating: Antwort:
  Ja
Thema:
Laufzeitfehler 5 Kosten berechnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
Hallo,
 
bei mir kommt immer der Laufzeitfehler 5 bei folgender Programmierung. Wie kann ich dies beheben?
 
Option Explicit
 
Public Function Günstigste() As String
 
Dim Haefen As Collection
 
Rem min-Kosten pro hafen (wert 0 = noch nicht gefunden)
Dim kostenBahn As Collection
Dim kostenUmschlag As Collection
Dim kostenSchiff As Collection
Dim guenstigsteNameBahn As Collection
Dim guenstigsteNameUmschlag As Collection
Dim guenstigsteNameSchiff As Collection
 
Set Haefen = New Collection
Set kostenBahn = New Collection
Set kostenUmschlag = New Collection
Set kostenSchiff = New Collection
Set guenstigsteNameBahn = New Collection
Set guenstigsteNameUmschlag = New Collection
Set guenstigsteNameSchiff = New Collection
 
Call HaefenErmitteln(Haefen)
Call KostenErmitteln(Haefen, kostenSchiff, guenstigsteNameSchiff, kostenBahn, guenstigsteNameBahn, kostenUmschlag, guenstigsteNameUmschlag)
 
Günstigste = GuenstigsteErmitteln(Haefen, kostenSchiff, guenstigsteNameSchiff, kostenBahn, guenstigsteNameBahn, kostenUmschlag, guenstigsteNameUmschlag)
MsgBox Günstigste
 
End Function
 
Private Function HaefenErmitteln(Haefen As Collection)
 
    Dim hafenIdx As Integer
    Dim hafen As String
    Dim c As Object
     
    Dim firstAddress As Variant
 
    Rem Ermitteln, von welchen Hafen Schiff zu Zielort möglich ist
    With Tabelle1.Range("C2:C65535")
        Rem Zielort finden
        Set c = .Find(Tabelle2.Range("B2").Value)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                Rem Zeitraum vergleichen
                If c.Offset(0, 1).Value = Tabelle2.Range("B3").Value Then
                    Rem Hafennamen auslesen
                    hafen = c.Offset(0, -2).Value
                     
                    Rem Prüfen, ob Hafenname schon mal verarbeitet
                    For hafenIdx = 0 To Haefen.Count - 1
                        If Haefen.Item(hafenIdx + 1) = hafen Then
                            Exit For
                        End If
                    Next hafenIdx
                     
                    If hafenIdx = Haefen.Count Then
                        If Haefen.Count = 0 Then
                            Rem Hafen vorher noch nicht gefunden
                            Haefen.Add (CStr(hafen))
                        Else
                            If Not Haefen.Item(Haefen.Count) = hafen Then
                                Rem Hafen vorher noch nicht gefunden
                                Haefen.Add (CStr(hafen))
                            End If
                        End If
                    End If
                End If
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
End Function
 
Private Function KostenErmitteln(Haefen As Collection, kostenSchiff As Collection, guenstigsteNameSchiff As Collection, kostenBahn As Collection, guenstigsteNameBahn As Collection, kostenUmschlag As Collection, guenstigsteNameUmschlag As Collection)
 
    Dim hafenIdx As Integer
    Dim hafen As String
     
    Dim guenstigsteKosten As Integer
    Dim guenstigsteName As String
 
    Dim kosten As Integer
    Dim name As String
     
    Dim kostenZiel As Collection
    Dim guenstigsteNameZiel As Collection
 
    Dim logistikInZeile As String
     
    Dim c As Object
    Dim i As Integer
     
    Dim firstAddress As Variant
 
    With Tabelle1.Range("A2:A65535")
        hafenIdx = 0
        For hafenIdx = 0 To Haefen.Count - 1
            hafen = Haefen(hafenIdx + 1)
         
            Set c = .Find(hafen)
            firstAddress = c.Address
            Do
                logistikInZeile = c.Offset(0, 4).Value
                 
                Rem Sicherstellen, dass bei "Schiff" nur richtiger Zielort und Zeitraum bewertet wird
                If logistikInZeile <> "Schiff" Or (logistikInZeile = "Schiff" And c.Offset(0, 2).Value = Tabelle2.Range("B2").Value And c.Offset(0, 3).Value = Tabelle2.Range("B3").Value) Then
                    Select Case logistikInZeile
                        Case "Schiff"
                            Set kostenZiel = kostenSchiff
                            Set guenstigsteNameZiel = guenstigsteNameSchiff
                        Case "Bahn"
                            Set kostenZiel = kostenBahn
                            Set guenstigsteNameZiel = guenstigsteNameBahn
                        Case "Umschlag"
                            Set kostenZiel = kostenUmschlag
                            Set guenstigsteNameZiel = guenstigsteNameUmschlag
                    End Select
                     
                    i = 0
                    guenstigsteKosten = -1
                    guenstigsteName = ""
                    Do While Tabelle1.Range("F1").Offset(0, i).Value <> "" And Tabelle1.Range("F1").Offset(0, i).Value <> ""
                        name = Tabelle1.Range("F1").Offset(0, i).Value
                        kosten = c.Offset(0, 5 + i).Value
                         
                        If kosten <> 0 And (guenstigsteKosten = -1 Or kosten < guenstigsteKosten) Then
                            guenstigsteName = name
                            guenstigsteKosten = CInt(kosten)
                        End If
                        i = i + 1
                    Loop
                     
                    If hafenIdx = kostenZiel.Count Then
                        kostenZiel.Add (guenstigsteKosten)
                        guenstigsteNameZiel.Add (guenstigsteName)
                    Else
                        Rem Überschreibe Wert an Stelle (nur möglich, wenn zwei gleiche Zeilen pro Hafen + Logistik)
                        kostenZiel(hafenIdx + 1) = guenstigsteKosten
                        guenstigsteNameZiel(hafenIdx + 1) = guenstigsteName
                    End If
                End If
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
             
            Rem auffüllen, wenn etwas nicht gefunden (Schiff wird immer gefunden wg. sub HaefenErmitteln
            If hafenIdx = kostenUmschlag.Count Then
                kostenSchiff.Add (-1)
            End If
            If hafenIdx = kostenBahn.Count Then
                kostenBahn.Add (-1)
            End If
        Next hafenIdx
    End With
End Function
 
Private Function GuenstigsteErmitteln(Haefen As Collection, kostenSchiff As Collection, guenstigsteNameSchiff As Collection, kostenBahn As Collection, guenstigsteNameBahn As Collection, kostenUmschlag As Collection, guenstigsteNameUmschlag As Collection) As String
 
    Dim hafenIdx As Integer
    Dim kosten As Integer
     
    Dim guenstigsteKosten As Integer
    Dim guenstigsteHafenIdx As Integer
     
    hafenIdx = 0
    guenstigsteKosten = -1
    For hafenIdx = 0 To Haefen.Count - 1
         
        Rem Ausschließen, wenn entweder keine Bahn oder kein Umschlag
        If kostenBahn(hafenIdx + 1) <> -1 And kostenUmschlag(hafenIdx + 1) <> -1 Then
            kosten = kostenSchiff(hafenIdx + 1) + kostenUmschlag(hafenIdx + 1) + kostenBahn(hafenIdx + 1)
             
            If guenstigsteKosten = -1 Or kosten < guenstigsteKosten Then
                guenstigsteKosten = kosten
                guenstigsteHafenIdx = hafenIdx
            End If
        End If
    Next hafenIdx
     
    GuenstigsteErmitteln = "Guenstigster Hafen: " + Haefen(guenstigsteHafenIdx + 1) + " - Kosten: " + CStr(guenstigsteKosten) + " - Schiff: " + guenstigsteNameSchiff(guenstigsteHafenIdx + 1) + " - Umschlag: " + guenstigsteNameUmschlag(guenstigsteHafenIdx + 1) + " - Bahn: " + guenstigsteNameBahn(guenstigsteHafenIdx + 1)
End Function

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Laufzeitfehler 5 Kosten berechnen
18.09.2015 10:06:16 Susanne
NotSolved
18.09.2015 12:30:24 Gast63818
NotSolved
18.09.2015 12:36:02 Gast18845
NotSolved