廖維榮
摘要:在新城建設或者舊城改造中,決策者往往想先了解征地拆遷工作量及成本,這樣一來,房屋的建筑面積統(tǒng)計工作變得尤為重要,傳統(tǒng)的手工計算既費時費力,又難以保證其準確性,文章應用VBA編制程序,實現(xiàn)了房屋分類面積的自動統(tǒng)計計算,使繁重的工作變得簡單高效,并且能保證其準確與可靠性。
關鍵詞:房屋面積;分類統(tǒng)計;程序計算;VBA
1引言
隨著社會經(jīng)濟的發(fā)展,人們對居住環(huán)境要求越來越高,新城建設和舊城改造項目進行的如火入茶;然而在項目的前期,決策者往往想先了解項目的征地拆遷工作量及成本,這樣一來,房屋的建筑面積統(tǒng)計便成了該項工作的重中之重。傳統(tǒng)的計算方法是逐間房屋分類手工計算,然后再匯總手工計算,這樣既費時費力,也難以保證其準確性,筆者通過思考并結合實際項目,應用VB語言編制程序,實現(xiàn)了分類房屋面積的批量自動統(tǒng)計。
2傳統(tǒng)手工統(tǒng)計方法
傳統(tǒng)的手工處理方法一般是借助excel辦公軟件,將房屋預先編號,逐間房屋分類輸入電子表格,然后計算,分類統(tǒng)計,這樣一來,如果需要統(tǒng)計的房屋較多,工作量巨大,全部手工輸入很難保證其正確性,對于大范圍的城區(qū)改造,該種方法顯然不可行。
3計算機程序自動統(tǒng)計
3.1開發(fā)工具介紹
VBA是基于ActiveX技術的AutoCAD二次開發(fā)工具,可以通過ActiveX與AutoCAD進行通信,并操縱AutoCAD的許多功能。它基于Visual Basic版本,是面向?qū)ο篌w系結構的一種編程語言,有著與VB幾乎相同的開發(fā)環(huán)境和語法。VBA依附于主應用程序AutoCAD,它與主程序的通信簡單而高效,由于共享內(nèi)存空間,使它有更快的執(zhí)行速度,且其語法結構簡潔,深受廣大工程技術人員喜愛。
3.2程序思路
第一步,房屋分類歸入不同圖層,樓層數(shù)放入房屋中以備后續(xù)程序讀取。
第二步,程序?qū)AD圖進行預處理,如刪除房屋的多余節(jié)點,判斷房屋內(nèi)樓層數(shù)的唯一性,如果樓層數(shù)不等于1(有兩個以上或者一個都沒有),程序終止,將房屋換顏色顯示,回手工處理階段。
第三步,程序按圖層讀取房屋面積及樓層數(shù),按順序?qū)⒆x取的房屋編號,將編號、面積、樓層數(shù)輸出至EXCEL表格,將編號及面積寫入相應房屋中心位置己備查詢。
第四步,程序自動統(tǒng)計所有房屋的總面積輸出至EXCEL表格的匯總行,然后結束程序。
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="合計"
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程序運行前CAD截圖
程序運行前CAD截圖如圖2所示。
3.6程序運行后生成的Excel表格
程序運行后生成的Excel表格如圖3所示。
4結語
分類房屋面積統(tǒng)計程序基本實現(xiàn)了房屋面積的自動統(tǒng)計累加,前期僅需少量的人工干預(僅將不同結構或用途的房屋歸入不同的圖層即可),后續(xù)程序自動讀取房屋面積與層數(shù),并自動分算至各個樓層,方便快捷,省時省力。特別對于大面積的房屋面積統(tǒng)計尤能顯示其優(yōu)越性,譬如幾千甚至上萬個房屋,程序運行僅幾秒鐘即可統(tǒng)計完畢,并且保證準確可靠。由于筆者本身的學識和實踐經(jīng)驗受限,程序在自動糾錯和速度方面仍有許多可以改進提高的地方,筆者在今后的學習和工作中不斷將其完善。