Eine Variable des Datentyps Variant kann alles sein, aber welcher Datentyp steckt in der Variant-Variablen nun eigentlich drin?

Ähnliche Dokumente
Mit ParamArrays unter VBA kann man Prozeduren und Funktionen mit einer flexiblen Anzahl von Parametern bestücken Kontext

Enthält die Variable einen Zahlenwert - IsNumeric() gibt Auskunft Kontext

Wie viele Zeilen und Spalten hat ein Rangeobjekt?

EXCEL VBA Cheat Sheet

Klausur WS 2013/14 EDV 2 Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Modul 122 VBA Scribt.docx

Informationsverarbeitung im Bauwesen

INFORMATIK TEIL: VBA. Infromatik WS 17/18 Teil: VBA. Allgemeines: - 4 Übungen á 3 Stunden

Klausur WS 2014/15 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Einführung in die Programmierung mit VBA

Klausur SS 2014 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Excel VBA. Teil Zusammenfassung! Was wir können sollten! V

Klausur SS 2013 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Universität Duisburg - Essen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Variablen und Konstanten

Excel VBA Arrays, Enumeration und benutzerdefinierte Typen

Informationsverarbeitung im Bauwesen

Visual Basic Express PST_Farbe_von_Layer

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

ACCESS. Formulare per VBA referenzieren FORMULARE MIT VBA PROGRAMMIEREN FORMULARE PER VBA REFERENZIEREN BASICS

Welche Informatik-Kenntnisse bringen Sie mit?

Excel Funktionen durch eigene Funktionen erweitern.

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Universität Duisburg - Essen

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Einführung in VisualBasic for Applications. Stefan Mahlitz

Nützliche Klassen. Armin Hess

VBA-Programmierung: Zusammenfassung

Visual Basic. Einführung

Algorithmen und ihre Programmierung

Makro + VBA 2007 effektiv

Makro Programmierung User Interface (Entwicklungs- Umgebung) Grafische Werkzeugbox. GUI Form erstellen (UserForm)

Schlüsselfelder für Grundbuchdaten. Spezifikation für GB-Softwarehersteller

Kapitel 3 Datentypen, Variablen und Konstanten

Geschrieben von: Marcus Rose Mittwoch, 28. Mai 2008 um 17:14 Uhr - Aktualisiert Montag, 09. März 2009 um 06:33 Uhr

10 Berechnungen aus der Elektrotechnik

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Programmieren lernen mit Visual Basic

Access 2010 Programmierung Import und Export nach Excel

Verteilung des Korrelationskoeffizienten r. für zwei unabhängige normalverteilte Merkmale. Studie

Universität Duisburg - Essen

Sub Rechnungsnummer() Range("A1") = Range("A1") + 1 End Sub

13. Funktionale Konzepte in Java

ÜBUNGS-BLOCK 7 LÖSUNGEN

4 Schleifen -= Entstanden unter Excel 2003 =-

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Sequentielle Textdateien HARALD NAHRSTEDT. Erstellt am

Paritäts-Bit- Generator

Projekt Sudoku 1. Teil Case Select

einlesen n > 0? Ausgabe Negative Zahl

Klausur SS 2011 EDV Anwendungen im Bauwesen 2. Name: Vorname: Matr.-Nr:

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Filter in VBA nutzen HARALD NAHRSTEDT. Erstellt am

Tag 4 Repetitorium Informatik (Java)

1 Datenübernahme ohne VBA Grundlagen der VBA Programmierung Inhalt

Programmieren in Java

Excel VBA Fehler im Programm

Eine durch Separatoren/Trennzeichen strukturierte Zeichenkette/String in einzelne Elemente zerlegen

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Universität Duisburg - Essen

Tutorium für Fortgeschrittene

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

13 Unterprogramme erstellen

Richtig Einsteigen: Excel 2007 mit VBA programmieren lernen Weber

Musterklausur Informatik 1 Prof. M. Lusti

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

Übungspaket 23 Mehrdimensionale Arrays

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

5. Übung - Kanalkodierung/Programmierung

Ein kleiner Blick auf die generische Programmierung

Einstieg in die Informatik mit Java

Universität Duisburg - Essen

Repetitorium Programmieren I + II

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Universität Duisburg - Essen

11. Berechnungen aus der Regelungstechnik

Bauinformatik 1. Teil 1 / VBA. Ernst Baeck. Fachgebiet Statik und Dynamik der Flächentragwerke. 27. April 2017

Wertebereich und Genauigkeit der Zahlendarstellung

Vorwort...10 Einleitung...12 Lernen Üben Anwenden...12 Inhalt und Aufbau des Buches...13 Inhalt...13 Aufbau Access 2007 (fast) alles ist

Universität Duisburg - Essen

Informationsverarbeitung im Bauwesen

Access [basics] Aktionsabfragen per VBA ausführen. Beispieldatenbank. Aktionsabfragen. Die Execute-Methode. Datenzugriff per VBA

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Algorithmen und Datenstrukturen 2. Stefan Florian Palkovits, BSc Juni 2016

Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)

Universität Duisburg - Essen

11. Funktionale Konzepte in Java

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

Generierung von Zufallszahlen gemäß einer vorgegebenen diskreten Verteilung

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Workshop Einführung in die Sprache Haskell

Transkript:

Eine Variable des Datentyps Variant kann alles sein, aber welcher Datentyp steckt in der Variant-Variablen nun eigentlich drin? Kontext In dem Artikel EXCEL 2010 VBA: Datentyp einer Variant-Variablen bestimmen - TypeName() wird eine Möglichkeit erläutert, wie man den Datentyp einer Variant-Varialben ermitteln kann. Da es viele Wege nach Rom gibt, wird hier die weitere Möglichkeit vorgestellt, das mit VarType() zu realisieren. Aufgabenstellung An die SUMMEn-Funktion von EXCEL kann eine beliebige Anzahl von Parametern übergeben werden und die Parameter können von unterschiedlichem Typ sein. In der Regel werden an eine Summenfunktion Range-Objekte (also Bereiche aus der Tabelle) oder Werte übergeben. Um was es sich handelt, muss also von der SUMMEn-Funktion selbst herausgefunden werden. In diesem Beispiel wird die Summen-Funktion nachempfunden, die Funktion hört auf den Namen MeineSumme. Wie bei der Originalfunktion von EXCEL, der Funktion SUMME, kann eine beliebige Anzahl von Parametern unterschiedlichen Datentyps übergeben werden. Für die Summenfunktion ist das wichtig, gilt es doch, auf ein Range-Objekt, das übergeben wird, anders zu reagieren als auf Zahlenwerte, die der Funktion mitgegeben werden. Dann muss noch geklärt werden, ob es sich wirklich um eine Zahl handelt, die man auch summieren kann. Hier die beispielhafte Aufgabenstellung auf einem EXCEL-Arbeitsblatt: 1 / 7

In Funktion EXCEL diesem - Das Die SUMME "MeineSumme" Fälschung: Original: Beispiel verwendet: werden =SUMME(A2:B3;B5;C5:C7;D9;B11:D11;C13) =MeineSumme(A2:B3;B5;C5:C7;D9;B11:D11;C13) aufsummiert. die Grün markierten Als Kontrollrechnung Bereiche und wird Zellen die Standardfunktion der selbstgeschriebenen von Bestimmung des Inhalts eine Variablen des Datentyps Variant mit der Funktion "TypeName()" Um die vollständige Funktionsweise der Funktion "MeineSumme" nachzuvollziehen, lesen Sie bitte den Artikel Die Verwendung von ParamArray. In der folgenden Beschreibung geht es nur um die Typbestimmung des Inhaltes einer Variant-Variablen. Die folgenden Erläuterungen beziehen sich auf den blau dargestellten Programmcode. 2 / 7

An die Funktion MeineSumme wird eine unbestimmte Anzahl an Parametern übergeben, der Empfänger der Parameter ist die Variable vbereich(), die als Variant typisiert ist. In dieser Variablen vbereich() können also Inhalte unterschiedlichen Typs stecken. Im Übergabeparameter vbereich() können somit alle möglichen Werte als auch Range-Objekte stecken, also gilt es, alle Range-Objekte von vbereich() herauszufiltern, die in der Funktion SummeRange() weiterverarbeitet werden. Diese zentrale Aufgabe übernimmt die VBA-Funktion VarType(). Steckt man eine Variable in VarType(), kommt als Rückgabeparameter ein Integer-Wert zurück, der den Typ der übergebenen Variablen charakterisiert. Dabei kann man als Entwickler auf die folgenden VBA-Konstenten reagieren, die bereits vordefiniert sind. Konstante Wert Beschreibung vbempty 0 Empty (nicht initialisiert) vbnull 1 Null (kein gültiger Dateninhalt) vbinteger 2 Integer vblong 3 Long integer vbsingle 4 Single-Variable vbdouble 5 Double-Variable vbcurrency 6 Währung vbdate 7 Datumswert vbstring 8 Zeichenkette vbobject 9 Objekt vberror 10 Fehlerwert vbboolean 11 Boolean vbvariant 12 Variant-Variable vbdataobject 13 Datenobjekt (in Zusammenhang mit Access) vbdecimal 14 Dezimal-Wert vbbyte 17 Byte-Wert vbuserdefinedtype 36 Anwenderdefinierter Variablentyp vbarray 8192 Array 3 / 7

Dies Analyse des Inhalts wird in der Select Case-Struktur vorgenommen. Je nachdem, was Typ ename() als Ergebnis zurückgibt, wird in unterschiedliche Vorgehensweisen verzweigt. Handelt es sich um einen Zahlenwert, wird die Zahl in der Variablen dsumme aufsummiert, handelt es sich um das Objekt Range, wird die Auswertung des Inhalts von Range in einer weiteren Funktion verarbeitet (die übrigens auch wieder den Ihnalt der einzelnen Range-Werte entsprechend des Typs untersucht). Man kann die Fallunterscheidung auch mit If.. Then.. Else bewerkstelligen, Select.. Case finde ich jedoch übersichtlicher. Nun folgt noch der Programmcode... Function MeineSumme(ParamArray vbereich() As Variant) As Double Dim lanzahleintraege As Long Dim lzaehleranzahleintraege As Long Dim dsumme As Double lanzahleintraege = UBound(vBereich()) ' Die Anzahl der übergebenen Parameter wird bestimmt ' ACHTUNG: da VBA die Indizierung bei 0 beginnt, kommt als Wert ' Anzahl-der-Einträge - 1 heraus, also bei 6 Elementen 5 4 / 7

dsumme = 0 ' Wert Initialisieren, ist eigentlich in VBA bei erstmaliger Verwendung nicht notwendig, ' aber eine alte Gewohnheit For lzaehleranzahleintraege = 0 To lanzahleintraege ' Hier werden die Werte in den einzelnen Ranges aufsummiert Select Case VarType(vBereich(lZaehlerAnzahlEintraege)) Case 8204:' Das Resultat 8.204 entspricht einem Range-Objekt dsumme = dsumme + SummeRange(vBereich(lZaehlerAnzahlEintraege)) Case Else: If IsNumeric(vBereich(lZaehlerAnzahlEintraege)) Then ' Prüfung, ob es sich um einen numerischen Wert handelt dsumme = dsumme + vbereich(lzaehleranzahleintraege) End If End Select Next lzaehleranzahleintraege MeineSumme = dsumme End Function Der Vollständige Programmcode Option Explicit Function SummeRange(ByVal vbereich As Range) As Double Dim lzeilen As Long 5 / 7

Dim lspalten As Long Dim lzaehlerzeilen As Long Dim lzaehlerspalten As Long Dim dsumme As Double lzeilen = vbereich.rows.count ' Die Anzahl Zeilen werden bestimmt lspalten = vbereich.columns.count ' Die Anzahl Spalten werden bestimmt dsumme = 0 ' Wert Initialisieren, ist eigentlich in VBA bei erstmaliger Verwendung nicht notwendig, ' aber eine alte Gewohnheit For lzaehlerzeilen = 1 To lzeilen ' Hier werden die Werte in den einzelnen Zellen aufsummiert For lzaehlerspalten = 1 To lspalten If IsNumeric(vBereich.Cells(lZaehlerZeilen, lzaehlerspalten).value) Then ' Prüfung, ob es sich ' um einen numerischen Wert handelt dsumme = dsumme + vbereich.cells(lzaehlerzeilen, lzaehlerspalten).value End If Next lzaehlerspalten Next lzaehlerzeilen SummeRange = dsumme End Function Function MeineSumme(ParamArray vbereich() As Variant) As Double Dim lanzahleintraege As Long Dim lzaehleranzahleintraege As Long Dim dsumme As Double lanzahleintraege = UBound(vBereich()) ' Die Anzahl der übergebenen Parameter wird bestimmt ' ACHTUNG: da VBA die Indizierung bei 0 beginnt, kommt als Wert ' Anzahl-der-Einträge - 1 heraus, also bei 6 Elementen 5 dsumme = 0 ' Wert Initialisieren, ist eigentlich in VBA bei erstmaliger Verwendung nicht 6 / 7

notwendig, ' aber eine alte Gewohnheit For lzaehleranzahleintraege = 0 To lanzahleintraege ' Hier werden die Werte in den einzelnen Ranges aufsummiert Select Case VarType(vBereich(lZaehlerAnzahlEintraege)) Case 8204: ' Das Resultat 8.204 entspricht einem Range-Objekt dsumme = dsumme + SummeRange(vBereich(lZaehlerAnzahlEintraege)) Case Else: If IsNumeric(vBereich(lZaehlerAnzahlEintraege)) Then ' Prüfung, ob es sich um einen numerischen Wert handelt dsumme = dsumme + vbereich(lzaehleranzahleintraege) End If End Select Next lzaehleranzahleintraege MeineSumme = dsumme End Function Schlussbetrachtung Auch dieses Beispiel können Sie sich herunterladen. Bitte beachten Sie auch den Folgenden Artikel: EXCEL 2010 VBA: Datentyp einer Variant-Variablen bestimmen - TypeName() 7 / 7