Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
744to748
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
744to748
744to748
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro hängt sich auf. Wo ist der Fehler?

Makro hängt sich auf. Wo ist der Fehler?
17.03.2006 17:00:07
Matthias
Hallo,
ich habe untenstehenden Code, der sich Immer innerhalb der Funtktion "intSzenario_Spalte" aufzuhängen scheint. Allerdings kann ich leider nicht den Fehler finden woran es liegt, dass das Makro nicht durchläuft. Hat jm. von Euch eine Idee?
Grüße Matthias


Option Explicit
Sub EmpfängerAuswählen()
    ReportGenerieren 0, True
End Sub
Sub ReportGenerieren(intEmpfänger As Integer, bolAuswahlZeigen As Boolean)
'************************
'* Variablendeklaration *
'************************
    Dim intAuswahl As Integer           'Enthält Auswahl des Empfängers aus DialogSheet
    Dim intSpalteLayout As Integer      'für individuellen Bericht gewünschte Spalte
    Dim intSpalteVAR As Integer         'aus "VAR" zu übertragende Spalte
    Dim intSpalteVARCOL As Integer      'in "VARCOL" übertragene Spalte
    Dim i As Integer                    'Zählvariable
    Dim shVAR As Worksheet              'variables Rechenblatt
    Dim shVARCOL As Worksheet           'generierter Berichtsausschnitt
    Dim shLAYOUT As Worksheet           'enthält die Spaltendefinitionen für "VARCOL"
    Dim strFormel As String             'enthält Formel aus Layout
    Dim strSzenario1 As String
    Dim strSzenario2 As String
    Dim intNenner As Integer
    Dim intZaehler As Integer
    Set shVAR = Worksheets("VAR")       'weist Variable "shVAR" die Tabelle "VAR" zu
    Set shVARCOL = Worksheets("VARCOL") 'weist Variable "shVARCOL" die Tabelle "VARCOL" zu
    Set shLAYOUT = Worksheets("LAYOUT") 'weist Variable "shLAYOUT" die Tabelle "LAYOUT" zu
'******************************************************************************************
'* ruft DialogSheet "D_BerichtWaehlen" zur Auswahl des gewünschten Berichtsempfängers auf *
'* und übergibt die Auswahl an die Variable "intEmpfänger"                                *
'******************************************************************************************
    If bolAuswahlZeigen Then
        DialogSheets("D_BerichtWaehlen").Show
        intEmpfänger = DialogSheets("D_BerichtWaehlen").ListBoxes("Liste").ListIndex
    End If
    Application.ScreenUpdating = False       'deaktiviert Bildschirmdarstellung
    Application.Calculation = xlManual       'deaktiviert Tabellenberechnung
    shVARCOL.Range("D7:IV79").Delete         'löscht alte Berichtsbestandteile in "VARCOL"
'******************************************************************************************
'* Sucht die in "LAYOUT" definierten Spalten in "VAR" und stellt auf "VARCOL" Bezüge zu   *
'* den gefundenen Spalten her, damit sich bei einem Quellenwechsel auch der Bericht auf   *
'* "VARCOL" automatisch anpasst                                                           *
'******************************************************************************************
    If intEmpfänger Then
        intSpalteLayout = 2
        intSpalteVARCOL = 4
        Do
            intSpalteVAR = 4
            Do
                strFormel = shLAYOUT.Cells(intEmpfänger + 1, intSpalteLayout)
                If Left$(strFormel, 6) = "Growth" Then
                    strSzenario1 = Mid$(strFormel, 8, InStr(8, strFormel, "/", vbTextCompare) - 1 - 7)
                    strSzenario2 = Right$(strFormel, Len(strFormel) - InStr(8, strFormel, "/", vbTextCompare))
                    intNenner = intSzenario_Spalte(strSzenario1)
                    intZaehler = intSzenario_Spalte(strSzenario2)
                    Sheets("VARCOL").Cells(10, intSpalteVARCOL).FormulaR1C1 = "=VAR!R10C" & intZaehler & "/VAR!R10C" & intNenner & " -1"
                Else
 '***************************************************
 '* sucht die "LAYOUT" definierten Spalten in "VAR" *
 '***************************************************
                If shVAR.Cells(7, intSpalteVAR) = strFormel Then
                MsgBox "intSpalteVAR: " & intSpalteVAR & " strFormel: " & strFormel
 '*******************************************************************
 '* -durchläuft "VAR" so lange, bis in "LAYOUT" leere Zelle         *
 '* -wird eine Spalte gefunden, wird in "VARCOL" zur entsprechenden *
 '*  Spalte in "VAR" ein Bezug hergestellt                          *
 '*******************************************************************
                 Sheets("VARCOL").Activate                    'erforderlich für Verknüpfungen
                    For i = 7 To 78                           'durchläuft VAR-Zeilen 7 - 78
                        shVAR.Cells(i, intSpalteVAR).Copy     'kopiert die Spalten aus VAR
                        With shVARCOL                         'fügt Spalten in "VARCOL" ein
                            .Cells(i, intSpalteVARCOL).Select 'notwendig für .Paste Link:=True
                            .Paste                            'fügt zunächst alles ein
                            .Paste Link:=True                 'ersetzt Einträge durch Bezüge
                        End With
                    Next i
                    intSpalteVARCOL = intSpalteVARCOL + 1     'springt eine Zelle nach rechts
                    Exit Do
                End If
                intSpalteVAR = intSpalteVAR + 1               'springt eine Zelle nach rechts
'*************************************************************************************
'* -durchsucht die komplette Zeile in "VAR" nach den in "LAYOUT" definierten Spalten *
'* -wird diese nicht gefunden, erfolgt ein Schleifenabbruch und Ausgabe einer        *
'*  Fehlermeldung mit Sprung zu der in "LAYOUT" falsch definierten Spalte            *
'*************************************************************************************
                If intSpalteVAR > 256 Then                    'Ende von "VAR" wurde erreicht
                    Application.ScreenUpdating = True
                    Sheets("Layout").Activate
                    Cells(intEmpfänger + 1, intSpalteLayout).Select
                    MsgBox shLAYOUT _
                    .Cells(intEmpfänger + 1, intSpalteLayout) & " Spalte existiert in VAR nicht"
                    Exit Sub
                End If
                End If
            Loop
              intSpalteLayout = intSpalteLayout + 1           'springt eine Zelle nach rechts
        Loop Until _
             shLAYOUT.Cells(intEmpfänger + 1, intSpalteLayout) = "" 'durchläuft LAYOUT-Zeile
    End If                                                             'bis leere Zelle
    shVARCOL.Select
    Columns("D:IV").ColumnWidth = 13.56                       'passt die Spaltenbreite an
    Rows("7:7").RowHeight = 132                               'passt die Zeilenhöhe an
    Application.Calculation = xlAutomatic                     'aktiviert Tabellenberechnung
End Sub
Function intSzenario_Spalte(strSzenario As StringAs Integer
    Sheets("VAR").Select
    On Error GoTo fehler
    Cells.Find(What:=strSzenario, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                        False, SearchFormat:=False).Activate
    intSzenario_Spalte = ActiveCell.Column
    On Error GoTo 0
    Exit Function
fehler:
    MsgBox strSzenario & ": Szenario existiert nicht!"
    End
End Function

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro hängt sich auf. Wo ist der Fehler?
17.03.2006 19:09:26
ChrisL
Hallo Matthias
Versuchs mal mit dem Debugger d.h. die Funktion losgelöst testen und dabei die On Error Anweisungen rausnehmen. So erfährst du wenigstens die exakte Fehlermeldung und du kannst das Problem eingrenzen. Könnte zum Beispiel sein, dass keine Zelle aktiv ist (ActiveCell fehlt) oder... Rätselraten.
Und das Select würde ich rausnehmen.
Gruss
Chris

Function intSzenario_Spalte(strSzenario As String) As Integer
On Error GoTo fehler
Sheets("VAR").Cells.Find(What:=strSzenario, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
intSzenario_Spalte = ActiveCell.Column
On Error GoTo 0
Exit Function
fehler:
MsgBox strSzenario & ": Szenario existiert nicht!"
End
End Function

Anzeige
Hoffnungsloser Fall?
18.03.2006 22:27:12
Matthias
Hallo zusammen,
auch nach 2 Tagen habe ich mein Problem noch nicht gelöst bekommen. ich habe das makro schritt für schritt getestet und durchgecheckt, finde aber den fehler nicht, wieso sich das makro immer aufhängt.
Kann vielleicht nochmal jemand einen Blick darauf werfen?
Grüße Matthias
AW: Hoffnungsloser Fall?
18.03.2006 22:31:56
Dieter
Hi,
das baut doch niemand nach, lad die eine aufs Wesentliche verschlankte Mappe hoch.
mfg Dieter
AW: Hier die Datei zum Problem
18.03.2006 23:57:47
Dieter
Hi,
was hat in Excel 2003 ein Dialogsheet aus Excel 95 zu suchen?
Deklarier zunächst mal alle Variablen.
mfg Dieter
Anzeige
Immer noch keine Lösung?!?
19.03.2006 14:53:34
Matthias
Hallo Dieter,
die Variablen sind alle deklariert, daran kanns also nicht liegen. Darüber hinaus hat mir auch das Dialog-Sheet keine Probleme bereitet. Der Fehler muss wo anders liegen, allerdings finde ich ihn einfach nicht!!
Grüße Matthias
AW: Immer noch keine Lösung?!?
19.03.2006 15:42:19
Reinhard
Hi Matthias,
mit welchem Code startest du denn die Sub?
Vielleicht ist vba die Angabe "Cells" zu wenig refereniert?
Function intSzenario_Spalte(strSzenario As String) As Integer
Sheets("VAR").Select
On Error GoTo fehler
Cells.Find(What:=strSzenario, After:=ActiveCell, LookIn:=xlFormulas, LookAt _

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Immer noch keine Lösung?!?
19.03.2006 15:50:27
Matthias
Hallo Reinhard,
ich start die SUB hier:


If intEmpfänger Then
    intSpalteLayout = 2
    intSpalteVARCOL = 2
    Do
        intSpalteVAR = 2
        Do
         strFormel = shLAYOUT.Cells(intEmpfänger + 1, intSpalteLayout)
            If Left$(strFormel, 6) = "Growth" Then
                    strSzenario1 = Mid$(strFormel, 8, InStr(8, strFormel, "/", vbTextCompare) - 1 - 7)
                    strSzenario2 = Right$(strFormel, Len(strFormel) - InStr(8, strFormel, "/", vbTextCompare))
                    intNenner = intSzenario_Spalte(strSzenario1)
                    intZaehler = intSzenario_Spalte(strSzenario2)
                    Sheets("VARCOL").Cells(3, intSpalteVARCOL).FormulaR1C1 = "=VAR!R10C" & intZaehler & "/VAR!R10C" & intNenner & " -1"


Das müsste eigentlich soweit passen, oder lieg hier schon der Fehler?
Grüße Matthias
Anzeige
AW: Immer noch keine Lösung?!?
19.03.2006 18:48:27
Reinhard
Hi Matthias,
nein, ich meinte nicht den Funktionsaufruf sondern wie/wo du die Generieren() aufrufst.
Ich fand da keinen Code dazu, dsshalb musste ich einen basteln.
Und zu meiner zweiten Frage, welcher Zellenbereich ist denn mit Cells gemeint?
Sub testen()
Dim empf As Integer, x As Boolean
empf = 2
x = True
Call Generieren(empf, x)
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Immer noch keine Lösung?!?
19.03.2006 19:04:40
Matthias
Hi Reinhard,
Gnerieren () wird über das Dialog_Sheet angestoßen. Nach Auswahl eines Benutzers springt das Marko zu Generieren ().Das Modul Abweichungen war noch von einem Test in der Datei drin und hat daher keine bedeutung.
Gruß Matthias
Anzeige
AW: Immer noch keine Lösung?!?
19.03.2006 19:15:31
Reinhard
Hi Matthias,
gut muss ic noc mal schauen.
Wieso beantwortest du nicht meine Fragen zu Cells?
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Immer noch keine Lösung?!?
19.03.2006 19:23:19
Matthias
Hi Reinhard,
mit Cells meine ich die Zellen auf VAR. Das Programm soll in VAR Zelle suchen, die mit der Variablen übergeben wird. Die Suchfunktion stammt aus einer Aufzeichnung, so konnte ich die Zelle auch finden. Die Variable enthält auch die richtige Zelle. Ich habe die Datei nochmal angehängt, damit du siehst, wo das Programm hängen bleibt. Ich erhalte immer die Fehlermeldung: Objektvariable oder With-Blockvariable nicht festgelegt.
https://www.herber.de/bbs/user/32031.xls
Grüße Matthias
Anzeige
Editor zeigt Sheets(6) nicht an?
19.03.2006 19:26:54
Reinhard
Hi Matthias,
im Editor wird mir das Blatt "Choose_benutzer" überhaupt nicht aufgelistet!?
Und im Blatt selbst sehe ich sowas wie eine Userform aber die Buttons sind nicht anklickbar, sind eher Grafiken, denn Auschneiden kann ich die Buttons. (makros sind aktiviert und ich bin nicht im Entwurfsmodus)
Ich habe Excel2000, vielleicht liegt es daran.
Frage noch offen.
Gruß
Reinhard
AW: Editor zeigt Sheets(6) nicht an?
19.03.2006 19:31:18
Matthias
Hi Reinhard,
das passt schon. Das makro ruft dieses dialog-sheet ja auf, in dem es auf das blatt in der Tabelle zugreift. dann stehen die buttons zur verfügung. setzte einfach den curser vor die erste sub und starte dann das makro. dann wähle benutzer z und dann taucht das problem auf.
Grüße Matthias
Anzeige
Neuer Thread zum Problem obenstehend!!
20.03.2006 15:08:57
Matthias
!!!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige