Bauinformatik 1 - Teil 1 / VBA -...

Post on 20-Jun-2019

228 views 3 download

transcript

Bauinformatik 1Teil 1 / VBA

Ernst Baeck

Fachgebiet Statik und Dynamik der Flachentragwerke

10. April 2019

E. Baeck (Uni-DUE) Folien-Skript (V) 1 / 49

VBA-Grundlagen

Die ProgrammierspracheVBA

Visual Basic for Applications

E. Baeck (Uni-DUE) Folien-Skript (V) 2 / 49

VBA-Grundlagen Einleitung

Erste VBA Anmerkungen

Ein Programm...

ist eine Textdatei

Beginn mit sub, Ende mit end sub

hat einen Namen (hier hello)

enthalt Kommentare

enthalt Deklarationen

enthalt Anweisungen

wird sequentiell ausgefuhrt

freies Format

nicht case sensitive

besteht i.A. aus mehreren Teilen

’ H e l l o WorldSub h e l l o ( )

Dim s As S t r i n gs = ” He l l o World ! ”MsgBox s

End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 3 / 49

VBA-Grundlagen Kommentar

Kommentar

Ein Kommentar...

ist ein beliebiger Text

wird bei Ausfuhrung ignoriert

wird durch ein ’ Zeichen eingeleitet

ist fur Verstandnis unverzichtbar

’ . . . h i e r geht e s l o sSub h e l l o ( )

’ V a r i a b l e n d e k l a r a t i o nDim s As S t r i n g’ Zuweisungs = ” He l l o World ! ”’ S t a r t e MessageboxMsgBox s

End Sub’ . . . h i e r i s t das Ende

E. Baeck (Uni-DUE) Folien-Skript (V) 4 / 49

VBA-Grundlagen Statement

Statement

Ein Statement...

ist eine Deklaration oder...

eine Anweisung

wird durch Zeilenende geschlossen

oder durch das Zeichen :

wird mit fortgesetzt

enthalt Schlusselworte (dim,...)

und Namen (a,b,...)

’ Some StatementsSub d e k l a r a t i o n e n ( )

’ e i n Statementdim a As I n t ege rdim b As I n t ege rdim c As I n t ege r

’ zwe i Statementsa = 1 : b = 3

’ e i n Statement i n’ 2 Z e i l e nc = a

+ b

MsgBox ”Das war ’ s ! ”End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 5 / 49

VBA-Grundlagen Deklaration

Deklaration

Eine Deklaration...

steht i.A. vor den Anweisungen

vereinbart eine neue Variable

oder eine Konstante

vereinbart deren Namen

vereinbart deren Indizierung(Vektor/Matrix)

beginnt mit dem Schlusselwort dim

dim <Name> as <Datentyp>

’ e l emen ta r e DatentypenSub d e k l a r a t i o n e n ( )

’ numer i s che TypenDim b As ByteDim i As I n t ege rDim l As LongDim s As S i ng l eDim d As Double

’ w e i t e r e TypenDim n As BooleanDim y As S t r i n gDim v As Var i antDim o As Object

’ KonstanteConst p i = 3 .14

MsgBox ”Das war ’ s ! ”End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 6 / 49

VBA-Grundlagen Namen

Namen

Namen mussen syntaktisch korrekt sein:

keine Schlusselworte

durfen keine Leerzeichen enthalten

durfen keine Operatoren enthalten

erster Buchstabe keine Ziffer

Name Bewertunga oka1b oka b Leerzeichena.b Operatoraou Keine Sonderzeichen

’ e l emen ta r e DatentypenSub d e k l a r a t i o n e n ( )

’ numer i s che TypenDim 1b As ByteDim i+ As I n t ege rDim l As LongDim s As S i ng l eDim d− As Double

’ w e i t e r e TypenDim n ( ne i n ) As BooleanDim y ( j a ) As S t r i n gDim v As Var i antDim o As Object

’ KonstanteConst 314 p i = 3 .14

End Sub

Was ist unzulassig?

E. Baeck (Uni-DUE) Folien-Skript (V) 7 / 49

VBA-Grundlagen Namen

Programm in VBA-IDE

IDE :Integrated Development Environment

Trubo Pascal :eine der ersten IDEs in den 80igern

Syntax Highlighter :

Kommentare grunSchlusselworte blauProgramm-Code schwarzFehlerhafte Zeilen rot

E. Baeck (Uni-DUE) Folien-Skript (V) 8 / 49

VBA-Grundlagen Datentypen

Datentypen

E. Baeck (Uni-DUE) Folien-Skript (V) 9 / 49

VBA-Grundlagen Datentypen

Elementare Datentypen

Datentypen ...

sind abhangig von Hardware

basieren auf 8Bit Bytes

nur 2er Potenzen verfugbar (1,2,4,8)

Typ Suf Bytes Bereich HinweisByte 1 0 · · · 255 nur positiv!Integer % 2 −32768 · · · 32767 sonst 4BytesLong & 4 −2147483648 · · · 2147483647 ca. 2G = 2 ·109Boolean 2 TRUE ,FALSE / FFFF ,0000 nur 1 Bit!Single ! 4 float: 7 signifikante Stellen nur fur GraphikDouble # 8 float: 16 signifikante Stellen fur BerechnungString $ 2GB Beschrankung durch Integer fur TexteVariant - beliebiger Inhalt VBA⇔EXCELObject 4 Objektadresse

E. Baeck (Uni-DUE) Folien-Skript (V) 10 / 49

VBA-Grundlagen Operatoren

Operatoren

E. Baeck (Uni-DUE) Folien-Skript (V) 11 / 49

VBA-Grundlagen Operatoren

Arithmetische Operatoren

Nahezu mathematische Notation.

Potenzierung als Operator verfugbar. Besser als C!

Operator Beispiel Anmerkung= x = 6 Zuweisung: x: 6+ x = x+2 Addition zweier Werte. x: 8- x = x-3 Subtraktion zweier Werte. x: 5* x = x*2 Multiplikation zweier Werte. x: 10/ x = x/5 Division zweier Werte. x: 2^ x = 4^2 Potenzierung. x: 16\ x = 5\2 Ganzzahlige Division. x: 2mod x = 3 mod 2 Rest aus ganzzahliger Division. x: 1

E. Baeck (Uni-DUE) Folien-Skript (V) 12 / 49

VBA-Grundlagen Operatoren

Vergleichsoperatoren

Nahezu mathematische Notation.

Wichtig fur Verzweigungen und Abfragen.

Zuweisung (=) und Gleichheit (=) sollten nicht verwechselt werden.

Operator Beispiel Anmerkung< x = 2 < 3 kleiner-Operator (x: true)<= x = 2 <= 3 Kleiner-Gleich-Operator (x: true)>= x = 2 >= 3 Großer-Gleich-Operator (x: false)= x = (2 = 3) Gleichheits-Operator (x: false)<> x = (2 <> 3) Ungleichheits-Operator (x: true)

E. Baeck (Uni-DUE) Folien-Skript (V) 13 / 49

VBA-Grundlagen Operatoren

Bool’sche Operatoren

Folgende Operatoren verknupfen bool’sche Ausdrucke.

Operator Beispiel Anmerkungnot x = not(2 < 3) Kleiner-Operator (x: false)and x = (2 < 3)and(4 < 5) UND-Operator (x: true)or x = (2 < 3)or(4 > 5) ODER-Operator (x: true)xor x = (2 < 3)xor(4 < 5) EXL-ODER-Operator (x: false)equ x = (2 > 3)equ(4 > 5) Gleichheitsoperator (x: true)

and true false

true true false

false false false

or true false

true true true

false true false

xor true false

true false true

false true false

E. Baeck (Uni-DUE) Folien-Skript (V) 14 / 49

VBA-Grundlagen Operatoren

Verkettungsoperatoren

Zeichenketten werden mit dem + Operator verkettet.

Unterschiedliche Datentypen werden mit dem & Operator verkettet.

Operator Beispiel Anmerkung+ x = ”Hallo ”+ ”Welt” Text und Text (x: ”Hallo Welt”).& x = ”summe = ”& (1+2) Text und Wert (x: ”summe = 3”).

E. Baeck (Uni-DUE) Folien-Skript (V) 15 / 49

VBA-Grundlagen Funktionen, Unterprogramme

Funktionen

Unterprogramme

E. Baeck (Uni-DUE) Folien-Skript (V) 16 / 49

VBA-Grundlagen Funktionen, Unterprogramme

Funktionen und Unterprogramme

Programm-Code sollte in Unterprogramme strukturiert werden

Maximale Programmlange ca. 30-40 Zeilen

Vermeiden von Spagetti-Code

Unterprogramme und Funktionen sind gekapselte, wieder verwendbareProgrammmodule.

Parameter werden uber die Liste der formalen Parameter vomaufrufenden Programm ubergeben

Funktionen liefern einen Ruckgabewert, der direkt in einem Ausdruckverwendet werden kann.

E. Baeck (Uni-DUE) Folien-Skript (V) 17 / 49

VBA-Grundlagen Funktionen, Unterprogramme

Parameterliste

Formale Parameter sind Parameter in der Funktionsdefinition

Aktuelle Parameter sind Parameter im Funktionsaufruf

Parametersyntax:[<Typ>] <name> [As <Datentyp>]

Typ:

- byRef: Ubergabe der Adresse (Standard), veranderbar- byVal: Ubergabe des Wertes, nicht veranderbar

Datentyp:Integer, Double, String, etc...

Parameterliste:([Parameter1, [Parameter2, [Parameter3, ...]]])

E. Baeck (Uni-DUE) Folien-Skript (V) 18 / 49

VBA-Grundlagen Funktionen, Unterprogramme

Unterprogramm / Subroutine

Syntax:<sub> <Name> ([Parameterliste ])

<Anweisungen>

<end sub>

Aufruf:<call> <Name>

([Parameterliste ])

Sub s u b c a l l e r ( )Dim a As I n t ege rDim b As I n t ege rDim c As I n t ege ra = 1 : b = 2Ca l l addByVal ( a , b , c )a = 1 : b = 2Ca l l addByRef ( a , b , c )

End Sub

Aufruf 1 ByVal: a,b unverandert

Aufruf 2 ByRef: a = 2, b = 4

Sub addByRef (ByRef a As Intege r , ByRef b As Intege r ,ByRef c As I n t ege r )

a = a + 1 : b = b ∗ 2c = a + b

End SubSub addByVal (ByVal a As Intege r , ByVal b As Intege r ,

ByRef c As I n t ege r )a = a + 1 : b = b ∗ 2c = a + b

End SubE. Baeck (Uni-DUE) Folien-Skript (V) 19 / 49

VBA-Grundlagen Funktionen, Unterprogramme

Funktion / Function

Syntax:<function> <Name> ([Parameterliste ] [As <Datentyp>])

<Anweisungen>

<name> = <Ruckgabewert>

<end function>

Aufruf:<Variable> = <Name> ([Parameterliste ])

Sub f u n c t i o n c a l l e r ( )Dim a As Double , b As Double ,

c As Double , f As Double ,x As Double

a = 1 : b = 0 : c = −4f = pa r a b e l ( a , b , c , 2#)

End SubFunct ion pa r a b e l (ByVal a As Double , ByVal b As Double ,

ByVal c As Double , ByVal x As Double )p a r a b e l = a ∗ x ˆ 2 + b ∗ x + c

End Funct ion

E. Baeck (Uni-DUE) Folien-Skript (V) 20 / 49

VBA-Grundlagen Funktionen, Unterprogramme

Rekursive Funktionen

Rekursive Funktionen rufen sich selbst auf

die Rekursion muss ein Ende finden

ohne Rekursionsende ⇒ Stack-Overflow

Fallunterscheidung mit if, else

Fakultat:

n! =

{n · (n − 1)! fur n > 11 fur n < 2

Sub f a k u l t a e t r e k u r s i v ( )Dim f As Longf = f a k u l t a e t (4 )

End SubFunct ion f a k u l t a e t ( n As I n t ege r ) As Long

I f n > 1 Thenf a k u l t a e t = n ∗ f a k u l t a e t ( n − 1)

E l s ef a k u l t a e t = 1

End I fEnd Funct ion

E. Baeck (Uni-DUE) Folien-Skript (V) 21 / 49

VBA-Grundlagen Schleifen

Schleifen

E. Baeck (Uni-DUE) Folien-Skript (V) 22 / 49

VBA-Grundlagen Schleifen

Die FOR-Schleife

Indizierte Wiederholungen werde mit for eingeleitet

und mit next abgeschlossen.

Durchlaufe werden uber eine Index-Variable gesteuert.

Festlegung der Indexvariablen durch Startwert, Endwert undoptionaler Schrittweite (std.: 1)

Anweisung in for - next - Klammer werden ausgefuhrt.

Syntax:<for> <var> = <start> <to> <stop> [<step> <Schritt>]

[Anweisungen]

<next>

Beispiel:Summe aller geraden Zahlen in[4, . . . , 16], Ergebnis ⇒ s.

s = 0f o r i =4 to 16 s tep 2

s = s + inext

E. Baeck (Uni-DUE) Folien-Skript (V) 23 / 49

VBA-Grundlagen Schleifen

Die DO-Schleife, vor -Variante

Implizite Wiederholungen werde mit do eingeleitet

und mit loop abgeschlossen.

Abbruch-Bedingung wird vor Durchlauf gepruft.

while Bedingung = until not Bedingung

Syntax:<do> [<while> Bedingung | <until> Bedingung]

<Anweisungen>

<loop>

Beispiel:Summe aller geraden Zahlen in[4, . . . , 16], Ergebnis ⇒ s.

s = 0 : i = 4do wh i l e i <= 16

s = s + iDebug . Pr i n t ( ” i= ” & i &

” s= ” & s )i = i +2

l oop

E. Baeck (Uni-DUE) Folien-Skript (V) 24 / 49

VBA-Grundlagen Schleifen

Die DO-Schleife, nach-Variante

Implizite Wiederholungen werde mit do eingeleitet

und mit loop abgeschlossen.

Abbruch-Bedingung wird nach Durchlauf gepruft.

while Bedingung = until not Bedingung

Mindestens ein Durchlauf

Syntax:<do>

<Anweisungen>

<loop [<while> Bedingung | <until> Bedingung]>

Beispiel:Summe aller geraden Zahlen in[4, . . . , 16], Ergebnis ⇒ s.

s = 0 : i = 4do

s = s + iDebug . Pr i n t ( ” i= ” & i &

” s= ” & s )i = i +2

l oop wh i l e i <= 16

E. Baeck (Uni-DUE) Folien-Skript (V) 25 / 49

VBA-Grundlagen Schleifen

Beispiel: Geometrische Reihe

sn = a0 ·n∑

i=0

qk =a0

(1− qn+1

)1− q

Implementierung mit for Schleife.

Ausgabe im i-ten Schritts aktuelle Summe und Ergebnis.

Sub g e ome t r i s c h e r e i h e ( )a = 5#: q = 3#: s = 0 : n = 3sn = a ∗ (1 − q ˆ ( n + 1) ) / (1 − q )For i = 0 To n

s = s + a ∗ q ˆ iDebug . Pr i n t ( ” i= ” & i &

” s= ” & s &” sn = ” & sn )

NextEnd Sub

>> Ausgabei= 0 s= 5 sn = 200i= 1 s= 20 sn = 200i= 2 s= 65 sn = 200i= 3 s= 200 sn = 200

E. Baeck (Uni-DUE) Folien-Skript (V) 26 / 49

VBA-Grundlagen Abfrage und Abbruch

Die Abfrage mit if

Einfache Variante erlaubt nur eine optionale Anweisung

Allgemeine Variante erlaubt einen optionalen Anweisungsblock

Syntax: einfache Variante<if> <Bedingung> then <Anweisung>

Syntax: allgemeine Variante<if> <Bedingung> then

[Anweisungen]

<endif>

if einfach:

s = 0i f s = 0 then s = 1

if allgemein:

s = 0 : t = 1I f s = 0 Then

s = 1t = 2

End I f

E. Baeck (Uni-DUE) Folien-Skript (V) 27 / 49

VBA-Grundlagen Abfrage und Abbruch

exit for und exit do

Abbruch einer for Schleife erfolgt mit exit for

Abbruch einer do Schleife erfolgt mit exit do

Es gibt keine Anweisung um einen Durchlauf abzubrechen!

wir mussen uns leider mit goto behelfen

goto erwartet eine Sprungmarke (Name)

Sprungmarke wird mit : abgeschlossen

Abbruch einer for Schleife:

Sub e x i t f o r ( )For i = 1 To 10

I f i > 5 Then Ex i t ForDebug . Pr i n t ( ” i = ” & i )Next

End Sub

Abbruch eines Durchlaufs mit goto:

Sub c o n t i n u e f o r ( )For i = 1 To 10

I f i = 5 Then GoTo nex tCyc l eDebug . Pr i n t ( ” i = ” & i )

n e x tCyc l e :Next

End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 28 / 49

VBA-Grundlagen Verzweigungen

Verzweigungen

E. Baeck (Uni-DUE) Folien-Skript (V) 29 / 49

VBA-Grundlagen Verzweigungen

Die if -elseif -else Verzweigung

Fallunterscheidung mit if, elseif und else

alle elseif - Zweige sind optional

der else - Zweig ist optional

Bedingung ⇒ bool’scher Ausdruck

Syntax:<if> <Bedingung 1> then

<Anweisungen 1>

<elseif> <Bedingung 2> <then>

<Anweisungen 2>

<elseif> <Bedingung 3> <then>

<Anweisungen 3>

<else> <Bedingung n> <then>

<Anweisungen n>

<endif>

Beispiel:

Sub i f v e r zw e i g u n g ( )i = 7I f i = 1 Then

Debug . Pr i n t ( ” i = 1” )E l s e I f i = 2 Then

Debug . Pr i n t ( ” i = 2” )E l s e I f i = 5 Then

Debug . Pr i n t ( ” i = 5” )E l s e I f i = 20 Then

Debug . Pr i n t ( ” i = 20” )E l s e

Debug . Pr i n t (” i weder 1 ,2 ,5 ,20 ” )

End I fEnd Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 30 / 49

VBA-Grundlagen Verzweigungen

Die select-case-else Verzweigung

Fallunterscheidung select, case und else

alle case - Zweige ab 2 optional

der else - Zweig ist optional

Syntax:<select case> <Variable>

<case <Wert 1>[,<Wert 1.1>]:

<Anweisungen 1>

<case <Wert 2>:

<Anweisungen 2>

<case <Wert 3>:

<Anweisungen 3>

<case else :

<Anweisungen n>

<end select>

Beispiel:

Sub s e l e c t v e r zw e i g u n g ( )i = 2Se l e c t Case i

Case 1 , 9 :Debug . Pr i n t (

” i = 1 oder 9” )Case 2 :Debug . Pr i n t ( ” i = 2” )Case 3 :Debug . Pr i n t ( ” i = 5” )Case 20 :Debug . Pr i n t ( ” i = 20” )Case E l s eDebug . Pr i n t (

” i weder 1 ,2 ,5 ,20 ” )End Se l e c t

End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 31 / 49

VBA-Grundlagen Felder

Felder / Arrays

E. Baeck (Uni-DUE) Folien-Skript (V) 32 / 49

VBA-Grundlagen Felder

Indizierte Variablen, Felder

Felder sind Implementierungen von Vektoren oder Matrizen

Felder haben i.A. mehrere Indizes, ai ,j

Der statische Indexbereich wird bei der Deklaration vorgegeben

Der Indexbereich hat einen unteren und einen oberen Grenzwert

Syntax:<dim> <var> (<von> To <bis> [, Index 2]) As <Typ>

Beispiel:

Deklaration 3x2

Initialisierung

Indexbereich 1: 1-3

Indexbereich 2: 1-2

Sub f e l d e r 1 ( )Dim x (1 To 3 , 1 To 2) As DoubleFor i = 1 To 3

For j = 1 To 2x ( i , j ) = i + j

NextNext

End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 33 / 49

VBA-Grundlagen Felder

Umsetzung einer mathematischen Notation in Schleifen

Eine einfache Summe

10∑i=1

i

s = 0

for i=1 to 10

s = s + i

next

Lange eines transformierten Vektors

l = ‖A · v‖

=

n∑i=1

n∑j=1

(ai ,j · vj)

212

l = 0

for i=1 to n

s = 0

for j=1 to n

s = s + a(i,j)*v(j)

next

l = l +s*s

next

l = sqr(l)

E. Baeck (Uni-DUE) Folien-Skript (V) 34 / 49

VBA-Grundlagen Felder

Warum dynamische Speicherverwaltung

Benutzerabhangige Probleme erwarten oft variable Dimensionen

Das Beispiel des Tragwerks hat 5 Verschiebungen und 4 Verdrehungen

Die Dimension der statischen Analyse ist demnach 9K · x = fmit Steifigkeit K , Verformung x und Last f

500 500

200

200

z

x

5 kN

3 kN

12

3

4

1

2

3

E. Baeck (Uni-DUE) Folien-Skript (V) 35 / 49

VBA-Grundlagen Felder

Dynamische Felder, Allokation

Statische Felder sind nicht an die Problemdimension anzupassen

Dynamische Felder werden in zwei Schritten erzeugt

- Variablendeklaration ohne Indexbereich- Dimensionierung zur Laufzeit mit ReDim

Statische und dynamische Felder haben gleiches Zugriffsverhalten.

Dynamische Felder konnen zur Laufzeit neu dimensioniert werden.

Sub d y n f e l d e r ( )Dim v ek t o r 1 (1 To 2) As Double ’ s t a t i s c h e A l l o k a t i o nDim v ek t o r 2 ( ) As Double ’ dynamisch A l l o k a t i o nReDim v ek t o r 2 (1 To 2) ’ ok !ReDim v ek t o r 1 (1 To 3) ’ F e h l e r ! ReDim NUR dynamisch !ReDim v ek t o r 2 (1 To 3) ’ ok !

End Sub

E. Baeck (Uni-DUE) Folien-Skript (V) 36 / 49

VBA-Grundlagen Felder

Schleife uber iterierbare Container

Felder konnen uber ihren Index iteriert werden (for)

Implizite Iteration mit for-each.

Syntax:<for each> <var1> In <var2>

[Anweisungen]

<next>

var2 ist Container, var1 ein Objekt des Containers.

Dim a (1 To 3) As I n t ege ra (1 ) = 11 : a (2 ) = 12 : a (3 ) = 13For Each i In a

Debug . Pr i n t ”a = ” & iNext

Ein Feld wird deklariert,

initialisiert

und mit for-each ausgegeben.

E. Baeck (Uni-DUE) Folien-Skript (V) 37 / 49

VBA-Grundlagen Strukturen

Strukturen / Types

E. Baeck (Uni-DUE) Folien-Skript (V) 38 / 49

VBA-Grundlagen Strukturen

Strukturen

nach den Datentypen ein weiterer Schritt in die reale Welt

es werden beliebige Datentypen (auch Strukturen) zusammengefasst

muss vor allen Funktionen, Unterprogrammen deklariert werden!

Syntax:<Type> <Name>

<Name 1> As <Datentyp 1>

[<Name 2> As <Datentyp 2>]

...

<end Type>

E. Baeck (Uni-DUE) Folien-Skript (V) 39 / 49

VBA-Grundlagen Strukturen

Beispiel: Linie mit 2 Punkten

Punkt:3d Koordinaten (Feld)

Linie:2 Punkte (Feld)

Jeweils:RGB-Farbe und Kommentar

Type Punktx (1 To 3) As Double ’ Koord ina tenf As Long ’ Farbec As S t r i n g ’ Kommentar

End TypeType L i n i e

p (1 To 2) As Punkt ’ 2 Punktef As Long ’ Farbec As S t r i n g ’ Kommentar

End Type

Sub t y p e t e s t ( )Dim l i n As L i n i el i n . p ( 1 ) . x (1 ) = 0#: l i n . p ( 2 ) . x (1 ) = 1#l i n . p ( 1 ) . x (2 ) = 0#: l i n . p ( 2 ) . x (2 ) = 1#l i n . p ( 1 ) . x (3 ) = 0#: l i n . p ( 2 ) . x (3 ) = 0 .5l i n . p ( 1 ) . c = ” Sta r t punk t ”l i n . p ( 2 ) . c = ”Endpunkt”l i n . c = ”Meine L i n i e ”l i n . p ( 1 ) . f = &HFF0000 ’ r o t e r Punktl i n . p ( 2 ) . f = &HFF00& ’ g r u n e r Punktl i n . f = &HFF& ’ b l aue L i n i e

End Sub

RGB-Farben: 1 Byte/Farbe⇒ Bereich: [0 · · · 255]rot: &HFF0000&grun: &H00FF00&blau: &H0000FF&

E. Baeck (Uni-DUE) Folien-Skript (V) 40 / 49

VBA-Grundlagen Strukturen

Entity-Relationship-Modell

Das ER-Modell ist De-facto-Standard der Datenmodellierung.

Das ER-Modell wurde 1976 von Peter Chen vorgestellt.

Es besteht aus Entities (Objekten der Realitat),

Relationships (Beziehungen),

Attributes (Eigenschaften) und

Kardinalitaten (Objektanzahl in einer Liste)

Fehlt eine Beziehung, so wird dies als enthalt betrachtet.

Attribut 1

Attribut 2

Attribut 3

Entity 1 Entity 2 Attribut 2

Attribut 1

Attribut 3

Relations-hip

1 *

E. Baeck (Uni-DUE) Folien-Skript (V) 41 / 49

VBA-Grundlagen Strukturen

Stabwerk und dessen Objekte

Objekte:

Stabwerk ⇒ 3 Stabe, 4 Knoten und 2 Lasten

Knoten ⇒ Koordinaten, Auflagerbeschreibung

Stab ⇒ Knotenzuweisung, Flache, E-Modul, Tragheitsmoment

Last ⇒ Lastwert, Richtung, Position

U100: A = 13, 5cm2, I = 206cm4, Stahl S235: E = 210000N/mm2

500 500

200

200

z

x

5 kN

3 kN

12

3

4

1

2

3

E. Baeck (Uni-DUE) Folien-Skript (V) 42 / 49

VBA-Grundlagen Strukturen

ER-Diagramm des Stabwerks

Komposition ist Beziehung 1 ⇒ n...

1 Stabwerk enhalt 3 Stabe (Komposition ⇒ Feld)

1 Stabwerk enhalt 4 Knoten (Komposition ⇒ Feld)

1 Stabwerk enhalt 2 Lasten (Komposition ⇒ Feld)

StabwerkStab3 1

Knoten

1

4

Last

1

2

Lager

1

1

Type Stabwerks (1 To 3) as Stabk (1 To 4) As Knotenl (1 To 2) As Las t

End Type

E. Baeck (Uni-DUE) Folien-Skript (V) 43 / 49

VBA-Grundlagen Strukturen

Objektanalyse des Stabes

Die Nummer des Stabes ne ist sein Feldindex.

Der Stab hat die Nummern der anschließenden Knoten nk (Feld!).

Das Material des Stabes wird beschrieben durch den E-Modul dE .

Die Stabquerschnitte werden in 2d beschrieben durch die Flache dAund durch das Flachentragheitsmoment dI .

Vorsicht:double fur dimensionierte Großen,integer fur abzahlbare Großen.

Stabnk(1 : 2)

dE

dA

dI

Type Stabnk (1 To 2 ) As I n t ege rdE As DoubledA As Doubled I As Double

End Type

E. Baeck (Uni-DUE) Folien-Skript (V) 44 / 49

VBA-Grundlagen Strukturen

Objektanalyse des Knotens

Die Nummer des Knotens nk ist sein Feldindex.

Der Knoten hat Koordinaten x (Feld!).

Ein Knoten enthalt ein Lagerobjekt l .⇒ Kardinalitaten jeweils 1.

Knoten x(1 : 2)

l

1

1

Type Knotennk As I n t ege rx (1 To 2) As Doublel As Lager

End Type

E. Baeck (Uni-DUE) Folien-Skript (V) 45 / 49

VBA-Grundlagen Strukturen

Objektanalyse des Lagers

Kennwerte des Lagers: 0=verschieblich, 1=fest.

Lager Verschiebung in x, tx .

Lager Verschiebung in z, tz .

Lager Verdrehung um y, ry .

Lagertx tz

ry

Type Lagertx as I n t ege rt z as I n t ege rr y as I n t ege r

End Type

E. Baeck (Uni-DUE) Folien-Skript (V) 46 / 49

VBA-Grundlagen Strukturen

Objektanalyse der Last

Die Last wird aufgebracht auf Stab ne.

Die Last hat einen Wert w .

Die Last hat eine Richtung, Winkel p gegen positive x-Achse.

Lastposition auf Element. s ∈ [0. · · · 1.].

Lastne w

p s

Type Las tne as i n t e g e r ’ Elementnummerw as double ’ Wertp as double ’ Winkels as double ’ Koo rd ina te

End Type

E. Baeck (Uni-DUE) Folien-Skript (V) 47 / 49

VBA-Grundlagen Strukturen

Gesamtdiagramm der Struktur Stabwerk

StabwerkStab3 1

Knoten1 4

Last

1

2Lager

1

1

nk(1 : 2)

dE

dA dI x(1 : 2)

tztx ry

ne

w p

s

E. Baeck (Uni-DUE) Folien-Skript (V) 48 / 49

VBA-Grundlagen Strukturen

Implementierung einer Stabwerk-Struktur

Bei der Implementierung wird die Null-Initialisierung berucksichtigt.Eigenschaften werden durch Kopieren der Stabe zugewiesen.Lineare Stab-Struktur erlaubt die Verwendung einer For-Schleife.

dim s as s tabwerk’ Koord ina tens . k ( 2 ) . x (1 ) = 500 .s . k ( 3 ) . x (1 ) = 500 .s . k ( 3 ) . x (2 ) = −200.s . k ( 4 ) . x (1 ) = 1000 .s . k ( 4 ) . x (2 ) = −200.’ Lagers . k ( 2 ) . l . t x = 1s . k ( 2 ) . l . t y = 1s . k ( 4 ) . l . t x = 1’ E i g e n s c h a f t e ns . s ( 1 ) . dE = 210000s . s ( 1 ) . dA = 13 .5s . s ( 1 ) . d I = 206s . s (2 ) = s . s (1 )s . s (3 ) = s . s (1 )

’ Verb indungenf o r i =1 to 3

s . s ( i ) . nk (1 ) = is . s ( i ) . nk (2 ) = i +1

next’ La s tens . l ( 1 ) . ne = 1 : s . l ( 1 ) .w = 5s . l ( 1 ) . p = 90 : s . l ( 1 ) . s = 200/500s . l ( 2 ) . ne = 2 : s . l ( 2 ) .w = 3s . l ( 2 ) . p = 0 : s . l ( 2 ) . s = 1

500 500

200

200z

x

5 kN

3 kN

12

34

1

23

E. Baeck (Uni-DUE) Folien-Skript (V) 49 / 49