Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Warum hängt sich Excel bei folgendem Code auf?

Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 10:42:21
Fabian
Hallo,
ich habe leider kaum VBA Kenntnisse, benötig es aber für ein Projekt und habe dann mit Hilfe von Google und Try and Error den Code des folgenden Dummys erstellt.
Gedanke dahinter ist, dass man auf dem Tabellenblatt 1 den Energieträger, das Betriebsjahr und den Monat per Dropdown auswählt. Excel soll sich dann automatischen die dazugehörigen Werte aus Tabelle 2 suchen. Habe versucht das ganze mit HLOOKUP umzusetzen. Hat soweit auch geklappt und ich kann mit den Werten weiterrechnen. Sobald ich mir allerdings mehr als eins der drei Zwischenergebnisse zur Kontrolle ausgeben lasse, hängt sich Excel sofort auf.
Kann mir jemand sagen woran das liegt?
Hier der Dummy: https://www.herber.de/bbs/user/134081.xlsm
Vielen Dank für eure Hilfe
Fabian
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 10:51:38
Fabian

Private Sub Worksheet_Change(ByVal Target As Range)
'Energieträger auswählen
If Range("D2").Value = "Solare Strahlungsenergie" Then
'Werte zu gewähltem Bundesland finden
Dim B As String
B = Range("G2")
Dim BB As Variant
BB = WorksheetFunction.HLookup(B, Sheets("Tabelle2").Range("B6:Q7"), 2, False)
'Werte zu Inbetriebnahmejahr finden
Dim J As Long
J = Range("G5")
Dim JJ As Variant
JJ = WorksheetFunction.HLookup(J, Sheets("Tabelle2").Range("B2:S3"), 2, False)
'Werte zu Inbetriebnahmenmonat finden
Dim M As String
M = Range("G6")
Dim MM As Variant
MM = WorksheetFunction.HLookup(M, Sheets("Tabelle2").Range("B10:M11"), 2, False)
'gefunden Werte ausgeben
Range("D12").Value = BB
Range("D13").Value = JJ
Range("D14").Value = MM
End If
End Sub
Das hier ist der entspechende Code
Anzeige
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 11:07:22
Christian
hallo Fabian,
abgesehen von den falschen Zelladressen (siehe Antwort von Onur)...
du musst den Bereich, in dem das Worksheets-Change Ereignis augewertet werden soll, auf die Zelle "D2" beschränken. Anderfalls wird das Ereignis bei jedem Schreiben und Überschreiben der Zellen "D12" bis "D14" immer wieder neu ausgelöst und das führt zu einer Endlos-Schleife.
Bsp:
Schreibe als erste Zeile:
If Intersect(Range("D2"), Target) Is Nothing Then Exit Sub
Gruß
Christian
Anzeige
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 11:29:57
Fabian
Vielen Dank habe das Problem gelöst.
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 10:57:28
onur

Dim J As Long
J = Range("G5")
In G5 steht z.B. "November" - wieso also Long?
JJ = WorksheetFunction.HLookup(J, Sheets("Tabelle2").Range("B2:S3"), 2, False)

Du suchst somit "November" in B2:S3 - also da, wo Jahreszahlen stehen ?
Anzeige
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 11:06:31
Fabian
Oh Entschuldigung das war ein Fehler beim übertragen auf den Dummy.
Es lautet:
Dim J As Long
J = Range("G4")
und
Dim M As String
M = Range("G5")
dann sucht er auch an der richtigen Stelle nach der Jahreszahl.
Das Problem mit den Aufhängen bleibt dadurch aber leider bestehen.
Anzeige
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 11:21:09
onur
Am Anfang der Sub:
Application.EnableEvents = False
und direkt vor End Sub:
Application.EnableEvents = True
AW: Warum hängt sich Excel bei folgendem Code auf?
02.01.2020 11:51:20
Werner
Hallo,
du mußt den Bereich, bei dem bei Änderung der Code ausgelöst wird, auf den Bereich deiner DropDown Zellen beschränken. Dann brauchst du kein ApplicationEvents = False bzw. True nicht.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim raBereich As Range
Set raBereich = Range("D2,G2:G5")
'Energieträger auswählen
If Not Intersect(Target, raBereich) Is Nothing Then
If Range("D2") Like "Solar*" Then
'Werte zu gewähltem Bundesland finden
Range("D12") = WorksheetFunction.HLookup(Range("G2"), Sheets("Tabelle2") _
.Range("B6:Q7"), 2, False)
'Werte zu Inbetriebnahmejahr finden
Range("D13") = WorksheetFunction.HLookup(Range("G5"), Sheets("Tabelle2") _
.Range("B10:M12"), 2, False)
'Werte zu Inbetriebnahmenmonat finden
Range("D14") = WorksheetFunction.HLookup(CLng(Range("G4")), Sheets("Tabelle2") _
.Range("B2:S3"), 2, False)
End If
End If
Und deine ganzen Variablen brauchst du doch auch nicht, du kannst doch das Ergebnis des Loopup direkt in die Zellen schreiben lassen.
Gruß Werner
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige