Thema Datum  Von Nutzer Rating
Antwort
15.03.2018 11:39:19 David
NotSolved
15.03.2018 11:57:05 Magnus
NotSolved
Rot Makro läuft zu lange
15.03.2018 12:09:46 Gast82776
NotSolved

Ansicht des Beitrags:
Von:
Gast82776
Datum:
15.03.2018 12:09:46
Views:
698
Rating: Antwort:
  Ja
Thema:
Makro läuft zu lange
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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
Vielen Dank für den Hinweis Magnus! Mit chrome ist es gelaufen
 
 
Private Sub Cancel_Click()
    Unload Win
End Sub
Private Sub Start_Click()
    Dim reportneu, reportalt, dokneu As Worksheet, dokalt As Worksheet, repneu As Worksheet, repalt As Worksheet, wbk As Workbook, pfad As String
    reportneu = Application.GetOpenFilename
    If reportneu = False Then
        Exit Sub
    Else
        Set dokneu = Workbooks.Open(reportneu).Worksheets("DOK")
        Set repneu = ActiveWorkbook.Worksheets("REP")
    End If
    pfad = dokneu.Parent.Path
    reportalt = Application.GetOpenFilename
    If reportalt = False Then
        Exit Sub
    Else
        Set dokalt = Workbooks.Open(reportalt).Worksheets("DOK")
        Set repalt = ActiveWorkbook.Worksheets("REP")
    End If
    Set wbk = Workbooks.Add
    wbk.Worksheets(3).Delete
    wbk.Worksheets(2).Delete
     
    If CheckBox1 = True Then
        wbk.Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Geloeschte Dokumente"
        Call geloeschte_Dokumente(dokneu, dokalt)
    End If
    If CheckBox2 = True Then
        wbk.Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Neue Versionen von Dokumenten"
        Call neue_Versionen_Dokumente(dokneu, dokalt)
    End If
    If CheckBox3 = True Then
        wbk.Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Neu hinzugefügte Dokumente"
        Call hinzugefuegte_Dokumente(dokneu, dokalt)
    End If
'    If CheckBox4 = True Then
'        wbk.Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Geloeschte Artikel"
'        Call geloeschte_Artikel(repneu, repalt)
'    End If
'    If CheckBox5 = True Then
'        wbk.Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Neue Versionen von Artikeln"
'        Call neue_Versionen_Artikel(repneu, repalt)
'    End If
'    If CheckBox6 = True Then
'        wbk.Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "Neu hinzugefügte Artikel"
'        Call hinzugefuegte_Artikel(repneu, repalt)
'    End If
     
    Unload Win
    wbk.Worksheets(1).Delete
    Application.DisplayAlerts = False
    dokneu.Parent.Close
    dokalt.Parent.Close
    wbk.SaveAs (pfad & "\Vergleich_MARA-Report.xlsx")
    Application.DisplayAlerts = True
End Sub
Sub geloeschte_Dokumente(wshneu As Worksheet, wshalt As Worksheet)
    'Gibt die Dokumente aus, die in der alten Version vorkommen, aber in der neuen fehlen
    Dim a As Long, z As Long, doknr As String, wsh As Worksheet, zelle As Range, erstezelle As String, suchbereich As Range, ergebnis As Range
    Set wsh = ActiveWorkbook.Worksheets("Geloeschte Dokumente")
    wshalt.Rows(1).Copy wsh.Rows(1)
    z = 2
    For a = 2 To wshalt.Cells(Rows.Count, 1).End(xlUp).Row
        If wshalt.Cells(a, 2).Value Like "*-*" Then
            doknr = Left(wshalt.Cells(a, 2), InStr(wshalt.Cells(a, 2), "-") - 1)
        Else
            doknr = Left(wshalt.Cells(a, 2), InStr(wshalt.Cells(a, 2), ".") - 1)
        End If
        Set zelle = wshneu.Columns(2).Find(what:=doknr, after:=wshneu.Cells(wshneu.Cells(Rows.Count, 1).End(xlUp).Row, 2))
        If zelle Is Nothing Then
            wshalt.Rows(a).Copy wsh.Rows(z)
            z = z + 1
        Else
            erstezelle = zelle.Address
            Set suchbereich = wshneu.Rows(zelle.Row)
            Do Until zelle Is Nothing
                Set zelle = wshneu.Columns(2).FindNext(after:=zelle)
                Set suchbereich = Union(suchbereich, wshneu.Rows(zelle.Row))
                If zelle.Address = erstezelle Then
                    GoTo weiter
                End If
            Loop
weiter:
            For Each cell In suchbereich
                If cell.Column = 1 And cell.Value = wshalt.Cells(a, 1).Value Then
                    Set ergebnis = cell
                End If
            Next
            If ergebnis Is Nothing Then
                wshalt.Rows(a).Copy wsh.Rows(z)
                z = z + 1
            End If
            Set ergebnis = Nothing
        End If
    Next a
    wsh.Activate
    wsh.Columns("A:D").AutoFit
End Sub
Sub neue_Versionen_Dokumente(wshneu As Worksheet, wshalt As Worksheet)
    'Gibt die Dokumente aus, die in der neuen Version einen höheren Index haben als in der alten
    Dim a As Long, b As Long, z As Long, doknr As String, wsh As Worksheet, zelle As Range
    Set wsh = ActiveWorkbook.Worksheets("Neue Versionen von Dokumenten")
    wshalt.Rows(1).Copy wsh.Rows(1)
    wsh.Columns(2).Insert
    wsh.Cells(1, 2).Value = "Dokument verlinkt - alte Version"
    wsh.Cells(1, 3).Value = "Dokument verlinkt - neue Version"
    z = 2
    For a = 2 To wshneu.Cells(Rows.Count, 1).End(xlUp).Row
        If wshneu.Cells(a, 2).Value Like "*-*" Then
            doknr = Left(wshneu.Cells(a, 2), InStr(wshneu.Cells(a, 2), "-") - 1)
        Else
            doknr = Left(wshneu.Cells(a, 2), InStr(wshneu.Cells(a, 2), ".") - 1)
        End If
        Set zelle = wshalt.Columns(2).Find(doknr)
naechste:
        If zelle Is Nothing = False Then
            If Left(wshalt.Cells(zelle.Row, 2), 13) <> Left(wshneu.Cells(a, 2), 13) And wshalt.Cells(zelle.Row, 1) = wshneu.Cells(a, 1) Then
                wshneu.Cells(a, 1).Copy wsh.Cells(z, 1)
                wshalt.Cells(zelle.Row, 2).Copy wsh.Cells(z, 2)
                wshneu.Cells(a, 2).Copy wsh.Cells(z, 3)
                wshneu.Cells(a, 3).Copy wsh.Cells(z, 4)
                wshneu.Cells(a, 4).Copy wsh.Cells(z, 5)
                z = z + 1
            End If
            Set zelle = wshalt.Range("B" & CStr(zelle.Row + 1) & ":B" & CStr(wshalt.Cells(Rows.Count, 2).End(xlUp).Row)).FindNext
            GoTo naechste
        End If
        wsh.Activate
        wsh.Columns("A:E").AutoFit
    Next a
End Sub
Sub hinzugefuegte_Dokumente(wshneu As Worksheet, wshalt As Worksheet)
    'Gibt die Dokumente aus, die nur in der neuen Version vorkommen
    Dim a As Long, z As Long, doknr As String, wsh As Worksheet, zelle As Range, erstezelle As String, suchbereich As Range, ergebnis As Range
    Set wsh = ActiveWorkbook.Worksheets("Neu hinzugefügte Dokumente")
    wshneu.Rows(1).Copy wsh.Rows(1)
    z = 2
    For a = 2 To wshneu.Cells(Rows.Count, 1).End(xlUp).Row
        If wshneu.Cells(a, 2).Value Like "*-*" Then
            doknr = Left(wshneu.Cells(a, 2), InStr(wshneu.Cells(a, 2), "-") - 1)
        Else
            doknr = Left(wshneu.Cells(a, 2), InStr(wshneu.Cells(a, 2), ".") - 1)
        End If
        Set zelle = wshalt.Columns(2).Find(what:=doknr, after:=wshalt.Cells(wshalt.Cells(Rows.Count, 1).End(xlUp).Row, 2))
        If zelle Is Nothing Then
            wshneu.Rows(a).Copy wsh.Rows(z)
            z = z + 1
        Else
            erstezelle = zelle.Address
            Set suchbereich = wshalt.Rows(zelle.Row)
            Do Until zelle Is Nothing
                Set zelle = wshalt.Columns(2).FindNext(after:=zelle)
                Set suchbereich = Union(suchbereich, wshalt.Rows(zelle.Row))
                If zelle.Address = erstezelle Then
                    GoTo weiter
                End If
            Loop
weiter:
            For Each cell In suchbereich
                If cell.Column = 1 And cell.Value = wshneu.Cells(a, 1).Value Then
                    Set ergebnis = cell
                End If
            Next
            If ergebnis Is Nothing Then
                wshneu.Rows(a).Copy wsh.Rows(z)
                z = z + 1
            End If
            Set ergebnis = Nothing
        End If
    Next a
    wsh.Activate
    wsh.Columns("A:D").AutoFit
End Sub
'Sub geloeschte_Artikel(wshneu As Worksheet, wshalt As Worksheet)
'    Dim a As Long, b As Long, z As Long, artnr As String, wsh As Worksheet, spalteneu As Integer, spaltealt As Integer
'    Dim zelle As Range, erstezelle As String, suchbereich As Range, ergebnis As Range, e As Integer
'    Set wsh = ActiveWorkbook.Worksheets("Geloeschte Artikel")
'    wshalt.Rows(1).Copy wsh.Rows(1)
'    spalteneu = 1
'    Do While wshneu.Cells(1, spalteneu).Value Like "*artikel*nummer*" = False
'        spalteneu = spalteneu + 1
'    Loop
'    spaltealt = 1
'    Do While wshalt.Cells(1, spaltealt).Value Like "*artikel*nummer*" = False
'        spaltealt = spaltealt + 1
'    Loop
'    z = 2
'    a = 2
'    b = 2
'    Do While a <= wshalt.Cells(Rows.Count, 1).End(xlUp).Row
'        If wshalt.Cells(a, spaltealt).Value = wshneu.Cells(b, spalteneu) Then
'            'überprüft, ob der Artikel revisioniert wurde - wenn nicht, wird er übersprungen
'            If wshalt.Cells(a, spaltealt + 1).Value = wshneu.Cells(b, spalteneu + 1) And wshalt.Cells(a, 2).Value > 1 Then
'                e = wshalt.Cells(a, 2).Value
'                'überspringt alles, was zu diesem Artikel gehört
'                Do While wshalt.Cells(a, 2).Value < e
'                    a = a + 1
'                Loop
'                b = a
'            else
'End Sub

 


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
15.03.2018 11:39:19 David
NotSolved
15.03.2018 11:57:05 Magnus
NotSolved
Rot Makro läuft zu lange
15.03.2018 12:09:46 Gast82776
NotSolved