13.10.2007

BlockSelect2Excel

Merhaba,
BlockSelect2Excel : Çiziminizde belirlediğiniz bir bölgedeki blockların isim ve miktarlarını excel dosyasına kaydetmeye yarar.

BlockSelect2Excel.bas dosyasını yükledikten sonra Macromuz Excel ile etkileşimli çalışacağı için VBE de Excele Referans göstermeniz gerekli.
Bu ayarlamayı da yaptıktan sonra BlockSelect2Excel Macrosu çalıştırdığınız da

Sizden bir bölge seçmeniz veya objeler seçmeniz istenecek
seçiminiz bittikten sonra da (enter veya fare sağ tık seçim biter)
Seçiminiz de blok mevcud sa bunları listeleyip Excel dosyasına aktarır
kodların çalışması bittiğin de Excel dosyasının bilgisayarınızda ki yeri ve ismini söyleyecektir.

Not: Excel dosyası açıkken kodları çalıştırmayınız uyarı verir.

Sub BlockSelect2Excel()

' info(at)mentes.com.tr
'
ibrahim Yorulmaz - Antalya - 2007
'
o 532 625 55 66

' Not: Excele referans göstermeyi unutmayınız
'
Tools - References...
'
Microsoft Excel 11.0 Object Library
'
Kullandığınız Excel sürümüne göre 11.0 degişebilir.

Dim BlockSS As AcadSelectionSet
Dim secili As Integer

ThisDrawing.Utility.Prompt
"Lütfen saymak istediğiniz Bloklara ait bölge Seçiniz" & vbCrLf

On Error Resume Next
Set BlockSS = ThisDrawing.SelectionSets("BlockSS")
If Err Then Set BlockSS = ThisDrawing.SelectionSets.Add("BlockSS")
BlockSS.Clear
On Error GoTo 0

BlockSS.SelectOnScreen

Dim KacBlock As Integer
KacBlock
= 0

' Secimde block varsa KacBlock degerini 1 yap
For secili = 0 To BlockSS.Count - 1
If BlockSS.Item(secili).ObjectName = "AcDbBlockReference" Then
KacBlock
= 1
End If
Next secili

' eğer secimde block yoksa uyar
If KacBlock = 0 Then
MsgBox "Seçiminiz de Block bulunamadı !", vbInformation, "Block yok."
Exit Sub
End If

On Error GoTo UPSSHATA

Dim Excel As Excel.Application
Dim ExcelSheet As Object
Dim ExcelWorkbook As Object

' Excel i aç
Set Excel = New Excel.Application

' excel e kitap ekle
Set ExcelWorkbook = Excel.Workbooks.Add
' aktip excel kitap sayfasını belirle
Set ExcelSheet = Excel.ActiveSheet

' Excel uyarılarını yoksay
'
dosya önceden varsa üzerine kaydedeyim mi sorusu iptali
Excel.DisplayAlerts = False

' Sayfa ismini Blocklar yap
ExcelSheet.Name = "Blocklar"

' excel kitabında bulunan sayfa sayısı kadar döngü
For Each Worksheet In Excel.ActiveWorkbook.Worksheets
' sayfa ismi Blocklar değilse
If Worksheet.Name <> "Blocklar" Then
' gereksiz bos sayfaları yok et
' excel alert vermesini yukarıda iptal etmiştik
Excel.Sheets(Worksheet.Name).Delete
End If
Next

Dim Dosyaismi
' dosyaismi= dwg dosyamızla aynı klasörde ve aynı isimde sadece dosya uzantısı xls(excel) oldu
Dosyaismi = Left(ThisDrawing.FullName, InStr(ThisDrawing.FullName, ".") - 1) & ".xls"

' excel kitabını kaydet
ExcelWorkbook.SaveAs Dosyaismi

' önce yazılan Sutunları yok et
ExcelSheet.Range("A1").EntireColumn.Delete
ExcelSheet.Range(
"A1").EntireColumn.Delete

Dim Satir As Integer
Satir
= 1

' Blok isimlerinin hepsini A sutununa yaz
For secili = 0 To BlockSS.Count - 1
If BlockSS.Item(secili).ObjectName = "AcDbBlockReference" Then
ExcelSheet.Cells(Satir,
1).Value = BlockSS.Item(secili).Name
Satir
= Satir + 1
End If
Next secili

' SelectionSets i yok et
BlockSS.Delete

' A sutununu alfabetik olarak sırala
Excel.Selection.Sort Key1:=ExcelSheet.Range("A1"), Order1:=xlAscending, _
Header:
=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

' A sutununda kaç tane dolu hucre oldugunu bul
Dim SatirAll
SatirAll
= Excel.WorksheetFunction.CountA(ExcelSheet.Range("A1:A65500"))

' B sutununa excel EGERSAY formulunu uygulayıp değerini yaz
Dim Miktar As Integer
For Miktar = 1 To SatirAll
ExcelSheet.Cells(Miktar,
2).Value = Excel.WorksheetFunction.CountIf(ExcelSheet.Range("A:A"), ExcelSheet.Range("A" & Miktar))
Next Miktar

' A2 hücresinden itibaren A sutununda ki benzer satırları yok et
For Miktar = 1 To SatirAll
' A2 hucresinden başla ve Sonsuz döngüye girmemek için boş hücreye dikkat et
If Miktar > 1 And ExcelSheet.Cells(Miktar, 1).Value <> "" Then
If ExcelSheet.Cells(Miktar, 1).Value = ExcelSheet.Cells((Miktar - 1), 1).Value Then
ExcelSheet.Cells(Miktar,
1).EntireRow.Delete
' satır silindi miktarı geri al
Miktar = Miktar - 1
End If
End If
Next Miktar

' A ve B sutunlarını en uygun genişlik yap
ExcelSheet.Columns("A:A").EntireColumn.AutoFit
ExcelSheet.Columns(
"B:B").EntireColumn.AutoFit

' Excel i kaydet
ExcelWorkbook.Save

' excel uyarıları çalışır duruma getir
Excel.DisplayAlerts = True

' Exceli kapat
Excel.Application.Quit

Set ExcelSheet = Nothing
Set ExcelWorkbook = Nothing
Set Excel = Nothing

' işlem bitti dosya adresini söyle
MsgBox "Seçimizde ki mevcud blocklar listesi bilgisayarınız da" & vbCrLf & _
Dosyaismi
& vbCrLf & _
"Excel dosyası olarak kaydedildi !", vbInformation, "Block Listesi Kaydedildi !"

Exit Sub

UPSSHATA:

Excel.Application.Quit
Set ExcelSheet = Nothing
Set ExcelWorkbook = Nothing
Set Excel = Nothing
MsgBox "HATA yaptık." & vbCr & Err.Description, vbCritical, "Hata oluştu !"
Err.Clear
Exit Sub

End Sub


Ekler:
Dosya: BlockSelect2Excel.zip
Dosya içeriği: BlockSelect2Excel.bas

Kolay gelsin

Hiç yorum yok: