Variablen-Zuweisung?

  • VB.NET

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

    Variablen-Zuweisung?

    Hi Leute,

    ich habe eine Frage bezüglich der Variablen Zuweisung. Stellt euch mal folgendes vor: Ihr lest aus einem Excel-Sheet Zahlen in eine Variable ein. Dabei ist mir aufgefallen, dass dabei egal ist, ob die Variable als Integer oder als String dimensioniert ist. Wenn ich im Direkt fenster die Variable auslesen lasse, dann bekomm ich immer den richtigen Wert ausgegeben! Führt das nicht zu Problemen?
    Wie mache ich das am besten? Der Code sieht übrigens so aus:

    VB.NET-Quellcode

    1. rowNumber = xwsin.Cells(rowin - 2, 24) 'hier wird Zeilennummer aus Excel-Sheet herausgesucht
    2. rowNumber = "PM" & rowNumber
    3. Set rsPM = CurrDB.OpenRecordset("SELECT * FROM PM WHERE Row Like '" & rowNumber & "' ;", dbOpenDynaset)




    Das komische ist aber, dass es dennoch funktioniert. rowNumber ist als String dimensioniert. rsPM ist ein DAO.Recordset. In der ersten Zeile wird vom Excel-Sheet die Zahl in rowNumber eingelesen. Ich bin grad nicht sicher, ob im Excel-Sheet vielleicht nicht schon die Zahl nicht als Integer sondern Zeichen drin steht...; wie kann ich das im Sheet herausfinden?

    Ich sehe gerade, dass die Spalte in denen die Zeilennummern stehen und die mit xwsin.Cells() auslese, als Standard-Format angegeben sind und somit keinen bestimmten Typ haben. Kann es sein, wenn in Excel kein bestimmter Typ angegen wird, dass dann ein impliziter Typecast vorgenommen wird, der abhängig von der verwendeten Variable castet? In meinen Fall eben in eine String-Variable?

    Stimmt das so?

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

    Genau.

    Weil ohne Option Strict on castet VB wie wild durch die Gegend und es entstehen viele Fehler, die erst später auffallen.

    So werden diese direkt gezeigt und deine Frage, warum es "funktioniert" ist geklärt => Weil es ihm ohne egal ist.
    Mit Option Strict On programmierst du Typsicher, was Fehler vermeidet.
    Wo muss ich denn das option strict on schreiben? Ich hab hier ein Modul mit mehreren Sub's! Ist mein Code wirklich so schilmm

    VB.NET-Quellcode

    1. rowNumber = xwsin.Cells(rowin - 2, 24) 'hier wird Zeilennummer aus Excel-Sheet herausgesucht rowNumber = "PM" & rowNumber Set rsPM = CurrDB.OpenRecordset("SELECT * FROM PM WHERE Row Like '" & rowNumber & "' ;", dbOpenDynaset)
    , dass man das Castverhalten nicht voraus sagen kann?
    Ich sehe übrigens gerade, dass dieses Option Strict On bei mir schon in zweiten Zeile (Header) steht. Warum geht mein Code dann dennoch? Ich hab hier ein größeres Projekt vor mir, dass ich jetzt betreuen soll, ich aber nicht selbst geschrieben hab; deswegen die teils (wahrscheinlich) dummen Fragen.

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

    sorry - wir haben wohl automatisch auf Strict Off geschlossen, wegen:

    VB.NET-Quellcode

    1. rowNumber = xwsin.Cells(rowin - 2, 24) 'hier wird Zeilennummer aus Excel-Sheet herausgesucht
    2. rowNumber = "PM" & rowNumber
    hier wird erst typ Excel.Range an rowNumber zugewiesen, und in der nächsten Zeile Typ String.
    Also ganz typischer Strict-Off-Programmier-Unfug, der bei Strict On sofort auffliegt.

    Es sei denn, du hast rowNumber As Object deklariert - dann kannst du da natürlich jeden Mist zuweisen. :wacko: