Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Konflikt beim Einlesen von Daten durch Worksheet_Change
#1
Hallo zusammen,

ich habe das Problem, dass mir beim Einlesen von Daten eine Fehlermeldung angezeigt wird, sofern Worksheet_Change aktiviert ist (Laufzeitfehler '9': Index außerhalb des gültigen Bereichs). Kommentiere ich hingegen Worksheet_Change aus während dem Einlesen der Daten und aktiviere es danach, funktioniert alles wie gewollt.

Code:
Option Explicit

Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("T3:Z3000,P3:P3000")) Is Nothing Then

   Target.Interior.ColorIndex = 6

   platzhalter
   LBProzentBerechnen
   EGGehalt

   LBBerechnen
   irwazBerechnen
   MEKhBerechnen
   JEK

   DeltaMEK35berechnen
   DeltaMEKIrwazberechnen
   DeltaMEKProzent

End If


End Sub

Meine zwei Programme zum Einlesen der Daten

Code:
Sub DatenEinlesen()


'Einlesen der Daten für die Spalten A bis M, sowie die Spalte AG

Call Readpersnr
Call Nameconvert
Call ReadEintritt
Call ReadDST
Call Readgeb
Call AlterEinlesen
Call DienstjahrFormelEinlesen

'Einlesen und gleichzeitiges kopieren der "Zukünftigen Daten" und der "Aktuellen Daten". Zudem werden Berechnungen angestoßen um Spaltenwerte zu ermitteln

Call ReadEG
Call ReadIRWAZSTD
Call Convertabcde
Call ReadLBUSZ
Call EGGehalt

Call platzhalter
Call LBProzentEinlesen
Call LBEinlesen
Call MEKhEinlesen
Call irwazEinlesen
Call JEK
Call DeltaMEK35berechnen
Call DeltaMEKIrwazberechnen
Call DeltaMEKProzent
           
End Sub

Code:
Sub ReadVorjahr()

Dim instring1 As String
Dim instring2 As String
Dim instring3 As String
Dim instring4 As String
Dim instring5 As String
Dim instring6 As String
Dim outstring() As String
Dim book, mybook As Workbook
Dim sourceline, destinationline As Integer
Dim Pfad As String
Dim location As String
Dim Identification As Long
Dim Help As Range


Set mybook = ActiveWorkbook
Pfad = (mybook.Worksheets("Parameter").Cells(2, 1))
Set book = Workbooks.Open(Filename:=Pfad, ReadOnly:=True)

sourceline = 3
destinationline = 3
Set Help = mybook.Worksheets("Gehaltsdaten").Range("A3:A3000")

On Error GoTo Fehler

While (destinationline < 1000)

'Nimmt die Personalnummer aus der Lasche "Mitarbeiterdaten" und ordnet die entsprechenden Daten anschliesen der richtigen Nummer in der Gehaltstabelle zu

Identification = book.Worksheets("Gehaltsdaten").Cells(destinationline, 1)

instring1 = book.Worksheets("Gehaltsdaten").Cells(destinationline, 9)       'Spalte I
instring2 = book.Worksheets("Gehaltsdaten").Cells(destinationline, 10)      'Spalte J
instring3 = book.Worksheets("Gehaltsdaten").Cells(destinationline, 11)      'Spalte K
instring4 = book.Worksheets("Gehaltsdaten").Cells(destinationline, 12)      'Spalte L
instring5 = book.Worksheets("Gehaltsdaten").Cells(destinationline, 13)      'Spalte M
instring6 = book.Worksheets("Gehaltsdaten").Cells(destinationline, 33)      'Spalte AG

location = WorksheetFunction.Match(Identification, Help, 0)


location = location + 2

mybook.Worksheets("Gehaltsdaten").Cells(location, 9) = instring1
mybook.Worksheets("Gehaltsdaten").Cells(location, 10) = instring2
mybook.Worksheets("Gehaltsdaten").Cells(location, 11) = instring3
mybook.Worksheets("Gehaltsdaten").Cells(location, 12) = instring4
mybook.Worksheets("Gehaltsdaten").Cells(location, 13) = instring5
mybook.Worksheets("Gehaltsdaten").Cells(location, 33) = instring6

Sprung:


destinationline = destinationline + 1

sourceline = sourceline + 1



Wend

book.Close savechanges:=False
Exit Sub

Fehler:
    Resume Sprung

End Sub

Da beim Einlesen der Daten auf Unterprogramme verwiesen wird, würde das den Rahmen meiner Ansicht sprengen, daher die Frage:

Gibt es eine Möglichkeit, wie ich Worksheet_Change solange unterdrücken kann, bis die Daten eingelesen wurden?

Bin über jede Hilfe dankbar!
Antworten Top
#2
Hallo,

füge vor dem Code 
Code:
Application.EnableEvents=False
ein und setze am Ende des Codes das Ganze wieder auf =True
Schöne Grüße
Berni
Antworten Top
#3
Verzichte auf worksheet events.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
@MisterBurns

Danke schonmal.
Ich habe es mit deinem Vorschlag versucht, jedoch reagiert dann Worksheet_Change gar nicht mehr. Könntest du mir evtl. sagen, wo bzw. in welchen Code das reingehört?


@snb
Danke schonmal.
Inwiefern verzichten, wo würdest du es dann sonst integrieren?
Antworten Top
#5
Hallo,
Sub DatenEinlesen()

On Error Resume Next
Application.EnableEvents = False


'Einlesen der Daten für die Spalten A bis M, sowie die Spalte AG

Call Readpersnr
Call Nameconvert
Call ReadEintritt
Call ReadDST
Call Readgeb
Call AlterEinlesen
Call DienstjahrFormelEinlesen

'Einlesen und gleichzeitiges kopieren der "Zukünftigen Daten" und der "Aktuellen Daten". Zudem werden Berechnungen angestoßen um Spaltenwerte zu ermitteln

Call ReadEG
Call ReadIRWAZSTD
Call Convertabcde
Call ReadLBUSZ
Call EGGehalt

Call platzhalter
Call LBProzentEinlesen
Call LBEinlesen
Call MEKhEinlesen
Call irwazEinlesen
Call JEK
Call DeltaMEK35berechnen
Call DeltaMEKIrwazberechnen
Call DeltaMEKProzent

Application.EnableEvents = True
On Error GoTo 0

End Sub
Gruß Uwe
Antworten Top
#6
Zeig mal was Makro Readpersnr beinhaltet.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#7
Vielen lieben Dank euch drei, es funktioniert so weit jetzt :)
@snb hier der Code
Code:
Sub Readpersnr()

Dim instring As String
Dim outstring() As String
Dim book, mybook As Workbook
Dim sourceline, destinationline As Integer
Dim Pfad As String

Set mybook = ActiveWorkbook
Pfad = (mybook.Worksheets("Parameter").Cells(2, 2))
Set book = Workbooks.Open(Filename:=Pfad, ReadOnly:=True)

sourceline = 3
destinationline = 3

While (book.Worksheets("Gehaltsbestandteile").Cells(sourceline, 1) <> "")


instring = book.Worksheets("Gehaltsbestandteile").Cells(sourceline, 1)


mybook.Worksheets("Gehaltsdaten").Cells(destinationline, 1) = instring



destinationline = destinationline + 1

sourceline = sourceline + 1


Wend

book.Close




End Sub

Noch eine Verständnisfrage, soweit man das aus dem zur Verfügung gestellten Code rauslesen kann. Warum muss ich lediglich bei "DatenEinlesen" und nicht bei "ReadVorjahr" die Sache mit Application.EnableEvents machen?
Antworten Top
#8
Ganz einfach, weil dein Makro "DatenEinlesen" ja nichts anderes macht als die anderen Makros aufzurufen.
Würdest du "ReadVorjahr" separat aufrufen, müsstest du es genauso reinschreiben.
Schöne Grüße
Berni
Antworten Top
#9
Hallo Berni,

so wie ich das sehe ruft Jonas die Makros DatenEinlesen und ReadVorjahr jeweils separat auf. Ich vermute, das Change-Ereignis befindet sich nicht in der Tabelle Gehaltsdaten und daher wird das Change-Ereignis beim Starten von ReadVorjahr auch nicht ausgelöst.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
Ja, völlig richtig erkannt Stefan. Danke. Hab ich wieder mal nicht genau gelesen, ich habe nur "Readblablabla" gesehen...  Blush
Schöne Grüße
Berni
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste