Formeln aus VB in Excel schreiben

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von VB.Ghost.

    Formeln aus VB in Excel schreiben

    Hallo,

    wenn ich versuche eine Summenformel in eine Excel Zelle eintragen lasse, dann wird diese leider nicht ordnungsgemäß ausgeführt, bzw. das Ergebnis ist ein anderes als wenn ich es in Excel manuell mache. Ich addiere Zellen, die in Excel als Benutzerdefiniert formatiert sind ( hh:mm:ss ). Addiere ich diese in Excel, so addiert er Sekunden mit Sekunden, Minuten mit Minuten etc.. Wenn ich jedoch mit

    Visual Basic-Quellcode

    1. xlZelle(4, 2).value = "=Summe(C6:C100)"


    Die Formel eintragen lasse kommen Ergebnisse wie etwa: " 0,0000694 " heraus.

    Was mache ich falsch ?

    MfG. VB.Ghost
    2 Dinge
    Erstens sollte der Code mit formula und nicht mit Value arbeiten:

    Visual Basic-Quellcode

    1. xlZelle(4, 2).formula= "=Summe(C6:C100)"

    Zweitens Du musst die Zelle Umformatieren. Datums/Zeit Werte werden in Excel als Dezimalzahl abgelegt und lediglich formatiert dargestellt.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Leider scheint es VB nicht zu interessieren, was ich hinter " xlZelle(4, 2). " schreibe, denn auch wenn ich statt value oder formula etwa "abc123" schreibe, gibt er keinen Fehler aus.

    Kann mir jemand sagen, wie ich eine Zellenreihe als Datum in der Syntax "hh:mm:ss" formatiere ?

    MfG. VB.Ghost
    Hier mal die Anweisung eine Zelle (B") zu formatieren.

    Visual Basic-Quellcode

    1. ActiveSheet.Cells(2, 2).NumberFormat = "h:mm:ss"

    Für einen Bereich wird zuerst ein Range definiert, der dann formatiert wird.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Der Verweis auf Excel ist gesetzt, leider kann ich activesheet. nicht benutzen. In der Form "xlZelle.range()" könnte ich vllt. einen Bereich festlegen, aber trotzdem weiß ich dann nicht wie man diesen als Zeit formatiert :S

    MfG. VB.Ghost
    ActiveSheet und ActiveWorkbook sind Objekte die eigentlich nur dann relevant sind wenn ich im geöffneten und sichtbaren Excel arbeite. Innerhalb von Excel-VBA kann man sie direkt verwenden, in VB muss man noch die dazugehörige Excel.Application davor setzen.

    Visual Basic-Quellcode

    1. Dim ExApp as new Excel.Application
    2. ExApp.visible=true
    3. ExApp.ActiveSheet.....
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Ahh sehr schön, ich habe es jetzt so gemacht:

    Visual Basic-Quellcode

    1. xlApp = New Excel.Application
    2. xlApp.Visible = False
    3. xlMappe = xlApp.Workbooks.Open(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\" & "Projekte" & "\" & GroupBox3.Text & ".xls")
    4. xlBlatt = xlMappe.Worksheets(1)
    5. xlZelle = xlBlatt.Range("B2")
    6. xlApp.ActiveSheet.Cells(5, 3).NumberFormat = "hh:mm:ss"
    7. xlZelle(4, 2).formula = "=Summe(C6:C100)"


    Ich dachte immer der Fehler liegt darin, dass die Zellen woraus später die Summe gezogen werden soll, falsch formatiert sind. Die formatieren sich jedoch anscheinend automatisch, zumindest steht bei denen dann schon "hh:mm:ss" drin.
    Also einfach die Ergebniszelle als "hh:mm:ss" formatiert und es ging, vielen Dank :)

    MfG. VB.Ghost