Thomas Büttner: Visual Basic

Hallo zusammen,
Ich habe ein kleines Problem mit Visual Basic:
Ich greife auf eine Excel-Tabelle zu und lese die Daten dort in Variablen ein.
In einem Datenfeld ist ein Verweis auf eine Tabelle (SVERWEIS) und dadurch hat dieses Feld manchmal Zahlen und manchmal Strings als Inhalt.
a) Wie kann ich unter VB abfragen, ob eine Variabel Zahl oder String ist?
b) Wenn das nicht geht, wie kann ich dann ein Feld einlesen, das mal Zahl, mal String ist?

Danke und Gruß,
Thomas

  1. hallo Thomas,

    Ich greife auf eine Excel-Tabelle zu und lese die Daten dort in Variablen ein.
    In einem Datenfeld ist ein Verweis auf eine Tabelle (SVERWEIS) und dadurch hat dieses Feld manchmal Zahlen und manchmal Strings als Inhalt.
    a) Wie kann ich unter VB abfragen, ob eine Variabel Zahl oder String ist?
    b) Wenn das nicht geht, wie kann ich dann ein Feld einlesen, das mal Zahl, mal String ist?

    Ich denke, du  mußt noch ein bißchen genauer werden. Das Einlesen an sich hast du doch schon gemacht, oder? Dem Variant-Datentyp sollte es doch egal sein ob String oder Zahl. Ich nehme an du mußt es dann nur unterscheiden, wenn du mit den Variablen weiter arbeitest?
    Beschreib doch mal was du dann mit den ganzen Strings und Zahlen machen willst.

    Bis dahin
    Claudia

    1. Also, ich habe ca. 200 Excel-Tabellen mit Daten.
      Die Namen der Tabellen stimmen überein, genau wie der Aufbau.
      Ich will nun die Daten der Tabelle als recordset einlesen (klappt auch wunderbar) und übertrage sie in eine Access-Tabelle. Alles kein Problem.

      Leider gibt es da aber noch die Anwender.
      Die haben in den Excel-Tabellen Einträge gemacht, die dem Primärschlüssel der Access-Tabelle wiedersprechen(Den darf ich aber nicht verändern!).
      Also mußte ich ein Unterprogramm schreiben, das vorher diese Verstöße ausmerzt. Auch kein Problem.
      Aber jetzt: Innerhalb dieses Unterprogramms lese ich die Daten in Variabeln, und auch wenn ich Variant nehme, haut er mir da einen Fehler rein.
      Er sagt mir, das die Excel-Tabelle den Wert NULL enthält. Allerdings ist dies nicht der Fall (garantiert nicht!)
      Diese Zellen greifen wie gesagt über SVERWEIS auf eine andere Excel-Tabelle zu und ziehen sich daher ihren Inhalt. Dieser Fehler tritt nur bei den Feldern auf, wo der Inhalt eine Zahl ist, wenn der Inhalt ein String ist, kein Problem...

      HILFE!!!

      1. Hallo nochmal,

        Dieser Fehler tritt nur bei den Feldern auf, wo der Inhalt eine Zahl ist, wenn der Inhalt ein String ist, kein Problem...

        HILFE!!!

        Was mir jetzt mal spontan eingefallen ist (sei gewarnt, ich bin dafür bekannt umständlichen Code zu schreiben):
        Also ich würde versuchen alles erstmal als String einzulesen, die String-Variablen dann in Variant umwandeln. Bei Variant-Variablen kann man dann mit isNumeric (oder so ähnlich heißt die Funktion) feststellen, ob man sie in ein numerisches Format umwandeln kann.

        Ich hoffe das mit dem als String einlesen funktioniert...

        Schöne Grüße
        Claudia

        1. Bei Variant-Variablen kann man dann mit isNumeric (oder so ähnlich heißt die Funktion) feststellen, ob man sie in ein numerisches Format umwandeln kann.

          Mit Val() kannst Du den Wert ermitteln. Wenn im String z.B. 10 drin steht gibt Integer_var = Val(string) dann hast Du in Integer_var den Wert 10.

          Dim MyValue
          MyValue = Val("2457") ' Returns 2457.
          MyValue = Val(" 2 45 7") ' Returns 2457.
          MyValue = Val("24 and 57") ' Returns 24.

          Du sagst zwar dass Du garantiert kein NULL bekommst. Aber Du solltest ev. trotzdem NULL abfangen (zur Sicherheit) und zwar geht das mit isNull, dann schiessts wenigstens nicht mehr und Du kommst ev. dem Problem näher!!

          Dim MyVar, MyCheck
          MyCheck = IsNull(MyVar) ' Returns False.
          MyVar = ""
          MyCheck = IsNull(MyVar) ' Returns False.
          MyVar = Null
          MyCheck = IsNull(MyVar) ' Returns True.

          cheers
          kaepten