Office: VBA : in einer Zeile ein Text, dann nichts mehr machen !!

Helfe beim Thema VBA : in einer Zeile ein Text, dann nichts mehr machen !! in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Abend, habe wieder ein Problem: Mein Makro erledigt folgende Dinge: Rechnungsnummer erstellen, Drucken, Kopie speichern in eine andere Datei... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von hasegoe, 2. Juni 2011.

  1. hasegoe Erfahrener User

    VBA : in einer Zeile ein Text, dann nichts mehr machen !!


    Guten Abend, habe wieder ein Problem:
    Mein Makro erledigt folgende Dinge:
    Rechnungsnummer erstellen, Drucken, Kopie speichern in eine andere Datei und Rechungsinhalt der aktuellen Datei leeren, damit eine neue Rechnung mit neuer Rechnungsnummer geschrieben werden kann.

    ---- klappt alles wunderbar, nicht zuletzt dank der Hilfe von vielen die hier immer mit Rat und Tat zur verfügung stehen. ----

    Da man selber beim Erstellen einer Rechungen entscheiden muss ob eine ermäßigte Steuer oder die volle Steuer zugrunde gelegt werden muss habe ich in einer Zelle folgenden Inhalt :
    Code:
    =WENN(K28="";"";WENN(UND(U28="";V28="");"Steuerkennzeichen fehlt";""))
    Mein Problem ist, dass die Person die diese Rechnungsdatei benutzt so manchesmal den Satz mit dem Steuerkennzeichen übersieht (obwohl er rot ist :evil: ). Jetzt möchte ich in diesem Makro VOR dem drucken die Prüfung ob der Satz "Steuerkennzeichen fehlt" in den Zellen L28 bis L51 vorhanden ist (am besten mit einer MsgBox), wenn neindann weiter zum drucken, wenn JA, dann MsgBox aufblinken mit dem Satz : Steuerkennzeichen nicht vergessen!! und beim klicken auf ok wieder zurück in die Zelle "G28".

    Ich hatte schon so einiges ausprobiert, hatte dann aber das problem dass ich zwar diese Meldung bekam, aber wenn ich diese mit ok bestätigt habe lief das Makro dennoch weiter und fragte micht nach der Kopienanzahl. Beim Abbrechen der Kopienanzahl kam dann die Fehlermeldung "Laufzeitfehler" Typ unverträglich.
    Wie bekomme ich diesem Fehler weg, wenn ich Abbreche das diese Meldung nicht erschein.
    hier dafür das Makro :
    Code:
    Application.ScreenUpdating = False
        Datum = Cells(25, 3).Value
        Cells(25, 3).Value = Datum
        Dim anzahl As Double
        Rows("11:11").Select
        'Selection.EntireRow.Hidden = True
        anzahl = InputBox(" Anzahl Ausdrucke")
        ActiveWindow.SelectedSheets.PrintOut From:=1, to:=1, _
            Copies:=anzahl
    Ich weiß, das ist jetzt sehr viel... aber ich hoffe mir kann trotzdem jemand helfen.
    Vielen Dank im Voraus.
     
    hasegoe, 2. Juni 2011
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    unter DieseArbeitsmappe.
    Code:
    Option Explicit
    
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
        If Worksheets("Tabelle1").Range("G28") = "" Then
            MsgBox "Steuersatz eingeben"
            Cancel = True
            Worksheets("Tabelle1").Activate
            Range("G28").Select
        End If
    End Sub
    
    Gruß Hajo
     
    Hajo_Zi, 2. Juni 2011
    #2
  3. hasegoe Erfahrener User
    Guten Morgen Hajo,
    Danke für die Ausführung,
    soweit funktioniert das auch, ABER meine Rechungsnummer läuft weiter obwohl die Rechnung ja noch nicht gedruckt wurde.
    Code:
    Option Explicit 
    
    Private Sub Workbook_BeforePrint(Cancel As Boolean) 
        If Worksheets("Rechnung").Range("L28:L58") = "Steuerkennzeichen fehlt" Then 
            MsgBox "Steuersatz eingeben" 
            Cancel = True 
            Worksheets("Rechnung").Activate 
            Range("G28").Select 
        End If 
    End Sub 
    
    wie bekomme ich das hin das das gestartete Makro dann nicht mehr weiter läuft und erst NACH erfolgreichem druck die Rechnunsnummer erhöht ??
     
    hasegoe, 2. Juni 2011
    #3
  4. Hajo_Zi
    Hajo_Zi Erfahrener User

    VBA : in einer Zeile ein Text, dann nichts mehr machen !!

    ich sehe nicht Dein makro. Aus meinem Makro wird kein anderes Makro aufgerufen.

    Gruß Hajo
     
    Hajo_Zi, 3. Juni 2011
    #4
  5. hasegoe Erfahrener User
    Vielleicht findet sich noch jemand der mir bei meinem Problem helfen kann.
    Wie bereits beschrieben, ich starte ein Makro, ein problem taucht auf, (kein Fehler) wird dann bestätigt, doch das Makro läuft danach weiter, und das darf nicht passieren.
    Mit Exit Sub funtioniert das leider nicht.
     
    hasegoe, 4. Juni 2011
    #5
  6. fette Elfe Erfahrener User
    Hallo hasegoe,

    ohne Beispieldatei von Dir, wo man den Ablauf Deiner Makros selber anschauen kann, wirds vermutlich schwierig eine genaue Antwort zu geben.

    Wenn ich Dich jetzt richtig verstanden habe, möchtest Du ein Prüfung ob etwas ausgefüllt wurde, wenn nicht dann soll eine MsgBox erscheinen (hat Hajo Dir ja geliefert). Und danach willst Du Dein Makro beenden, komplett?
    Soweit richtig?

    Dann könnte der Befehl "End" Dir eventuell helfen.
    Damit wird die Ausführung aller Makros sofort gestoppt.

    Habe es mal in Hajos Code enigefügt.
    Obs die richtige Stelle ist müsstest Du mal selber im Einzelschritt-Modus testen.

    Code:
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
        If Worksheets("Rechnung").Range("L28:L58") = "Steuerkennzeichen fehlt" Then
            MsgBox "Steuersatz eingeben"
            Cancel = True
            Worksheets("Rechnung").Activate
            Range("G28").Select
            End
        End If
    End Sub 

    Wenn das auch nicht ist was Du möchtest, dann lade am besten mal eine Beispieldatei mit Deinem Code hoch...


    Ich hoffe geholfen zu haben.
     
    fette Elfe, 4. Juni 2011
    #6
  7. hasegoe Erfahrener User
    Guten Morgen,

    ich lade die Datei mal hoch.
    vielleicht kommst Du auf die Lösung.
    Wie gesagt, wenn die rote Meldung "Steuerkennzeichen fehlt" kommt, darf man das Makro "Drucken, Speichern, leeren" nicht starten, bzw, es sollte unterbrochen werden und der Ausgangspunkt sollte die Eingabe in "G28" sein.
    Vielen Dank im Voraus
     
    hasegoe, 4. Juni 2011
    #7
  8. fette Elfe Erfahrener User

    VBA : in einer Zeile ein Text, dann nichts mehr machen !!

    Hallo hasegoe,

    benutze statt:
    Code:
    Sub druckenSpeichern()
    
       
       If Application.WorksheetFunction.CountIf(Range("L28"), "") = 0 Then
        Eingabewert = MsgBox("Steuerkennzeichen fehlt!!", vbNo, "Info!!!")
                
             
       End If
    folgendes:
    Code:
    Dim i As Integer
    
    
    Sub druckenSpeichern()
    
       For i = 28 To 58
           If Worksheets("Rechnung").Cells(i, 12) = "Steuerkennzeichen fehlt" Then
                MsgBox "Steuersatz eingeben"
                Worksheets("Rechnung").Activate
                Worksheets("Rechnung").Cells(i, 7).Select
                End
            End If
        Next i
    Die Variable "i" ist in diesem Fall ein Schleifenzähler, der im angegebenen Bereich (For i = 28 To 58) schrittweise hochzählt und in ".Cells(i, 12)" bzw. ".Cells(i, 7)" die Zeilennummer ersetzt.
    So prüft die Schleife zeilenweise auf das angegebene Kriterium "= "Steuerkennzeichen fehlt"".
    Wird das Kriterium nicht erfüllt, wird die nächste Zeile geprüft, bis der angegebene Bereich abgearbeitet ist.
    Wird das Kriterium erfüllt, so wird eine MsgBox geöffnet.
    Nach Klick auf "OK" wird die Zelle "G" (Spaltennummer 7) in der entsprechenden Zeile selektiert und durch "End" ALLE (!) Makros beendet.


    Das dürfte erstmal das sein was Du wolltest....

    Aber, wenn ich mir Deinen Code so anschaue...
    - unübersichtlich geschrieben, benutze die TAB-Taste zum einrücken und verwende Leerzeilen um Ihn übersichtlicher und besser lesbar zu machen
    - verzichte auf "select" und "activate" wenn es nicht unbedingt nötig ist. Meist braucht man es nicht.

    z.Bsp. glaube ich nicht das in obigem Code "Worksheets("Rechnung").Activate" nötig ist. Dieses Blatt ist doch aktiviert, sonst könntest Du den Druck-Button nicht drücken. Oder springst Du zwischendurch auf ein anderes Blatt?

    oder:
    Code:
        Range("A30:J51").Select
        Selection.ClearContents
    geht auch so:
    Code:
        Range("A30:J51").ClearContents
    Das nur so ganz grob... da wäre soviel....


    Ich hoffe geholfen zu haben.
     
    fette Elfe, 4. Juni 2011
    #8
  9. hasegoe Erfahrener User
    Hallo Achim,
    vielen Dank für Deine Hilfe. Funktioniert einwandfrei.
    Lediglich noch ein Problem habe ich, wenn die abfrage der Druckanzahl kommt und ich auf "abbrechen" klicke, dann kommt immer die Fehlermeldung "Laufzeitfehler".
    Kann ich dieses Problem noch irgendwie beheben?

    Bezüglich deiner Anmerkungen der unübersichtlichkeit muss ich Dir sagen dass ich bis vor ungefähr 10 Wochen noch nicht einmal wusste wie man mit VBA umgeht. Ich habe mir viele Codes aus anderen Foren herauskopiert und ein bischen umgebaut und herumgedoktert. Sehr viel wurde mir auch hier geholfen. Vielen Dank an alle noch mal dafür.
    Du hast mir jetzt schon das zweite mal bei einem für mich großen Problem geholfen. Kann ich bei dir in die Excel-Schule gehen ?? ;-)
     
    hasegoe, 4. Juni 2011
    #9
  10. Kallewirsch Erfahrener User
    Hallo,

    und wo ist die Datei???

    Gruß

    Edgar
     
    Kallewirsch, 4. Juni 2011
    #10
  11. fette Elfe Erfahrener User
    Hallo hasegoe,

    Aus dem Bauch heraus vermute ich mal ins blaue hinein: ja

    Ohne Deine Datei brauchen wir Glaskugeln um Vorschläge machen zu können, und die Glaskugeln sind gerade alle zum Polieren. ;O)
    (und ich habe mir die Datei nicht gespeichert...)

    Abgesehen davon ist es in einem Hilfeforum auch nicht sehr hilfreich die Dateien wieder zu entfernen.
    Erstens hat so kein Anderer die Chance Dir Hilfe angedeihen zu lassen (vielleicht gibts ja ne bessere Lösung als meine... ), und zweitens machen es viele so wie Du: sie suchen im Netz.
    So habe ich auch angefangen und daraus gelernt, und ich mache es teilweise heute noch...
    Aber wie soll jemand ein Problem samt Lösung nachvollziehen und verstehen wenn die Hälfte gelöscht wird?


    Noch eine Bitte bezüglich Deiner Datei:
    wenn Du hier eine Datei hoch lädst sollte sie auch lauffähig sein.
    Vorhin habe ich mehrere Variablen gesehen die nicht definiert waren... so gibts statt Testläufe nur Fehlermeldungen.
    ( Dim-Anweisung fehlte)


    Kurz gesagt:
    Wer Hilfe möchte sollte es den Helfern immer möglichst einfach machen und auch für den nächsten Hilfesuchenden bereitstellen.
    Und ganz am Ende wäre eine Rückmeldung ob alles klappt sinnvoll, hilfreich und höflich.


    Meine Meinung.
     
    fette Elfe, 4. Juni 2011
    #11
  12. hasegoe Erfahrener User
    Hallo Achim,
    erst einmal danke für den Hinweis, aber ich musste die Datei noch einmal herunternehmen weil ich in einem Bereich Bankverbindung usw. noch stehen hatte.
    Die Datei befindet sich jetzt wieder im Anhang.

    Desweiteren bezieht sich diese Datei auch auf andere dateien um Rechnungsdaten usw. zu holen, aber die kann ich doch nicht auch alle hier hochladen.
    Das Makro Drucken, Speichern & leeren, das für meine Fragen relevant ist, bezieht sich sonst auf nichts, daher verstehe ich Deine DIM-ausführung nicht.

    Wie gesagt, datei ist wieder da. !!
     
    hasegoe, 4. Juni 2011
    #12
  13. Kallewirsch Erfahrener User

    VBA : in einer Zeile ein Text, dann nichts mehr machen !!

    Hallo,

    1. statt END wäre es besser, Exit Sub einzutragen, dann gibt es keine weitere Bearbeitung des Makros.
    Code:
    For i = 28 To 58
           If Worksheets("Rechnung").Cells(i, 12) = "Steuerkennzeichen fehlt" Then
                MsgBox "Steuersatz eingeben"
                Worksheets("Rechnung").Cells(i, 7).Select
                Exit Sub
            End If
        Next i
    2. Was soll das werden:

    Code:
    Datum = Cells(25, 3).Value
        Cells(25, 3).Value = Datum
    Damit sagt Du, das Datum den wert der Zelle c25 annehmen soll und anschließend gibst Du der Zelle C25 den Wert Datum????
    Abgesehen davon ist Datum eine schlechte Variablenbezeichnung.

    3. Eine Dimensionierung aller Variablen sollte sofort nach der ersten Zeile erfolgen. Damit hat man gleich den Überblick.

    4. Warum dimensionierst Du Anzahl als Double? Da genügt Long, das reicht für einige Tausend Ausdrucke.

    5. Du schaltest zweimal hintereinander das ScreenUpdating aus, das ist unnötig.

    6. Im Modul 2 hast Du Sverweise, denen der 4.Parameter fehlt, dass führt irgendwann zu Fehlern!

    Code:
    Sub start()
        With Sheets("Adressen")
            .Cells(12, 2).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:E;2;0)"
            .Cells(13, 2).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:E;3;0)"
            .Cells(14, 2).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:E;4;0)"
            .Cells(15, 2).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:E;5;0)"
            .Cells(16, 2).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:E;6;0)"
            .Cells(28, 1).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:H;7;0)"
            .Cells(29, 1).FormulaLocal = "=SVERWEIS(Q1;Adressen!A:H;8;0)"
            Rows("10:12").Hidden = False
            Cells(53, 8) = "Nettobetrag"
            Cells(54, 8) = " 7 % MwSt"
            Cells(55, 8) = "19 % MwSt"
        End With
    End Sub
    Im Modul 3 ist ein Lösch-Makro, aber das Löschen erfolgt doch schon im Modul 1. Warum zweimal?
    Außerdem kann man das kürzen:

    Code:
    Sub InhalteLöschen()
    
    ' InhalteLöschen Makro
        Range("A30:J51").ClearContents
        Range("F28:J29").ClearContents
        Range("R1").ClearContents
    End Sub
    Die Buttons konnte ich leider nicht testen, aber ich fürchte, da gibt es auch noch ein paar Fehler. Zumindest konnte ich feststellen, da Du in R1 Zahlen eingibst, das Makro aber auf Texte reagiert, kann das nie funktionieren.
    Diese Zeilen:

    Code:
    Me.CommandButton1.Visible = Target.Value = 6 
    verstehe ich nicht
    Gruß

    Edgar
     
    Kallewirsch, 4. Juni 2011
    #13
  14. hasegoe Erfahrener User
    Hallo Edgar,

    vielen Dank für Deine Ausführungen. Habe diese auch bereits übernommen.
    Den Datums-Code habe ich entfernt. Den Code für das 2. Makro habe auch überschrieben, auch hier vielen Dank, auch wenn mir nicht klar ist was Du mit dem 4.Parameter meinst.

    Das Modul 3 ist dafür, wenn man eine Rechung vorbereitet hat, diese aber dann doch noch nicht verarbeiten möchte, weil Daten fehlen. Mit diesem Modul (so sehe ich das) wird lediglich der Rechnungsinhalt gelöscht, sonst bleibt alles beim alten.
    Wenn eine Rechnung geschrieben ist und sie gedruckt werden soll, dann wird Modul 1 verwendet.

    Bezüglich der letzten Anmerkung ist es so dass die Kürzel der einzelnen Firmen noch vor ein paar Wochen vorhanden waren. Es werden jetzt nur noch die Kundennummern eingegeben oder über das Auswahlfenster ausgewählt.
    Die 6, 4, 2 und 3 sind Kundennummern und beziehen sich auf andere Dateien, aus denen die erforderlichen Rechnungsdaten geholt werden.
    Diese kann ich dir gern zum test per mail zur verfügung stellen.

    Gruß Andre
     
    hasegoe, 4. Juni 2011
    #14
  15. Kallewirsch Erfahrener User
    Hallo Andre,

    1.
    Dann lies Dir mal die Hilfe zu SVERWEIS durch!
    2.
    Dann erstellt man eine Sub zum löschen und ruft die dann aus einer anderen Sub auf. Damit muß man den Code nur einmal erstellen!
    3.
    womit wir da sind, wo ich hin wollte: Unterscheide sehr sorgfältig zwischen Zahlen und Texten! Wenn eine Zahl in einer Tabelle stehtt, dann kannst Du sie niemals finden, wenn Du nach einer Zahl in "" suchst!
    Wenn Du mir die Date senden willst: Kallewirsch at online.de

    Gruß

    Edgar
     
    Kallewirsch, 4. Juni 2011
    #15
Thema:

VBA : in einer Zeile ein Text, dann nichts mehr machen !!

Die Seite wird geladen...
  1. VBA : in einer Zeile ein Text, dann nichts mehr machen !! - Similar Threads - VBA Zeile Text

  2. VBA in einer Zeile zu lang

    in Microsoft Excel Hilfe
    VBA in einer Zeile zu lang: Moin, mein VBA Code ist für eine Zeile zu lang. Kann mir einer helfen wie ich den auf 2 Zeilen aufteilen Kann? arrSchuhDaten = Array(Range("A6"), Range("F6"), Range("J6"), Range("A7"),...
  3. VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen

    in Microsoft Word Hilfe
    VBA: Platzhalter ersetzen und evtl. leere Zeile einfügen: Hallo zusammen, ich habe eine Word-Vorlage mit Platzhaltern, in die ich mit VBA Daten aus einer Excel-Datei einfüge (in eine Excel-Zeile schreibe ich alle Daten für ein neues Word-Dokument). So...
  4. VBA Auslesen von Strings und erstellen neuer Zeilen in einer Tabelle

    in Microsoft Excel Hilfe
    VBA Auslesen von Strings und erstellen neuer Zeilen in einer Tabelle: Guten Tag zusammen In der 1. Spalte stehen KundenIDs (jeweils 2 Buchstaben), separiert mit einem Komma. Beispielsweise: ag,ok,be,li,ce In der 2. bis 15. Spalte stehen dann diverse Eigenschaften,...
  5. Per VBA Zeilen einfügen und danach in diese Texte kopieren

    in Microsoft Excel Hilfe
    Per VBA Zeilen einfügen und danach in diese Texte kopieren: Hallo zusammen, ich möchte im 1. Schritt via VBA-Code eine bestimmte, variable Anzahl Zeilen (der Wert wird immer im Reiter "Data" in der Zelle S32 ermittelt) in einem anderen Reiter namens...
  6. VBA Code für Zeilen ausblenden einblenden mit JA/Nein

    in Microsoft Excel Hilfe
    VBA Code für Zeilen ausblenden einblenden mit JA/Nein: Hallo, habe eine Exceltabelle, bei der ich bei einer Zelle eine Ja/Nein abfrage mache, wenn in der Zelle Nein steht, dann soll ein bestimmter Zeilenbereich, den ich definieren möchte, ausgeblendet...
  7. Zeile bei Bedingung in anderen Reiter kopieren

    in Microsoft Excel Hilfe
    Zeile bei Bedingung in anderen Reiter kopieren: Hallo zusammen, ich habe eine Excel Tabelle mit verschiedenen To Dos für mich. Jedes Mal, wenn ich eine Zeile in Spalte G als "done" markiere möchte ich, dass die komplette Zeile in einen anderen...
  8. VBA Text in Zellen einfügen und farbigem Hintergrund

    in Microsoft Excel Hilfe
    VBA Text in Zellen einfügen und farbigem Hintergrund: Hallo zusammen, ich möchte eine Zeile mit Text und farbigem Hintergrund einfügen. Ich habe bereits einen kleinen Schnippsel VBA-Code gefunden. Dieser erstellt in der Tabelle Tabelle1 in Zeile 2...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden