廖維榮
摘要:在新城建設(shè)或者舊城改造中,決策者往往想先了解征地拆遷工作量及成本,這樣一來,房屋的建筑面積統(tǒng)計(jì)工作變得尤為重要,傳統(tǒng)的手工計(jì)算既費(fèi)時(shí)費(fèi)力,又難以保證其準(zhǔn)確性,文章應(yīng)用VBA編制程序,實(shí)現(xiàn)了房屋分類面積的自動統(tǒng)計(jì)計(jì)算,使繁重的工作變得簡單高效,并且能保證其準(zhǔn)確與可靠性。
關(guān)鍵詞:房屋面積;分類統(tǒng)計(jì);程序計(jì)算;VBA
1引言
隨著社會經(jīng)濟(jì)的發(fā)展,人們對居住環(huán)境要求越來越高,新城建設(shè)和舊城改造項(xiàng)目進(jìn)行的如火入茶;然而在項(xiàng)目的前期,決策者往往想先了解項(xiàng)目的征地拆遷工作量及成本,這樣一來,房屋的建筑面積統(tǒng)計(jì)便成了該項(xiàng)工作的重中之重。傳統(tǒng)的計(jì)算方法是逐間房屋分類手工計(jì)算,然后再匯總手工計(jì)算,這樣既費(fèi)時(shí)費(fèi)力,也難以保證其準(zhǔn)確性,筆者通過思考并結(jié)合實(shí)際項(xiàng)目,應(yīng)用VB語言編制程序,實(shí)現(xiàn)了分類房屋面積的批量自動統(tǒng)計(jì)。
2傳統(tǒng)手工統(tǒng)計(jì)方法
傳統(tǒng)的手工處理方法一般是借助excel辦公軟件,將房屋預(yù)先編號,逐間房屋分類輸入電子表格,然后計(jì)算,分類統(tǒng)計(jì),這樣一來,如果需要統(tǒng)計(jì)的房屋較多,工作量巨大,全部手工輸入很難保證其正確性,對于大范圍的城區(qū)改造,該種方法顯然不可行。
3計(jì)算機(jī)程序自動統(tǒng)計(jì)
3.1開發(fā)工具介紹
VBA是基于ActiveX技術(shù)的AutoCAD二次開發(fā)工具,可以通過ActiveX與AutoCAD進(jìn)行通信,并操縱AutoCAD的許多功能。它基于Visual Basic版本,是面向?qū)ο篌w系結(jié)構(gòu)的一種編程語言,有著與VB幾乎相同的開發(fā)環(huán)境和語法。VBA依附于主應(yīng)用程序AutoCAD,它與主程序的通信簡單而高效,由于共享內(nèi)存空間,使它有更快的執(zhí)行速度,且其語法結(jié)構(gòu)簡潔,深受廣大工程技術(shù)人員喜愛。
3.2程序思路
第一步,房屋分類歸入不同圖層,樓層數(shù)放入房屋中以備后續(xù)程序讀取。
第二步,程序?qū)AD圖進(jìn)行預(yù)處理,如刪除房屋的多余節(jié)點(diǎn),判斷房屋內(nèi)樓層數(shù)的唯一性,如果樓層數(shù)不等于1(有兩個以上或者一個都沒有),程序終止,將房屋換顏色顯示,回手工處理階段。
第三步,程序按圖層讀取房屋面積及樓層數(shù),按順序?qū)⒆x取的房屋編號,將編號、面積、樓層數(shù)輸出至EXCEL表格,將編號及面積寫入相應(yīng)房屋中心位置己備查詢。
第四步,程序自動統(tǒng)計(jì)所有房屋的總面積輸出至EXCEL表格的匯總行,然后結(jié)束程序。
3.3程序界面
程序界面如圖l所示。
3.4部分源代碼
創(chuàng)造房屋選擇集部分
On Error Resume Next
Call ThisDrawing.SelectionSets("MyssFw").Delete
On Error Resume Next
Set MySelectFw=ThisDrawing.SelectionSets.Add("MyssFw")
If Err Then
Err.Clear
Set MySelect Fw = This Drawing.SeleetionSets("MyssFw")
End If
Dim gpCode(0.To 1)As Integer,dataValue(0.To 1)As Variant
gpCode(0)=0:dataValue(0)="LWPolyline"
gpCode(1)=8:dataValue(1)=layer99
MySelectFw.SelectOnScreen gpCode,dataValue選擇JMD房屋
MySelectFw.Select acSelectionSetAll,,,gpCode,dataValue
N=MvSelectFw.Count
MJZn=0
For I=0 To N-1
Set PL=MySelectFw.Item(I)
M=(UBound(PL.Coordinates)+1)/2
ReDim pointsArray(0 To 3*(M-1)+2)AsDouble
ReDim x(0 To M-1)As Double
ReDim y(0 To M-1)As Double
創(chuàng)建文字選擇集部分
0n Error Resume Next
Call ThisDrawing.SelectionSets("MyssTx").Delete
On Error Resume Next
Set MyselectTx=ThisDrawing.SelectionSets.Add("MyssTx")
If Err Then
Err.Clear
Set MyselectTx =This Drawing.SelectionSets("MyssTx")
End If
輸出至Excel表格部分
mySheet.Ceils(I+3,1).Value="合計(jì)"
mySheet.Cells(I+3,2).Value="一層面積(磚混)"
mySheet.Cells(I+3,3).Value="二層面積(磚混)"
mySheet.Cells(I+3,4).Value="三層面積(磚混)"
mySheet.Cells(I+3,5).Value="四層以上面積(磚混)"
mySheet.Cells(I+3,6).Value="房屋總面積(磚混)"
mySheet.Cells(I+3,11).Value="一層面積(磚木)"
mySheet.Cells(I+3,12).Value="二層面積(磚木)"
mySheet.Cells(I+3,13).Value="三層面積(磚木)"
mySheet.Cells(I+3,14).Value="四層以上面積(磚木)"
mySheet.Cells(I+3,15).Value="房屋總面積(磚木)"
mySheet.Cells(I+3,21).Value="一層面積(簡易)"
mySheet.Cells(I+3,22).Value="二層面積(簡易)"
mySheet.Cells(I+3,23).Value="三層面積(簡易)"
mySheet.Cells(I+3,24).Value="四層以上面積(簡易)"
mySheet.Cells(I+3,25).Value="房屋總面積(簡易)"
mySheet.Cells(I+4,1).Value=N
mySheet.Ceils(I+4,2).Value=ZHI
mySheet.Cells(I+4,3).Value=ZH2
mySheet.Cells(I+4,4).Value=ZH3
mySheet.Ceils(I+4,5).Value=ZH4
mySheet.Cells(I+4,6).Value=ZHZ
mySheet.Ceils(I+4,11).Value=ZM1
mySheet.Cells(I+4,12).Value=ZM2
mySheet.Cells(I+4,13).Value=ZM3
mySheet.Ceils(I+4,14).Value=ZM4
mySheet.Cells(I+4,15).Value=ZMZ
mySheet.Cells(I+4,21).Value=JY1
mySheet.Cells(I+4,22).Value=Jf2
mySheet.Cells(I+4,23).Value=JY3
mySheet.Cells(I+4,24).Value=JY4
mySheet.Cells(I+4,25).Value=UYZ
3.5程序運(yùn)行前CAD截圖
程序運(yùn)行前CAD截圖如圖2所示。
3.6程序運(yùn)行后生成的Excel表格
程序運(yùn)行后生成的Excel表格如圖3所示。
4結(jié)語
分類房屋面積統(tǒng)計(jì)程序基本實(shí)現(xiàn)了房屋面積的自動統(tǒng)計(jì)累加,前期僅需少量的人工干預(yù)(僅將不同結(jié)構(gòu)或用途的房屋歸入不同的圖層即可),后續(xù)程序自動讀取房屋面積與層數(shù),并自動分算至各個樓層,方便快捷,省時(shí)省力。特別對于大面積的房屋面積統(tǒng)計(jì)尤能顯示其優(yōu)越性,譬如幾千甚至上萬個房屋,程序運(yùn)行僅幾秒鐘即可統(tǒng)計(jì)完畢,并且保證準(zhǔn)確可靠。由于筆者本身的學(xué)識和實(shí)踐經(jīng)驗(yàn)受限,程序在自動糾錯和速度方面仍有許多可以改進(jìn)提高的地方,筆者在今后的學(xué)習(xí)和工作中不斷將其完善。