Naam Bedrijf Opleiding Begeleider Datum
: René Bogers : Projekt Techniek adviseurs voor installatietechniek : ACE system manager : ir. R. Boeklagen (TEC Nijmegen) : 28-04-2001
Voorwoord
Sinds een driekwart jaar ongeveer, hebben we bij ons op het werk een applicatie voor AutoCAD van Nordined aangeschaft. Dit omdat dit een eis was van een bepaalde opdrachtgever. Ik heb hier nu enige tijd mee gewerkt, en ben hier niet helemaal tevreden over. Mijn doel is om zelf een werktuigkundige applicatie te ontwikkelen, omdat er nog niet zo veel verschillende programma’s hiervoor zijn. De meest bekende en compleetste applicaties die er nu zijn, zijn: Nordined en StabiCAD. StabiCAD heb ik nog nooit mee gewerkt, maar ik denk dat het zeker mogelijk moet zijn, om een betere applicatie te maken, dan de applicatie van Nordined. Een bijkomend voordeel, is dat ik in de installatietechniek werk, en dus precies kan zien wat er nodig is.
2
Inhoudsopgave
Inhoudsopgave
blz.
3
Inleiding
4
1
Het HOE, WAT en WAAROM 1.1 Indeling 1.2 B e s c h r ij v i n g 1.3 Organisatie 1.4 Aanleiding 1.5 Probleemstelling
5 5 5 5 6 6
2
De Huidige Situatie 2.1 W e r k w ij z e 2.2 Problemen 2.3 Gevolg
7 7 7 7
3
Het Programma 3.1 Indeling 3.2 M o g e l ij k h e d e n 3.2.1 Dialoogbox of commandoregel 3.2.2 Excel of Acces 3.2.3 Blocks of W–Blocks gebruiken 3.2.3 Help file of Messageboxen gebruiken 3.3 Tegengekomen Problemen
8 8 8 8 8 9 9 9
4
De Nieuwe Situatie 4.1 W e r k w ij z e 4.2 Problemen 4.3 Gevolg
10 10 10 10
5
Het Stroomschema
11
Bijlagen
12-14
Voorbeeldcode
15-16
3
Inleiding
Ik werk als tekenaar/technicus bij “Projekt Techniek adviseurs voor installatietechniek” te Utrecht, en wij zijn sinds kort overgenomen door “Herman de Groot adviseurs voor de installatietechniek” uit Leusden. Ik ben veel bezig met het tekenen van werktuigkundige installaties in plattegrond tekeningen, die wij van: architecten, projectontwikkelaars of opdrachtgevers, krijgen aangeleverd. Als de installatie op tekening is gezet, moet er een raming/begroting worden gemaakt, ter controle van de prijzen die de desbetreffend installateurs opgeven, van wat het zal gaan kosten, om deze installatie in de praktijk te brengen. D.m.v. het gemaakte programma is het mogelijk om snel luchtkanalen te tekenen, en met één druk op de knop een begroting te genereren. Het programma heeft slechts betrekking op alleen de rechte kanalen, en nog niet de: bochten, T-stukken, broekstukken, verlopen, enz… Dit omdat het anders een veel te grote opdracht zou worden.
4
1. Het HOE/WAT en WAAROM
1.1
Indeling: In dit deel (hoofdstuk 1) leg ik uit wat de bedoeling is van de gemaakte opdracht, en waarom ik voor deze opdracht heb gekozen, tevens vertel ik iets over het bedrijf waar ik nu werk. In hoofdstuk 2, leg ik uit hoe de huidige situatie is en wat de gevolgen daar van zijn. In hoofdstuk 3, staat vermeld, hoe het programma is opgebouwd, en waarom welke keuzes zijn gemaakt. In hoofdstuk 4, wordt de nieuwe situatie uitgelegd. In hoofdstuk 5,
1.2
B e s c h r ij v i n g : Ik ben eerst nagegaan hoe ik het programma het beste op kon bouwen, of ik bijvoorbeeld het beste met dialoogboxen kan werken, of dat het beter is om via de commandoregel te werken, dit wordt in hoofdstuk 3 verder uitgewerkt.
1.3
Organisatie: Ik werk nu bij “Projekt Techniek adviseurs voor installatietechniek”, dit wordt eind dit jaar “Herman de Groot – Projekt Techniek adviseurs voor de installateitechniek”, i.v.m. de overname, van “Projekt Techniek” door “Herman de Groot”. -Wij (Projekt Techniek) zijn een gerenommeerd adviesbureau, bestaande uit 12 man personeel. Te weten: 1 secretaresse, 2 tekenaars, 2 tekenaar/technicussen, 2 technicussen, 4 adviseurs en 1 directeur/adviseur. Grote opdrachtgevers van ons zijn o.a.: ING (Banken), Maarsen Bouw (Utiliteit), Achmea (Utiliteit), Koppert & Koenis (Zwembaden). -Herman de Groot is tevens ook een gerenommeerd adviesbureau, met 13 man personeel. Opdrachtgevers van dit adviesbureau zijn o.a.: Rijks Gebouwen Dienst (Douane kantoren), SNS Reaal, gemeentes (Gemeentehuizen), Politie (Politiebureaus) brandweer (Brandweerkazernes) en ziekenhuizen en laboratoria.
5
1.4
Aanleiding: De aanleiding dat ik voor deze opdracht heb gekozen is, omdat ik zelf veel met tekenen bezig ben, en een manier wilde ontwikkelen die veel sneller is dan hoe wij het nu doen. In de tijd dat ik met deze opdracht bezig was, hebben wij op het werk Nordined gekregen, maar dit weerhoudt mij er niet van om een zo goed en compleet mogelijke applicatie te ontwikkelen voor de werktuigkundige installaties. Mijn doel is als ik klaar ben met deze opleiding, verder te gaan met mijn programma en, zo hoop, ik de ‘perfecte’applicatie voor AutoCAD voor de werktuigkundige installaties te ontwikkelen. Als alles volgens plan verloopt, en ik in de toekomst misschien mijn eigen bedrijfje heb opgericht, wil ik tevens een applicatie voor de elektrotechniek ontwikkelen (maar wel met behulp van mensen die verstand hebben van de elektrotechniek, en ook met VBA om kunnen gaan).
1.5
Probleemstelling: Het nut van applicaties, is het efficiënt omspringen met de tijd, want tijd is immers geld, en het risico op fouten verkleinen. Hoe meer er wordt geautomatiseerd, hoe minder kans er is op fouten, want computers maken immers geen fouten, dus is het noodzakelijk dat het programma foutloos is geschreven. Het probleem is dus, dat er veel tijd verloren gaat met tekenen, en vooral met het opzetten van een begroting. Het doel was dus, een programma ontwikkelen wat hier een einde aan maakt. En ik denk dat ik hier voor een groot deel al in geslaagd ben. Natuurlijk nog niet helemaal, want dit programma voor de rechte luchtkanalen is nog maar ‘het topje van de ijsberg’.
6
2. De Huidige Situatie
2.1
W e r k w ij z e : Tegenwoordig (ik spreek even, nog van voor wij Nordined hadden aangeschaft) wordt er een schetsontwerp met pen of potlood op papier gemaakt, en deze wordt daarna in AutoCAD gezet. Elk lijntje van elk luchtkanaal wordt afzonderlijk getekend. Als alles op papier staat en er een begroting moet worden gemaakt, dan worden de tekeningen geplot, en moet alles van de tekening af worden geteld en opgemeten. Als alles is geteld, dan worden de getallen met de hand in Excel ingevoerd, om zo een begroting te maken.
2.2
Problemen: Het grote probleem met de huidige situatie, is dat de kans op fouten enorm is, omdat er met tellen en meten vanaf de tekening heel makkelijk een fout kan worden gemaakt. Het is heel makkelijk om iets vergeten mee te nemen, of iets kan heel makkelijk verkeerd worden opgemeten of verkeer worden opgeteld. Als de gegevens in Excel worden ingevoerd, is het ook heel goed mogelijk dat daar fouten bij worden gemaakt, want een verkeerd getalletje is zo ingevuld. En als er iets verkeer wordt ingevuld, heb je fouten. Dit kunnen kleine niets doende foutjes wezen, maar het kan ook goed mogelijk zijn dat dit een joekel van een fout teweeg brengt.
2.2
Gevolg: Het gevolg hierop is dat de prijs die uit de begroting komt rollen veel te hoog of te laag ligt. Als dit het geval is, dan heb je geen goed uitgangspunt om de prijzen van de meedingende installateurs te vergelijken, om zo te zien of deze niet veel te hoog ligt. En daarvoor worden wij immers door een opdrachtgever ingehuurd, om verschillend installateurs zichzelf op een project te laten inschrijven, en zodoende degene met de goedkoopste of kwalitatief beste aanbieding het te laten maken, maar dan moet je eigen begroting wel kloppen, om een goede controle uit te kunnen voeren.
7
3. Het Programma
3.1
Indeling: Het programma is in drie essentiële delen opgebouwd, te weten: - RB_Algemeen: Deze bestaat uit routines, die veel gebruikt worden, dus ook voor andere programma’s. - RB_W57_Kanalenmenu:
Deze bestaat uit alle routines die nodig zijn om snel en eenvoudig luchtkanalen te tekenen, en deze achteraf te wijzigen, als dat nodig zou zijn.
- RB_W57_Tellen
Deze bestaat uit alle routines die nodig zijn om de reeds getekende luchtkanalen op te tellen en deze in een dialoogbox weer te geven. Daarna kunnen deze bij soort worden opgeteld, en geëxporteerd worden naar Excel, om snel en eenvoudig een begroting tot stand te brengen.
3.2
M o g e l ij k h e d e n : Ik had voor verschillende onderwerpen in mijn programma verschillende mogelijkheden, om tot een oplossing te komen. Hieronder zal ik van de mogelijke keuzes de gemaakte keuze uileggen:
3.2.1
Dialoogbox of commandoregel: Ik heb voor de dialoogboxen gekozen, dit omdat dit veel professioneler staat, en tevens kunnen in de comboboxen de standaardmaten worden weergegeven, wat ook wel op de commandoregel is weer te geven, maar een stuk onduidelijker is, omdat er een heleboel standaardmaten zijn.
3.2.2
Excel of Access: Voor het exporteren, had ik de keuze uit Excel en Acces, ik heb voor Excel gekozen, omdat wij bij ons op het werk met Excel de begrotingen maken, en Excel zit in de standaard Office pakket, en Acces niet. Maar halverwege het maken van mijn programma, kwam ik erachter dat Acces wel veel voordelen heeft, voor bijvoorbeeld het opslaan van gegevens, die later weer gebruikt moeten worden voor bijvoorbeeld het generen van de begroting. Ik wil dus als ik met deze opleiding klaar ben, mijn programma aanpassen, en tussen de export van AutoCAD naar Excel, nog een koppeling maken, van AutoCAD naar Acces, en daarna van Acces naar Excel. Dit wil ik doen omdat, het dan mogelijk is de gegevens van een tekening van bijvoorbeeld de 1e verdieping te exporteren, en daarna de gegevens van de 2e verdieping, naar datzelfde bestand te exporteren, zodat ik een begroting kan genereren, met daarin alle verdiepingen verwerkt, dit is nu nog niet mogelijk.
8
Ik heb dit nog niet veranderd, omdat dit nog veel te veel werk was, om mijn opdracht af te krijgen.
3.2.3
Blocks of W–Blocks gebruiken: Voor het tekenen had ik de mogelijkheid, om voor elk kanaal apart een Block te maken, of gebruik te maken van W-block’s. Ik heb gekozen voor W-block’s, dit omdat er dan maar steeds één block gebruikt wordt, en dit scheelt weer een boel geheugen.
3.2.4
Help file of Messageboxen gebruiken: Ik had de mogelijkheid om te kiezen tussen het gebruik van een Messagebox, als hulp, of het gebruik van een Help File (d.m.v. HTML Help Workshop). Ik heb gekozen voor een Messagebox, dit omdat er niet zo heel veel hulp nodig is bij dit programma, en ik anders nog moest uitpluizen hoe HTML Help Workshop precies werkt, terwijl ik al werk genoeg had aan het programma. Als ik mijn applicatie ga uitbreiden, zal ik uiteraard wel gebruik gaan maken van dit programma, omdat het wel heel professioneel staat.
3.3
Tegengekomen Problemen: Ik ben met het schrijven van het programma wel tegen het volgende probleem aangelopen: Als Excel wordt aangeroepen vanuit AutoCAD, en daarna weer afgesloten dient te worden, dan is dit niet helemaal mogelijk. Excel blijft namelijk in het taakoverzicht staan, wat dus betekend dat Excel nog steeds actief is. Pas als AutoCAD wordt afgesloten, dan verdwijnt Excel ook uit het taakoverzicht. Ik heb dit probleem op internet voorgelegd, en ook aan een vriend van mij. Deze jongen is veel bezig met VBA in Office, en had hetzelfde probleem, maar dan met Word en Excel. Ik heb van niemand vernomen, dat ik iets fout doe, maar het schijnt dat het gewoon niet mogelijk is om Excel in dit geval helemaal te sluiten. De desbetreffende DLL blijft in de lucht, wat zorgt voor dit probleem.
9
4. De Nieuwe Situatie
4.1
De werkwijze: Er wordt nog steeds een schetsontwerp op papier gemaakt, en als deze klaar is wordt deze in AutoCAD verwerkt. Met de nieuwe applicatie is dit een fluitje van een cent, want de betreffend dialoogbox wordt geactiveerd (zie Bijlagen figuur: 1), dan wordt er voor ‘rechte kanalen’gekozen. In de verschenen dialoogbox (zie Bijlagen figuur: 2) dienen de benodigde gegevens te worden ingevoerd. Daarna als er op ‘Ok’is gedrukt, wordt het beginpunt met de muis aangegeven, en dan wordt de lengte en de hoek aangegeven. Als er kanalen gewijzigd moeten worden, is dat eveneens heel simpel. Alse er bijvoorbeeld een kanaal is getekend met een diameter van 125, en het moet een diameter wezen van 160, dan kan het betreffende programmaatje worden gestart, en het desbetreffende kanaal worden aangewezen. Er verschijn dan een dialoogbox (zie Bijlagen figuur: 3), met de gegevens over het kanaal, en hierin kan dan heel simpel de nieuwe diameter worden aangegeven. Heeft het programma al de benodigde gegevens, dan kan het betreffende stuk luchtkanaal snel worden gegenereerd. Als alle luchtkanalen die voor het ontwerp nodig zijn, met de applicatie in de tekening zijn gezet, dan kan met één druk op de knop, alles worden geteld en worden weergegeven in een dialoogbox (zie Bijlagen figuur: 4) en daarna overgebracht worden naar Excel, waar de begroting wordt gegenereerd (zie Bijlagen figuur: 5).
4.2
De problemen: De problemen die we in het hoofdstuk hiervoor zijn tegengekomen, zijn zo goed als verdwenen, want als alles goed is getekend, dan kan er geen fout meer gemaakt zijn, die ervoor zorgt dat de begroting niet klopt. Het is natuurlijk nog wel mogelijk, dat er met tekenen iets is vergeten om op tekening te zetten, wat dan dus ook niet in de begroting wordt meegenomen, maar dat probleem blijf je natuurlijk altijd houden.
4.3
Het gevolg: Het gevolg is nu, dat er een begroting tot stand is gekomen, die tamelijk prijszeker is, tenzij er iets is vergeten op tekening te zetten. En nu is het dus ook mogelijk, om met zeer grote zekerheid te zeggen, of een bepaalde prijs van een desbetreffende installateur, redelijk in de goede richting zit.
10
5. Het Stroomschema
11
Bijlagen
Figuur 1:
De dialoogbox ‘Kanalen Menu’:
Figuur 2:
De dialoogbox ‘Rechte Kanalen’:
12
Bijlagen
Figuur 3:
De dialoogbox ‘Aanpassen Rechtkanaal’:
Figuur 4:
De dialoogbox ‘Tellen’
13
Bijlagen
Figuur 5:
Interface van de begroting in Excel.
14
Voorbeeldcode
Hieronder staat de code voor het aanpassen van de luchtkanalen weergegeven: ' Variabelen declareren '************************************************************************************** '************************************************************************************** Dim KU3 As UserForm_Kanrecht_Aanpassen Dim TU As AcadUtility Dim AT As RB_W57_Algemeen.ThisDrawing Private Sub ComboBox_Afmeting1_Change() Set KU3 = RB_W57_Kanalenmenu.UserForm_Kanrecht_Aanpassen 'Als "anders", dan TextBox activeren '************************************************************************************** '************************************************************************************** If KU3.ComboBox_Afmeting1.value = "anders" Then KU3.TextBox_Afmeting1.Enabled = True KU3.TextBox_Afmeting1.BackColor = &H80000005 'Als "anders" niet, dan TextBox deactiveren '************************************************************************************** '************************************************************************************** Else KU3.TextBox_Afmeting1.Enabled = False KU3.TextBox_Afmeting1.BackColor = &H8000000F KU3.TextBox_Afmeting1.value = Null End If End Sub Private Sub ComboBox_Afmeting2_Change() Set KU3 = RB_W57_Kanalenmenu.UserForm_Kanrecht_Aanpassen 'Als "anders", dan TextBox activeren '************************************************************************************** '************************************************************************************** If KU3.ComboBox_Afmeting2.value = "anders" Then KU3.TextBox_Afmeting2.Enabled = True KU3.TextBox_Afmeting2.BackColor = &H80000005 'Als "anders" niet, dan TextBox deactiveren '************************************************************************************** '************************************************************************************** Else KU3.TextBox_Afmeting2.Enabled = False KU3.TextBox_Afmeting2.BackColor = &H8000000F KU3.TextBox_Afmeting2.value = Null End If End Sub Private Sub CommandButton_Cancel_Click() On Error Resume Next RB_W57_Algemeen.Module_Excel.Excel_Afsluiten Unload Me End Sub Private Sub CommandButton_Ok_Click() Set KU3 = RB_W57_Kanalenmenu.UserForm_Kanrecht_Aanpassen Set TU = ThisDrawing.Utility Set AT = RB_W57_Algemeen.ThisDrawing ' Kijken of al het nodige is ingevuld '************************************************************************************** '************************************************************************************** If (Button_Rond.value = True And _ (_ (Not KU3.ComboBox_Afmeting1.value = "Diameter" And Not KU3.ComboBox_Afmeting1.value = "anders") _ Or (KU3.ComboBox_Afmeting1.value = "anders" And IsNumeric(KU3.TextBox_Afmeting1.value)) _ )_ )_ Or (Button_Vierkant.value = True And _ (_
15
(Not KU3.ComboBox_Afmeting1.value = "Breedte" And Not KU3.ComboBox_Afmeting1.value = "anders") _ Or (KU3.ComboBox_Afmeting1.value = "anders" And IsNumeric(KU3.TextBox_Afmeting1.value))) _ And _ (_ (Not KU3.ComboBox_Afmeting2.value = "Hoogte" And Not KU3.ComboBox_Afmeting2.value = "anders") _ Or (KU3.ComboBox_Afmeting2.value = "anders" And IsNumeric(KU3.TextBox_Afmeting2.value)))) Then
'Zo JA, dan... '************************************************************************************** '************************************************************************************** KU3.Hide Dim BlokInfo2 As AcadBlockReference Set BlokInfo2 = RB_W57_Kanalenmenu.Blok If KU3.ComboBox_Afmeting1.value = "anders" Then BlokInfo2.YScaleFactor = KU3.TextBox_Afmeting1.value Else BlokInfo2.YScaleFactor = KU3.ComboBox_Afmeting1.value End If If KU3.Button_Vierkant.value = True Then If KU3.ComboBox_Afmeting2.value = "anders" Then BlokInfo2.ZScaleFactor = KU3.TextBox_Afmeting2.value Else BlokInfo2.ZScaleFactor = KU3.ComboBox_Afmeting2.value End If End If 'Zo NEE, dan... '************************************************************************************** '************************************************************************************** Else If Button_Rond.value = True And (KU3.ComboBox_Afmeting1.value = "Diameter" Or (KU3.ComboBox_Afmeting1.value = "anders" And Not IsNumeric(KU3.TextBox_Afmeting1.value))) Then MsgBox "Nieuwe Diameter invullen" End If If Button_Vierkant.value = True And (KU3.ComboBox_Afmeting1.value = "Breedte" Or (KU3.ComboBox_Afmeting1.value = "anders" And Not IsNumeric(KU3.TextBox_Afmeting1.value))) Then MsgBox "Nieuwe Breedte invullen" End If If Button_Vierkant.value = True And (KU3.ComboBox_Afmeting2.value = "Hoogte" Or (KU3.ComboBox_Afmeting2.value = "anders" And Not IsNumeric(KU3.TextBox_Afmeting2.value))) Then MsgBox "Nieuwe Hoogte invullen" End If End If End Sub Private Sub TextBox_Afmeting1_Change() ' Kijken of er in de TextBox geen punt of komma wordt ingevuld '************************************************************************************** '************************************************************************************** Dim Controle Controle = RB_W57_Algemeen.ControleOpVerbodenKarakters(TextBox_Afmeting1.value) If Not Controle Then MsgBox "Heel getal invullen, dus geen punt of komma!" TextBox_Afmeting1.value = Null End If End Sub Private Sub TextBox_Afmeting2_Change() ' Kijken of er in de TextBox geen punt of komma wordt ingevuld '************************************************************************************** '************************************************************************************** Dim Controle Controle = RB_W57_Algemeen.ControleOpVerbodenKarakters(TextBox_Afmeting2.value) If Not Controle Then MsgBox "Heel getal invullen, dus geen punt of komma!" TextBox_Afmeting2.value = Null End If End Sub
16