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