ich habe ein Problem wo ich nicht weiterkomme. Ich habe ein Makro welches eine andere Excel Datei (Quelldatei) öffnet und sich dort 2 Werte rausholt und die zu Datei schreibt in der das Makro ausgeführt wird. Wenn ich die Quelldatei geschlossen habe läuft das Makro sauber durch. Ist die Quelldatei erst geöffnet und das Makro startet dann bricht das Makro mit Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs ab. Ich weiß leider nicht warum.
Kann mir jemand behilflich sein? Ich nutze Office 2016.
Option
Explicit
Private
Sub
Workbook_Open()
Dim
oTargetBook
As
Object
Dim
oSourceBook
As
Object
Dim
sDatei
As
String
Dim
Jahr
As
String
Dim
Projektnummer
As
String
Dim
Adresse()
As
String
Dim
Angebotsnummer
As
String
Dim
Angebotssumme
As
Currency
Dim
Einsatzzeit
As
String
Dim
Angebotssumme_Alt
As
String
Dim
Einsatzzeit_Alt
As
String
Dim
Pfad
As
String
Dim
Angebot
As
String
Dim
intLeerPos
As
Integer
Projektnummer = Range(
"Projektnummer"
).Value
Jahr = Right(Projektnummer, 2)
Angebotssumme_Alt = Range(
"Angebotssumme"
).Value
Einsatzzeit_Alt = Range(
"Einsatzzeit"
).Value
Einsatzzeit_Alt = WorksheetFunction.RoundUp(Einsatzzeit_Alt, 0)
If
Dir(
"F:\AAA Projekte\20"
& Jahr &
"\" & Projektnummer & "
\
" & Range("
Angebotsnummer
").Value & "
*.xlsx
") <> "
"
Then
Application.ScreenUpdating =
False
Set
oTargetBook = ActiveWorkbook
sDatei =
"F:\AAA Projekte\20"
& Jahr &
"\" & Projektnummer & "
\
" & Range("
Angebotsnummer
").Value & "
*.xlsx"
Set
oSourceBook = Workbooks.Open(sDatei,
False
,
True
)
Angebotssumme = oSourceBook.Sheets(
"Kalkulation"
).Range(
"Angebotssumme_netto"
).Value
If
Angebotssumme <> Angebotssumme_Alt
Then
oTargetBook.Sheets(
"Tabelle1"
).Range(
"Angebotssumme"
).Value = Angebotssumme
oTargetBook.Save
End
If
If
NameVorhanden(
"Kalkulation!Angebotsstunden"
, oSourceBook) =
True
Then
Einsatzzeit = oSourceBook.Sheets(
"Kalkulation"
).Range(
"Angebotsstunden"
)
Einsatzzeit = Application.WorksheetFunction.Round(Einsatzzeit, 0)
If
Einsatzzeit <> Einsatzzeit_Alt
Then
oTargetBook.Sheets(
"Tabelle1"
).Range(
"Einsatzzeit"
).Value = Einsatzzeit
oTargetBook.Save
End
If
End
If
If
NameVorhanden(
"Kalkulation!Akkordstunden"
, oSourceBook) =
True
Then
Einsatzzeit = oSourceBook.Sheets(
"Kalkulation"
).Range(
"Akkordstunden"
)
Einsatzzeit = WorksheetFunction.RoundUp(Einsatzzeit, 0)
If
Einsatzzeit <> Einsatzzeit_Alt
Then
oTargetBook.Sheets(
"Tabelle1"
).Range(
"Einsatzzeit"
).Value = Einsatzzeit
oTargetBook.Save
End
If
End
If
oSourceBook.Close
False
Application.ScreenUpdating =
True
Set
oTargetBook =
Nothing
Set
oSourceBook =
Nothing
End
If
End
Sub
Function
NameVorhanden(
ByVal
s
As
String
, wkb
As
Workbook)
As
Boolean
Dim
n
As
Name
For
Each
n
In
wkb.Names
If
n.Name = s
Then
NameVorhanden =
True
Exit
For
End
If
Next
End
Function