Mal wider Option Strict ON lässt spätes Binden nicht zu

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von friedel.

    Mal wider Option Strict ON lässt spätes Binden nicht zu

    Nachdem mein Chart läuft auch mit der Array übergebe allerdings mit der auskommentierten Option 'Option Strict On
    möchte ich es richtig machen!
    In diesem Berichen weren die Fehlermeldungen ausgegeben.
    Vielleicht ist es ja nur eine Kleinigkeit.
    Dateien
    • Fehler.txt

      (820 Byte, 97 mal heruntergeladen, zuletzt: )
    @friedel Besser ist es, wenn Du den Code direkt in Deinen Post einfügst und als VB.NET-Code markierst:

    Wenn Du dann noch die komplette Prozedur oder ggf. die Klasse postest, lässt es sich sehr viel leichter helfen, wenn wir Deinen Code bei uns einfügen und untersuchen können.
    Insbesondere ist es wichtig, dass wir die erforderlichen Deklarationen haben, ansonsten backen wir Spekulatius.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für den Hinweis

    VB.NET-Quellcode



    With myChart
    .ChartType = XlChartType.xlLine

    Option Strict On Fehler !
    .SeriesCollection(1).HasDataLabels = False
    .SeriesCollection(1).XValues = a_datum.ToArray 'Die X-Daten Datum
    .SeriesCollection(1).Values = a_wert.ToArray 'Die Y Daten Kurswerte
    End With

    With xlBook.ActiveChart.Axes(Excel.XlAxisType.xlValue)
    Option Strict On Fehler !
    .HasTitle = True
    .AxisTitle.Caption = "Aktienwerte"
    .MinimumScale = min_werte - 1
    .MaximumScale = max_werte + 1
    .TickLabels.NumberFormat = "0 €"
    End With
    Bitte Post nachbearbeiten. Erst den Code im eigenen Text markieren, dann auf [VB.NET] klicken, nicht andersrum, sonst kommt das raus, was jetzt in Post#3 zu sehen ist. Siehe auch meine etwas ausführlichere Anleitung neulich in einem anderen Thread.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VB.NET-Quellcode

    1. With myChart
    2. .ChartType = XlChartType.xlLine
    3. Option Strict On Fehler !
    4. .SeriesCollection(1).HasDataLabels = False
    5. .SeriesCollection(1).XValues = a_datum.ToArray 'Die X-Daten Datum
    6. .SeriesCollection(1).Values = a_wert.ToArray 'Die Y Daten Kurswerte
    7. End With
    8. With xlBook.ActiveChart.Axes(Excel.XlAxisType.xlValue)
    9. Option Strict On Fehler !
    10. .HasTitle = True
    11. .AxisTitle.Caption = "Aktienwerte"
    12. .MinimumScale = min_werte - 1
    13. .MaximumScale = max_werte + 1
    14. .TickLabels.NumberFormat = "0 €"
    15. End With

    Hoffentlich ist es jetzt richtig eingefügt
    na, die Zeile

    VB.NET-Quellcode

    1. Option Strict On Fehler !
    kompiliert natürlich nicht.
    Option Strict solltest du entsprechend dem hier machen: Visual Studio - Empfohlene Einstellungen

    Aber ich glaube, das wusstest du schon, und du wolltest nur iwelche Bereiche markieren.
    Nu weiss ich aber nicht welche, und auch nicht, wie die genaue Fehlermeldung lautet. Probier mal prinzipiell so:

    VB.NET-Quellcode

    1. With myChart
    2. .ChartType = XlChartType.xlLine
    3. .SeriesCollection(1).HasDataLabels = False ' ERROR: "Option Strict On erlaubt nicht die Konvertierung von False nach String"
    4. .SeriesCollection(1).XValues = a_datum.ToArray 'Die X-Daten Datum
    5. .SeriesCollection(1).Values = a_wert.ToArray 'Die Y Daten Kurswerte
    6. End With
    7. With xlBook.ActiveChart.Axes(Excel.XlAxisType.xlValue)
    8. .HasTitle = True
    9. .AxisTitle.Caption = "Aktienwerte"
    10. .MinimumScale = min_werte - 1
    11. .MaximumScale = max_werte + 1
    12. .TickLabels.NumberFormat = "0 €"
    13. End With
    So in der Art.
    Also ich muss genau und im Einzelnen wissen, welcher Fehler (genauer Wortlaut) und welche Zeile.
    With myChart
    .ChartType = XlChartType.xlLine
    .SeriesCollection(1).HasDataLabels = False BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .SeriesCollection(1).XValues = a_datum.ToArray BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .SeriesCollection(1).Values = a_wert.ToArray BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .HasTitle = True
    .ChartTitle.Text = AknName & " vom " & StartDatum & " bis " & EndDatum &
    vbCrLf & " min. Wert " & Format(min_werte, "#,##0.00 €") & " max. Wert " & Format(max_werte, "#,##0.00 €")
    .HasLegend = False
    End With

    'Y Achse Skalieren und Formatieren
    With xlBook.ActiveChart.Axes(Excel.XlAxisType.xlValue)
    .HasTitle = True BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .AxisTitle.Caption = "Aktienwerte" BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .MinimumScale = min_werte - 1 BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .MaximumScale = max_werte + 1 BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    .TickLabels.NumberFormat = "0 €" BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    End With

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „friedel“ ()

    ach - das ist ein Excel-Chart!
    Jo, Excel-InterOP ist lausig.
    Der Fehler sagt jedenfalls, dass eine Property nicht bekannt ist.
    Das kann entweder die Property myChart.SeriesCollection sein, oder myChart.SeriesCollection(1).HasDataLabels (und entsprechend die anneren).
    Aber ich glaube eher ersteres.
    Kannst auch mal so probieren:

    VB.NET-Quellcode

    1. .SeriesCollection.Item(1).HasDataLabels = False
    (vielleicht existiert ja die DefaultProperty nicht)

    Tja, sonst weiss ich da nicht so viel. Vielleicht gibt es iwo eine geeignetere Excel-Library zum Einbinden, wo diese Dinge dann bekannt sind. Excel gibts ja in wohl 20 Versionen.
    Wegen der vielen Versionen mach ichs tatsächlich so, dass ich InterOp-Code in besondere Dateien sperre, und Option Strict Off drüber schreibe.
    (Weil wenn du die richtige Lib einbindest und dein Proggi verteilst, und auf dem Zielrechner fährt eine annere Excel-Version herum, als mit der du entwickelt hast, ist auch Nese.)

    friedel schrieb:

    .SeriesCollection(1).HasDataLabels = False BC30574 "Option Strict On" lässt spätes Binden nicht zu.
    Probier mal

    VB.NET-Quellcode

    1. ​Dim coll = DirectCast(.SeriesCollection,Excel.SeriesCollection)
    2. Dim s as Excel.Series = coll(1)
    3. s.HasDataLabels = False
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo petaod
    du bist auf dem richtigen Weg!

    Dim coll = DirectCast(myChart.SeriesCollection, Excel.SeriesCollection)
    Dim s As Excel.Series = CType(coll(1), Series)
    s.HasDataLabels = False
    s.XValues = a_datum.ToArray
    s.Values = a_wert.ToArray

    Das läuft! Recht herzlichen Dank.
    Da ich es nicht so rechr verstehe möchte ich dich bitten mir auch den 2. Block zu übersetzen.
    Bitte in den ganzen Posts selbständig CodeTags setzen

    Wie Du dem Anhang bzw. den Hinweisen Deiner IDE entnehmen kannst, ist für den Compiler Axes(Excel.XlAxisType.xlValue) nur ein Object. Und das mag der Compiler nicht sonderlich in Kombi mit Option Strict On. Sag ihm, was es wirklich ist und gut ist:

    VB.NET-Quellcode

    1. With DirectCast(xlBook.ActiveChart.Axes(Excel.XlAxisType.xlValue), Excel.Axis)

    Wie bekommt man das raus? Such im Internet einfach nach Excel Axes AxisTitle. Denn diese Infos hast Du bereits über das ominöse Objekt. Dann kommst Du bei dieser MSDN-Seite raus, die Dir verrät, dass es eine Eigenschaft eines Axis-Objektes ist. Und damit weißt Du, wohin Du das unbestimmte Objekt mittels DirectCast umwandeln musst, damit der Compiler zufrieden ist.
    Bilder
    • JustAnotherObject.png

      8,14 kB, 862×59, 71 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Bitte in den ganzen Posts selbständig CodeTags setzen :(

    'Y Achse Skalieren und Formatieren

    With xlBook.ActiveChart.Axes(Excel.XlAxisType.xlValue)

    .HasTitle = True BC30574 "Option Strict On" lässt spätes Binden nicht zu.

    .AxisTitle.Caption = "Aktienwerte" BC30574 "Option Strict On" lässt spätes Binden nicht zu.

    .MinimumScale = min_werte - 1 BC30574 "Option Strict On" lässt spätes Binden nicht zu.

    .MaximumScale = max_werte + 1 BC30574 "Option Strict On" lässt spätes Binden nicht zu.

    .TickLabels.NumberFormat = "0 €" BC30574 "Option Strict On" lässt spätes Binden nicht zu.

    End With

    VB.NET-Quellcode



    Ich habe petaod gebeten mir wenn möglich das zu korrigieren.
    Was soll das? Wie ich bei den blauen Links (die bitte auch anklicken!) in Post#4 und Post#11 beschrieben habe: Codetext in den Post einfügen, markieren und dann [VB.NET] anklicken. Du hast das markieren vergessen. So taucht ganz unten ein leerer Code-Block auf. Nicht Sinn der Sache.
    Und bzgl. Deines Problems habe ich die Lösung gepostet. Ändere die With-Zeile in das ab, was ich ebenfalls in Post#11 als Code gepostet habe.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.