Makro läuft nicht

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: Makro läuft nicht
von: Mike
Geschrieben am: 22.11.2003 08:38:17

Hallo zusammen,
nachfolgendes Makro läuft auf meinem Home-PC unter Windows XP professional und Office XP. Sobald ich dies aber im Büro laufen lasse (Windows NT und Excel 97) kommt die Fehlermeldung "Typenunverträglichkeit" und die Zeile => For i = Cells(65536, 1).End(xlUp).Row To 1 Step -1 ist gelb unterlegt.
Das Makro steht unter "Diese Arbeitsmappe" und lautet:


Private Sub Workbook_Open()
    Dim txt
    Dim x As Currency
    Columns("A:E").Interior.ColorIndex = xlNone
    txt = InputBox("Bitte geben Sie einen Bruttobetrag in Euro ein:", "Besondere Monats-Lohnsteuertabelle")
    If IsNumeric(txt) = False Then Exit Sub
    x = txt
    For i = Cells(65536, 1).End(xlUp).Row To 1 Step -1
        If x >= Cells(i, 1) And Cells(i, 1) <> "" Then
            Range(Cells(i, 1), Cells(i, 5)).Interior.Color = RGB(255, 255, 0)
            Cells(i, 1).Select
            ' hier müßte der Code hin in der art für Spalte C =3
            Workbooks("Trennungsgeld.xls").Worksheets("Trennungsgeld").Range("J12") = Cells(i, 3)
            Workbooks("Trennungsgeld.xls").Worksheets("Trennungsgeld").Range("J13") = Cells(i, 4)
            Workbooks("Trennungsgeld.xls").Worksheets("Trennungsgeld").Range("J14") = Cells(i, 5)
            Exit Sub
        End If
    Next
End Sub

Woran kann das liegen?
Gruß
Mike
Bild


Betrifft: AW: Makro läuft nicht
von: Norman
Geschrieben am: 22.11.2003 10:55:48

Hi Mike,

Erstaunlich, ich habe die selbe Umgebung wie Du im Büro und das Makro läuft einwandfrei... Versuch doch mal, vorher die Variablen zu dimensionieren
Dim i as long
Dim x as long

Cells().end() liefert nämlich einen long wert, vielleicht werden bei dir im Büro nicht deklarierte Variablen auf integer gesetzt, dann gehts schief.

Außerdem würde ich Dir empfehlen, am Anfang eines jeden Moduls
option explicit
zu benutzen, das zwingt Dich Deine Variablen zu deklarieren und hat durchaus Laufzeitvorteile was Geschwindigkeit angeht. Nicht deklarierte Variablen muss Excel zur Laufzeit deklarieren und braucht deshalb länger, verbraucht Speicherplatz etc.

Viele Grüße
Norman


Bild


Betrifft: AW: Makro läuft nicht
von: Mike
Geschrieben am: 22.11.2003 11:07:15

Hi Norman,
danke, dass du dich meines Problems angenommen hast. Aber leider bin ich zu sehr Laie was VBA betrifft, um deinen Vorschlag umsetzen zu können. Vielleicht könntest du mir dabei behilflich sein. Müsste man evtl. noch "On Error Resume Next" einsetzen, damit in der Tabelle auch dann der entsprechende Wert angezeigt wird, wenn die zweite Mappe ("Trennungsgeld.xls")nicht geöffnet ist?

Gruß
Mike


Bild


Betrifft: AW: Makro läuft nicht
von: Norman
Geschrieben am: 22.11.2003 11:31:31

Hi Mike,

hoppala, das ist aber nochmal ein anderes Problem, soweit ich Dich verstanden habe, liegt der Fehler in einer anderen Zeile und Dein Problem an einer anderen Stelle. Was das Fehlerhandling betrifft, kannst Du natürlich immer ein on error resume next benutzen, dan würde ich aber mit dem Debugger mal durchsteppen und schauen was passiert :)

Also, zu Deinem ursprünglichen Problem:

For i = Cells(65536, 1).End(xlUp).Row To 1 Step -1

Das war die Zeile mit Deinem Error unter Excel 97. Da Du Excel nirgends gesagt hast, was i für ein Typ ist (also string, zahl, objekt oder so) tippe ich auch hier auf das Problem. Sag excel einfach am Anfang der Funktion mittels
Dim i as long
, dass i ein long integer ist. Danach dürfte Dir Deine for-Zeile keine Probleme bereiten. Die Fehlermeldung "Typenunverträglichkeit" beruht im Normalfall darauf, dass Du zum Beispiel einer integer Variablen einen long Wert zuweisen willst oder einer Zahl einen String.

Probiers mal :)

Dein on error resume next Problem würde ich so lösen, dass Du einen Error Handler einbaust, der Checkt ob das Workbook auf ist und wenn nicht eine Message Box ausgibt, damit der User weiss, was er tun muss. Z.B.:


Private Sub Workbook_Open()
    Dim txt
    Dim x As Currency
    Columns("A:E").Interior.ColorIndex = xlNone
    txt = InputBox("Bitte geben Sie einen Bruttobetrag in Euro ein:", "Besondere Monats-Lohnsteuertabelle")
    If IsNumeric(txt) = False Then Exit Sub
    x = txt
    
    on error goto fehlerHandler  ' Neu
    For i = Cells(65536, 1).End(xlUp).Row To 1 Step -1
        If x >= Cells(i, 1) And Cells(i, 1) <> "" Then
            Range(Cells(i, 1), Cells(i, 5)).Interior.Color = RGB(255, 255, 0)
            Cells(i, 1).Select
            ' hier müßte der Code hin in der art für Spalte C =3
            Workbooks("Trennungsgeld.xls").Worksheets("Trennungsgeld").Range("J12") = Cells(i, 3)
            Workbooks("Trennungsgeld.xls").Worksheets("Trennungsgeld").Range("J13") = Cells(i, 4)
            Workbooks("Trennungsgeld.xls").Worksheets("Trennungsgeld").Range("J14") = Cells(i, 5)
            Exit Sub
        End If
    Next
' Ab hier neu!
    exit sub  
fehlerHandler:
    msgbox "Die Excel-Datei Trennungsgeld.xls ist nicht geöffnet. Bitte öffnen Sie diese Datei zuerst!"
End Sub



Bild


Betrifft: AW: Makro läuft nicht
von: Mike
Geschrieben am: 22.11.2003 11:44:43

Hallo Norman,
bei der Beschreibung ist mir ein Fehler unterlaufen.Sorry.
Es wird die Zeile => If x >= Cells(i, 1) And Cells(i, 1) <> "" Then
gelb unterlegt.
Ich hatte versuchsweise mal "On Error Resume Next" eingefügt. Dann wird der richtige Wert auch dann angesprungen und angezeigt, wenn die andere Mappe nicht geöffnet ist. Das ist ok so. Funktioniert aber nur auf meinem Home-PC. Im Büro wird dann immer die gleiche Zelle angesprungen, egal welchen Wert ich zuvor in die Input-Box eingetragen habe.
Leider muss ich jetzt weg und komme erst heute abend wieder.
Bis dann.
Gruß
Mike


Bild


Betrifft: AW: Makro läuft nicht
von: Nepumuk
Geschrieben am: 22.11.2003 11:33:58

Hallo Mike,
das wäre aber die schlechteste Lösung von allen. Mal ein kleines Beispiel, wie du prüfen kannst, ob die Date geöffnet ist.

Option Explicit
Public Sub test()
    Dim intIndex As Integer, bolgefunden As Boolean
    For intIndex = 1 To Workbooks.Count
        If Workbooks(intIndex).Name = "Trennungsgeld.xls" Then bolgefunden = True: Exit For
    Next
    If Not bolgefunden Then Workbooks.Open ThisWorkbook.Path & "\" & "Trennungsgeld.xls"
End Sub


Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk


Bild


Betrifft: AW: Makro läuft nicht
von: Norman
Geschrieben am: 22.11.2003 11:46:09

So gehts auch. Aber gleich als schlechteste Lösung zu bezeichnen.... ist aber nicht nett :)

Gruß
Norman


Bild


Betrifft: AW: Makro läuft nicht
von: Mike
Geschrieben am: 22.11.2003 11:51:27

Hallo Nepumuk,
danke für das Makro. Werd's mal heute abend testen.
Hab mich vielleicht ein wenig missverständlich ausgedrückt. Mir geht es nicht darum zu prüfen, ob die zweite Mappe geöffnet ist. Es werden dann nur keine Werte übertragen.
Ich möchte nur, dass nach Eingabe eines Wertes in die Input-Box auch dann der entsprechende Wert angesprungen und angezeigt wird, wenn die andere Mappe nicht geöffnet ist. Wie gesagt. Das funktioniert so auf meinem Home-PC aber nicht im Büro.

Gruß
Mike


Bild

Beiträge aus den Excel-Beispielen zum Thema " Dringend! Tabellenblatt öffnen über Userform"