Zobrazit plnou verzi pøíspìvku: ActiveSelectionSet po Query.Execute
Zdravim,
mam problem vo VBA pri ziskani objektov po Query.Execute do SelectionSet-u pomocou ThisDrawning.ActiveSelectionSet. V pripade, ze query vyberie nejake objekty ActiveSelectionSet ich vrati v SelectionSet-e.
Ked Query.Execute nevyberie ziadny objekt ActiveSelectionSet vrati objekty vybrate v poslednom SelectionSet-e. A nie prazdny SelectionSet ako ocakavam.
Vdaka za kazdu radu, pomoze mi tiez rada ako dostat vo VBA objekty pomocou Query do SelectionSet-u.
Marian
na upresnenie posielam kod.
1. v pripade ze v pripojenom vykrese sa nachadzaju objekty s layer = 0 SelectionSet po query vrati objekty s layer = 0. Ak sa nenachadza, vrati vsetky objekty z predchadzajuceho SelectionSet-u.
2. taktiez v danom pripade nefunguje Query.Execute, ale iba ThisDrawing.SendCommand "_MAPWSQUERYEXECUTE "
Sub QueryToSelectionSet() Dim oQry As Query Dim oQLeaf As QueryLeaf Dim oQBranch As QueryBranch Dim oProject As Project Dim oUtil As AcadUtility Dim sLayer As String sLayer = "0" Dim oProjectOptions As ProjectOptions Dim oAcadSelSet As AcadSelectionSet Set oUtil = ThisDrawing.Utility Set oProject = ThisDrawing.Application.GetInterfaceObject("AutoCADMap.Appli cation").Projects(ThisDrawing) Set oProjectOptions = oProject.ProjectOptions Set oAcadSelSet = ThisDrawing.SelectionSets.Add("AllObjectsSelected") If Not Nothing Is oAcadSelSet Then oAcadSelSet.Select acSelectionSetAll oUtil.Prompt "Before _MAPWSQUERYEXECUTE oAcadSelSet.Name = " & oAcadSelSet.Name & vbCrLf oUtil.Prompt "Before _MAPWSQUERYEXECUTE oAcadSelSet.Count = " & CStr(oAcadSelSet.Count) & vbCrLf oAcadSelSet.Clear oAcadSelSet.Delete End If oProjectOptions.MkSelSetWithQryObj = True Set oQry = oProject.CurrQuery oQry.Clear Set oQBranch = oQry.QueryBranch Set oQLeaf = oQBranch.Add(kPropertyCondition, kOperatorAnd) If True = oQLeaf.SetPropertyCond(kLayer, kCondEq, sLayer) Then oQry.Mode = kQueryDraw If True = oQry.Define(oQBranch) Then '   ; If False = oQry.Execute( ) Then '   ; ThisDrawing.Utility.Prompt "Query.Execute fail" '   ; End If ThisDrawing.SendCommand "_MAPWSQUERYEXECUTE " oUtil.Prompt "Execute Query for Layer = " & sLayer & vbCrLf End If End If Set oAcadSelSet = ThisDrawing.ActiveSelectionSet If Not Nothing Is oAcadSelSet Then oUtil.Prompt "After _MAPWSQUERYEXECUTE oAcadSelSet.Name = " & oAcadSelSet.Name & vbCrLf oUtil.Prompt "After _MAPWSQUERYEXECUTE oAcadSelSet.Count = " & CStr(oAcadSelSet.Count) & vbCrLf oAcadSelSet.Clear oAcadSelSet.Delete End If oQry.Clear Set oUtil = Nothing Set oQry = Nothing Set oQBranch = Nothing Set oQLeaf = Nothing Set oAcadSelSet = Nothing End Sub
Zdravim,
podobny kod som nasiel ako odpoved na Query so Selection Setu na adn.autodesk.com. Je v podstate identicky, akurat volanie query je
ThisDrawing.SendCommand "(ade_qryexecute)" & Chr(13)
No aj tak to neriesi problem, ked je pocet objektov, ktore vyberie query rovne nule. Je nejaka moznost zistit vo VBA pocet objektov, ktore vrati Query?
dik