PDA

Vollständige Version anzeigen : Makro funktioniert nur bei mir


Martin1986
05.04.2012, 08:31
Hallo zusammen,

ich habe einen Code geschrieben, der mir aus einer Quelldatei eine oder mehrere relevante Datensätze in verschiedene Zieldateien kopiert.

Wenn ich das Makro ausführe, läuft alles genau so wie ich es möchte. Wenn aber mein Kollege neben mir das Makro an seinem PC ausführt, bekommt er die Fehlermeldung "Index außerhalb des gültigen Bereichs".

Wenn ich mittels F8 schrittweise durch den Code gehe, tritt der Fehler an der folgenden Stelle auf:
.
.
.
If depotnummer = "82996601" Then
Workbooks(zusatz).Sheets("Tabelle1").Select
.
.
.

Kann mir jemand sagen, wieso dieser Fehler bei ihm auftritt, aber nicht bei mir??

Im Voraus schon mal vielen Dank für eure Hilfe.

Viele Grüße
Martin

EarlFred
05.04.2012, 08:49
Hallo Martin,

Kann mir jemand sagen
...anhand dieses nichtssagenden Codefetzens? Vermutlich nein.

Grüße
EarlFred

Martin1986
05.04.2012, 09:05
Sorry für meinen Codeschnipsel, ich dachte es gibt bei Worksheets()... einen Standardfehler, den ich über Google bloß nicht gefunden habe. Trotzdem schon mal vielen Dank für die schnelle Antwort.

Anbei mein Code:



Sub Anteilsberechnung()

Dim strDatei, strVerzeichnis As String
Dim strDateiname, strBezeichnung1, strBezeichnung2, strDate As String
Dim i, zeile, anf As Integer
Dim hilf1, hilf2, depotnummer, heute, stichtag, zielDatei As String

'******************************************************************************* *****************************


'Berechne das heutige Datum
heute = Date

'Formatiere das Datum von heute so um, dass es mit dem Datum aus dem Dateinamen vergleichbar ist
strDate = Mid(heute, 7, 4) & Mid(heute, 4, 2) & Mid(heute, 1, 2)

'Zielverzeichnis festlegen
zielVerzeichnis = "I:\ZIELVERZEICHNIS\"
'Verzeichnis der Datei festlegen und den konstanten ersten Teil des Dateinamens bestimmen
strVerzeichnis = "O:\QUELLVERZEICHNIS"
strDateiname = "W_0217_V0001_Anteilsberechnung_"

'mittleren Teil des aktuellen Dateinamens konstruieren
'z.B. "W_0217_V0001_Anteilsberechnung_" und "20120330" statt
' "b65135.W_0217_V0001_Anteilsberechnung_20120329_20120330102955"
strBezeichnung1 = strDateiname
strBezeichnung2 = strDate


'******************************************************************************* *****************************

'Gehe den Ordner durch, bis die aktuelle Datei gefunden wurde. Falls Datei nicht vorhanden ist, Fehlermeldung ausgeben und Makro beenden

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOrdner = objFSO.GetFolder(strVerzeichnis)

AnzDateien = objOrdner.Files.Count

Set fso = CreateObject("Scripting.FileSystemObject")
Count = 1
For Each file In fso.GetFolder(strVerzeichnis).Files
fn = file.Name
'betrachte den eindeutigen relevanten mittleren Teil des Dateinamens
hilf1 = Mid(fn, 8, 31)
hilf2 = Mid(fn, 48, 8)
If hilf1 = strBezeichnung1 And hilf2 = strBezeichnung2 Then
strDatei = fn
Exit For
End If
i = i + 1
If i = AnzDateien Then
MsgBox "Aktuelle Datei nicht vorhanden. Bitte später nochmal starten. "
Exit Sub
End If

Next




'öffne die Datei mit den täglichen Daten aus SAS (steht in O:\Produktiv\sas\Handel)
'Local := True sorgt dafür, dass die Semikolons als Trennzeichen interpretiert werden und
'jeder Wert in der richtigen Spalte steht
Workbooks.Open Filename:=strVerzeichnis & "\" & strDatei, Local:=True

'******************************************************************************* *****************************


'i=2 da in der Quelldatei die Daten erst ab der zweiten Reihe vorkommen. In Zeile 1 stehen die Feldnamen
i = 2
'Gehe für jedes Depot einmal durch die Schleife und kopiere die Werte in die jeweilige Datei (abhängig von der Depotnummer)
Do While Range("A" & i).Value <> ""

'Der erste relevante Eintrag steht immer in der zweiten Zeile
anf = i
'Falls zu einer Depotnummer mehrere Einträge vorhanden sind, kopiere diese zusammen)
Do While Range("I" & i).Value = Range("I" & (i + 1)).Value
i = i + 1
Loop
'aktuelle Depotnummer bestimmen
depotnummer = Range("I" & i).Value

'aktuellen Stichtag bestimmen
stichtag = Range("A" & i).Value


'die Variable "zeile" bestimmt die letzte Zeile, die die aktuelle Depotnummer enthält
zeile = i
'in der Zeile unter "zeile" steht die nächste Depotnummer
i = zeile + 1

'Kopiere von den relevanten Zeilen die ersten sieben Spalten (Datum - Anzahl_Umsätze)
Range(Cells(anf, 1), Cells(zeile, 7)).Select
Selection.Copy

'wechsel in die jeweilige Zieldatei (abhängig von der aktuellen Depotnummer)
If depotnummer = "AA" Or depotnummer = "BB" Or depotnummer = "CC" Then
zielDatei = "Vienna Life"
ElseIf depotnummer = "DD" Then
zielDatei = "Testdatei"
Else
MsgBox ("Unbekannte Depotnummer!! - Makro bricht ab")
End If


Workbooks.Open Filename:=zielVerzeichnis & zielDatei
If zielDatei = "Vienna Life" Then
If depotnummer = "AA" Then
Workbooks(zielDatei).Sheets("Tabelle1").Select
ElseIf depotnummer = "BB" Then
Workbooks(zielDatei).Sheets("Tabelle2").Select
ElseIf depotnummer = "CC" Then
Workbooks(zielDatei).Sheets("Tabelle3").Select
End If
End If

If zielDatei = "Testdatei" Then
If depotnummer = "DD" Then
Workbooks(zielDatei).Sheets("Tabelle1").Select
End If
End If


'Füge die kopierten Zeilen unten ein
z = 6
Do While Len(Cells(z, 1)) > 0 'Bestimme erste leere Zeile um Daten einzufügen
z = z + 1
Loop

Range("A" & z).PasteSpecial xlPasteValues

End Sub

Martin1986
05.04.2012, 09:50
Hallo zusammen,

vorab ein Dankeschön an jeden, der sich mit meiner Problematik auseinander gesetzt hat.
Da ich immer wieder neue Auflagen bekommen habe, was am Ende rauskommen soll, sieht mein Code auch alles andere als sauber aus, wofür ich mich entschuldigen möchte. Das war auch der Grund, wieso ich ihn am Anfang nicht gepostet habe.

Mittlerweile konnte ich das Problem beheben. Ich habe mir für meine Quell- und Zieldateien eigene Workbook-Objekte erstellt. Jetzt kann auch mein Kollege das Makro problemlos ausführen.

Damit kann das Thema geschlossen werden :)

Einen schönen Tag noch und viele Grüße,
Martin