Drucken per call in einer function aufrufen

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MPicard.

    Drucken per call in einer function aufrufen

    Guten Morgen,

    ich würde gerne einen Code Schnipsel der in meiner Tabelle öfters vorkommt per function aufrufen.

    Quellcode

    1. Function Drucken(TabBlatt As Worksheet)
    2. ' Drucken
    3. With Sheets("TabBlatt")
    4. On Error Resume Next
    5. .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    6. .PrintPreview
    7. .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
    8. On Error GoTo 0
    9. End With
    10. End Function


    Mein Problem ist aber das ich einen Fehler bekomme, wenn ich dann vom Sheet "Mit Namen" den Befehl

    Quellcode

    1. Call Drucken("Mit Namen")


    mache, bekomme ich den Fehler:

    Fehler beim Kompilieren, Typen unverträglich

    Was mache ich falsch.

    Mfg

    MPicard
    Hi, ich bin zwar nicht mit VBA vertraut, sondern nur mit WinForms usw., aber vielleicht kann ich Dir trtzdm weiterhelfen.

    Eine Funktion (

    VB.NET-Quellcode

    1. ​Function
    in VB funktioniert im Grunde genommen so, dass Du beim Aufrufen meist Parameter übergibst, die dann verarbeitet werden, bis die Funktion eine Ausgabe via.

    VB.NET-Quellcode

    1. ​Return
    liefert.

    Z. B.

    VB.NET-Quellcode

    1. Function Addition(summand1 As Double, summand2 As Double) As Double
    2. Return summand1 + summand2
    3. End Function


    Bei dir handelt es sich aber eher um einen ganz normalen

    VB.NET-Quellcode

    1. ​Sub
    , weil keine Return-Anweisung vorhanden ist.


    Aber jetzt zum eigentlichen Fehler: Fehler beim Kompilieren, Typen unverträglich
    Dein Funktionsparameter wurde als

    VB.NET-Quellcode

    1. ​Worksheet
    deklariert, beim Aufrufen der Funktion / des Subs übergibst du jedoch eine

    VB.NET-Quellcode

    1. ​String


    Da wollte ich fragen, ob es in deinem Fall möglich ist eine Worksheet, ohne Aufrufen irgendeiner Funktion in einen String zu konvertieren??

    Vielleicht kannst du dich darüber kundig machen. Vlcht musst du aber auch einfach einen New-Constructor aufrufen

    VB.NET-Quellcode

    1. ​Call Drucken(New Worksheet("Mit Namen"))

    oder gibts nicht sowas wie Worksheet.FromName("Mit Namen")?

    Oder vlcht hast du nur vergessen, dass der Parameter als String deklariert werden muss

    VB.NET-Quellcode

    1. Function Drucken(TabBlatt As [b]String[/b])​


    Richte mal aus, wenn sich da was getan hat: )

    Ahh und ich hab noch grad was gesehen

    VB.NET-Quellcode

    1. ​With Sheets("TabBlatt")
    : Wenn du hier den Parameter TabBlatt benutzten willst, musst du ohne "" schreiben, sonst erkennt wieder als String. Mach dich einfach mal kundig was für Typen akzeptiert werden. Typen sind sowas wie String, Worksheet, Columns usw.


    LG
    Das meiste wurde bereits gesagt.
    Du solltest dringend Option Explicit verwenden, damit solche abenteuerlichen Konstruktionen angemeckert werden.

    Vorschlag:

    Visual Basic-Quellcode

    1. Function Drucken(ByVal TabBlatt As Worksheet) As Boolean
    2. On Error Goto Done
    3. TabBlatt.Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    4. TabBlatt.PrintPreview
    5. TabBlatt.Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
    6. Done:
    7. Drucken = (Err.Number = 0) 'set return value
    8. End Function

    Aufruf:

    Visual Basic-Quellcode

    1. If Drucken(Sheets("mit Namen")) Then MsgBox "Drucken OK"

    oder wenn dich der Rückgabewert nicht interessiert:

    Visual Basic-Quellcode

    1. ​Drucken Sheets("mit Namen")

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    Vielen liebe dank :D , die Lösung war :

    Quellcode

    1. ​Sub Drucken(TabBlatt As String)
    2. ' Drucken
    3. With Sheets(TabBlatt)
    4. On Error Resume Next
    5. .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    6. .PrintPreview
    7. .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
    8. On Error GoTo 0
    9. End With
    10. End Sub


    Und der Aufruf :

    Quellcode

    1. Call Drucken("Mit Namen")


    Ja Option Explicit habe ich immer an, das habe ich bei den Lernvideos von Udemy eingebrannt bekommen :thumbsup:
    Die Rückmeldung brauche ich nicht da ich bei dem Befehl das Vorschaufenster sehe und noch das Drucken Manuel starten muss.
    Das ausdrucken wird erst bei den nächsten Arbeitsschritten verändert, jetzt erstmal den Code aufräumen und minimieren :D

    Vielen vielen dank :thumbsup: