Mit TextBoxen Rechnen-Fehler!

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mit TextBoxen Rechnen-Fehler!

    Guten Tag,
    ich habe ein Problem und würde mich über Hilfe Eurerseits Freuen.
    Ich hab ein Programm in dem mit Textboxen gerechnet werden soll (50 an der Zahl)
    Ich habe jetzt alle deklariert das sie nur noch zahlen, komma und Backspace zulassen.
    Habe alle als Kommazahl deklariert

    siehe Bsp

    VB.NET-Quellcode

    1. Dim Zahl1 As Double = CInt(a.Text)


    Das Ergebniss ist dann deklariert als

    VB.NET-Quellcode

    1. Dim Ergebniss As Double = Zahl1 + Zahl2 + Zahl3 + usw...


    Wenn ich eine der Textboxen ändere soll er mir in einer 51. den Wert aller (aktuell) anzeigen
    (ist für ein Rechnungsprogramm also max. 50 Pos. und davon der Preis mach gleich =... (51te Textbox)


    wenn ich jetzt das Programm starte bricht er ab sobald er die Form in der die Textboxen sind lädt.

    Hab jetzt im Forum gelesen das man Option Strict on noch über der Class deklarieren soll, sobald ich allerdings das tue zeigt er mir das meine ganzen import und export Funktionen nach Excel nicht mehr funzendie auch i dieser Form sind.
    Bsp.

    VB.NET-Quellcode

    1. Dim Excel As Object, Workbook As Object,
    2. Excel = CreateObject("Excel.Application")
    3. With Excel.Application
    4. .DisplayAlerts = False
    5. End With
    6. Workbook = Excel.Workbooks.OpenXML(Application.StartupPath & "\bin\kd.dat")


    was mach ich falsch oder hab ich was vergessen
    (oder überfordere ich ihn wenn ich 50 Textboxen als Zahl deklariere???.


    Danke euch schon im vorraus für evtl Hilfe.

    Lg Philipp
    Also in der ersten Zeile Option Strict On ist super.
    Nun werden dir viele Fehler eingeblendet. Die solltest du alle versuchen zu korrigieren.
    Neben dem Fehler (am Ende) wird dir eine kleine Rote Markierung eingeblendet.
    Wenn du diese anklickst, gibt es meist schon einen Lösungsvorschlag.


    Das folgende solltest du ändern.

    Senubius schrieb:

    Dim Zahl1 As Double = CInt(a.Text)

    in

    VB.NET-Quellcode

    1. Dim Zahl1 As Double = CDbl(a.Text)
    .

    Du möchtest ja den Text aus der TextBox in "Zahl As Double" haben.
    Also auch mit CDbl(..) konvertieren, nicht mit Cint.

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

    Also wenn ich als CDble deklariere dann sagt er mir "CDble wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicher weise nicht zugegriffen werden."

    ?(

    Die Rote Markierung fehlt ebenfalls bei dem Oben erwähnten fehler zwecks "Option Strict On"

    dann sagt er mir wenn ich mit der Maus drüber fahre zu Bsp Über

    VB.NET-Quellcode

    1. Workbook.Close()


    "Option Strict On lässt Spätes Binden nicht zu.

    ??? Wad will der von mir? BAHNHOF!!!

    Bin für jede Hilfe Dankbar.

    LG Philipp

    Edit____ Du meinst bestimm CDbl ? oder

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

    VB.NET-Quellcode

    1. CDbl(x)
    2. 'Nimm
    3. Double.Parse(xxx.Text)

    Du musst das Ergebnis richtig casten:

    VB.NET-Quellcode

    1. Dim Excel As Object ' hier muss dann irgend etwas mit Excel.Application stehen
    2. Excel = DirectCast(CreateObject("Excel.Application"), xxxx) 'xxxx - hier muss dann irgend etwas mit Excel.Application stehen
    Mach mal Option Strict Off, da sollte das gehen. Ist bei Excel manchmal sinnvoll, aber nicht notwendig.
    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!
    Ne du hast dich nicht verlesen. Ich hatte mich verschrieben und zwischenzeitlich Editiert. Schei.. LRS.

    Das Workbook ist Closed. Hat eigentlich gar nichts damit zu tun.
    Unten an der gestrichelten Linie. Da sollte eine Rote Markierung sein.

    Ansonsten mal auf F1 drücken. Da kommt meist eine schöne Hilfe von MSDN.

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. CDbl(x)
    2. 'Nimm
    3. Double.Parse(xxx.Text)

    Du musst das Ergebnis richtig casten:

    VB.NET-Quellcode

    1. Dim Excel As Object ' hier muss dann irgend etwas mit Excel.Application stehen
    2. Excel = DirectCast(CreateObject("Excel.Application"), xxxx) 'xxxx - hier muss dann irgend etwas mit Excel.Application stehen
    Mach mal Option Strict Off, da sollte das gehen. Ist bei Excel manchmal sinnvoll, aber nicht notwendig.


    Das mit Excel Import und Export Problem hab ich ja erst seit dem Option Strict On

    Davor hats ja wunderbar geklapt aber wie mach ich das ohne das OptionStrict on Das er die Textboxen trotzdem als Zahl deklarieren kann weil ohne Option Strict on bricht er wie gesagt immer ab sobald er die Form laden soll ...


    LG Philipp


    Wenn ich die Hilfe Aufrufe gibt er mir nichts zu meinem Problem aus (zwecks stict on und Spätes Binden geht das denn nicht irgendwie ohne Option Strict on?)

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

    Gib den Textboxen ein KeyDown-Event und lass nur die von Dir gewünschten Tastendrücke zu.
    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!
    Jetzt versteh ich gar nichts mehr.
    Kannst Du Dein Problem bitte noch mal schildern?
    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!
    Eine Form in der Daten von Excel importiert und Exportiert werden sollen.
    50 TextBoxen in den Zahlen stehen sollen die per TextChange.Event in einer 51. ausgegeben (zusammengerechnet) werden sollen.
    Wie gesagt die Textboxen sind per Keydown event deklariert und als Zahl.
    Starte ich die Form bricht er ab ich vermute weil ihm das OptionStrict on fehlt.
    Mit option Strict on Bekomm ich 102Fehler weil ich mit mehreren exceldateien komuniziere in der Form wo er dann meckert :Option Strict on lässt spätes binden nicht zu. (zum Bsp bei dem Befehl :Workbook.Close() )

    das war so die kurzform ;)

    Senubius schrieb:

    Starte ich die Form bricht er ab ich vermute weil ihm das OptionStrict on fehlt.

    Setze mal in Form_Load einen Haltepunkt und geh mit F10 zeilenweise durch, bis was passiert.
    Und poste dann bitte mal den Code der Form_Load.
    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!
    Also die Form wird ja über button gesteuert einer anderen Form.
    Sobald der Befehl "Form1.show" aktieviert wird kommt folgende Fehlermeldg:
    Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt..

    Der Load der Form1(also die geladen werden soll lautet:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. IMPORTKD.Text = 0
    3. VERKD.Text = 0
    4. VERKFZ.Text = 0
    5. IMPORTKFZ.Text = 0
    6. COUNTKFZ.Text = 0
    7. COUNTKD.Text = 0
    8. GroupBox4.Enabled = True
    9. GroupBox5.Enabled = False
    10. GroupBox6.Enabled = False
    11. GroupBox7.Enabled = False
    12. Me.Size = New Size(376, 665)
    13. 'comboboxen füllen
    14. Dim Excel As Object, Workbook As Object
    15. Dim count As String = 1
    16. Excel = CreateObject("Excel.Application")
    17. With Excel.Application
    18. .DisplayAlerts = False
    19. End With
    20. Workbook = Excel.Workbooks.OpenXML(Application.StartupPath & "\bin\awl.dat")
    21. Do Until Workbook.Sheets(1).Cells(count, 1).Formula = ""
    22. ComboBox1.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    23. ComboBox2.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    24. ComboBox3.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    25. ComboBox4.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    26. ComboBox5.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    27. ComboBox6.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    28. ComboBox7.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    29. ComboBox8.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    30. ComboBox9.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    31. ComboBox10.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    32. ComboBox11.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    33. ComboBox12.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    34. ComboBox13.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    35. ComboBox14.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    36. ComboBox15.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    37. ComboBox16.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    38. ComboBox17.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    39. ComboBox18.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    40. ComboBox19.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    41. ComboBox20.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    42. ComboBox21.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    43. ComboBox22.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    44. ComboBox23.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    45. ComboBox24.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    46. ComboBox25.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    47. ComboBox26.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    48. ComboBox27.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    49. ComboBox28.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    50. ComboBox29.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    51. ComboBox30.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    52. ComboBox31.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    53. ComboBox32.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    54. ComboBox33.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    55. ComboBox34.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    56. ComboBox35.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    57. ComboBox36.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    58. ComboBox37.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    59. ComboBox38.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    60. ComboBox39.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    61. ComboBox40.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    62. ComboBox41.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    63. ComboBox42.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    64. ComboBox43.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    65. ComboBox44.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    66. ComboBox45.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    67. ComboBox46.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    68. ComboBox47.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    69. ComboBox48.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    70. ComboBox49.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    71. ComboBox50.Items.Add(Workbook.Sheets(1).Cells(count, 1).Text)
    72. count = count + 1
    73. Loop
    74. Workbook.Close()
    75. With Excel.Application
    76. .DisplayAlerts = True
    77. End With
    78. For Each Process In System.Diagnostics.Process.GetProcessesByName("excel")
    79. Process.Kill()
    80. Next
    81. End Sub



    LG Philipp

    VB.NET-Quellcode

    1. Form1.Show()
    Wo wird das aufgerufen?
    Form1 ist keine Instanz, sondern ein Klassenname.
    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!
    Hallo @RodFromGermany

    er soll doch erst mal alle Fehler beseitigen.
    Sonst ist doch kein ordentliches weiterkommen.

    Das ist ein String un keine 0

    VB.NET-Quellcode

    1. IMPORTKD.Text = 0


    Das sollte ein Integer sein und kein String

    VB.NET-Quellcode

    1. Dim count As String = 1


    da kann nur schrott bei raus kommen.

    Eins nach dem anderen. Wenn die Fehler beseitigt sind ist ein weiterkommen viel leichter möglich.

    Sorry das ich mich einmische.

    Bernd schrieb:

    Hallo @RodFromGermany

    er soll doch erst mal alle Fehler beseitigen.
    Sonst ist doch kein ordentliches weiterkommen.

    Das ist ein String un keine 0

    VB.NET-Quellcode

    1. IMPORTKD.Text = 0


    Das sollte ein Integer sein und kein String

    VB.NET-Quellcode

    1. Dim count As String = 1


    da kann nur schrott bei raus kommen.

    Eins nach dem anderen. Wenn die Fehler beseitigt sind ist ein weiterkommen viel leichter möglich.

    Sorry das ich mich einmische.



    Naja das hab ich jetzt mal überhört ;)

    zu dem schrott der übrigens funzt;-)
    er ist vlt (oder sogar bestimmt) nicht die Eleganteste lösung aber wie gesagt er funzt.
    Wenn ich die 50 Textboxen weglasse (also das deklarieren als komma zahl) und das option strict on auch weglasse lädt er die Form und ich kann alles so machen wie ich es will (also noch keine Fehler entdeckt) es geht also nur um das rechnen mit dem Textboxen (vorzugswise ohne die Option strct on definition.)

    LG Philipp
    Sei doch mal vernünftig. Ist wirklich nur gut gemeint.

    Dein Programm ist nur mit Fehler Korrekturen beschäftigt.
    Es soll doch fehlerfrei und schnell laufen. oder ?

    Geh kurz mit suchen und ersetzen und behebe die par Fehler. Geht raz faz.
    Aus

    VB.NET-Quellcode

    1. IMPORTKD.Text = 0

    machst du

    VB.NET-Quellcode

    1. IMPORTKD.Text = "0"


    Aus

    VB.NET-Quellcode

    1. Dim count As String = 1

    machst du

    VB.NET-Quellcode

    1. Dim count As Integer = 1


    Dann sollten es schon mal einige Fehler weniger sein.

    Den Rest schaffen wir dann auch noch.
    Bin ja für jede hilfe dankbar (absoluter neuling) ;)
    also integer bei ganzzahlen da string =text
    und "0" weil ja textbox.text ="Text" und keine Zahl sein sol

    hab ich das so richtig verstanden ??



    Edit_____________

    Grundsatzfrage: Kann es sein das ich ihn mit 50 deklarationen einfach überfordere hab jetzt mal spassenshalber versucht die Textboxen als String zu deklarieren ohne irgendwelche rechen operationen

    also: Dim Zahl1 as String = TextBox1.Text
    Dim Tahl2 as String = TextBox2.Text
    usw...

    also nicht mehr als die Deklarationen...

    gibt er mir den selben fehler aus .... (also genau den selben als wollte ich sie zu einer kommazahl deklarieren.

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

    Die Text Box ist ein String. Genau

    Wenn du da etwas reinschreibst soll es ein Text sein
    TextBox1. Text = "0"

    Wenn du mit der Zahl Später wieder rechnen möchtest, dann zurück nach Integer wandeln.
    Dim MeineIntegerZahl As Integer = Cint(Textbox1.Text)

    Nun Kannst du lustig rechnen.

    Bei Double (mit Komma) natürlich anders
    TextBox1.Text = "3,141592653"

    Dime MeineDoubleZahl As Double = CDbl(TextBox1.Text)

    Nun rechnen.

    Also in der TextBox ist eine String.
    Rechnen tust du z.B. mit Integer oder Double oder ....
    Auf keinen Fall mit String.

    die Späte Bindung umgehst du so.
    Das Beispiel aus MSDN

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop.Excel

    VB.NET-Quellcode

    1. Dim Excel_Appl As Application
    2. Dim Excel_Book As Workbook
    3. Dim Excel_Sheet As Worksheet
    4. Excel_Appl = CType(CreateObject("Excel.Application"), Microsoft.Office.Interop.Excel.Application)
    5. With Excel_Appl.Application
    6. .DisplayAlerts = False
    7. End With
    8. Excel_Book = Excel_Appl.Workbooks.OpenXML(System.Windows.Forms.Application.StartupPath & "\bin\kd.dat")


    Vermeide Namen Wie Excel oder andere bereicht vom System verwendete Dinger.
    also du meinst einfach den Namen "Excel" vermeiden (in kombination aber möglich)

    Aber warum deklariert er mir dann Workbook als fehler (bsp Workbook.Close())
    oder sollte ich generell excel begriffe vermeiden

    LG Philipp

    PS: Kurz vor der verzweiflung... :P

    ___________

    So nach änderung aller excel und worbook in meiner form zeigt er mir immer noch an das spätes binden bei Option String on nicht geht... trotz Microsoft.Interop.bla bla blaa ;)
    *verzweifel*

    Lg Philipp

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