Get Selected Objects and Types Example (VBA)
This example shows how to determine what is
currently selected.
'-----------------------------------------------
' Problem:
' There
are many features and selectable
' entities
within the SolidWorks software. In most cases,
' it
is obvious as to what is selected, but
' sometimes
it is not clear or it is ambiguous.
'
' This
code sample is a diagnostic tool
' to
determine what is currently selected. It shows
' several
techniques and methods to get a reference
' to
what is selected.
'
' Preconditions:
' (1)
Assembly document is open.
' (2)
Something is selected.
'
' Postconditions:
' None
'
' NOTE: Not all features have an associated *FeatureData
object.
'
'-----------------------------------------------
Option Explicit
Sub main()
Dim
swApp As
SldWorks.SldWorks
Dim
swModel As
SldWorks.ModelDoc2
Dim
swSelMgr As
SldWorks.SelectionMgr
Dim
swSelObj As
Object
Dim
swFeat As
SldWorks.Feature
Dim
swEnt As
SldWorks.entity
Dim
swBody As
SldWorks.body2
Dim
swSelComp As
SldWorks.Component2
Dim
swSelModel As
SldWorks.ModelDoc2
Dim
nSelType As
Long
Dim
sFeatName As
String
Dim
bRet As
Boolean
'
Disables VB's implicit error on QI
On
Error Resume Next
Set
swApp = CreateObject("SldWorks.Application")
Set
swModel = swApp.ActiveDoc
Set
swSelMgr = swModel.SelectionManager
'
Could either have a feature or entity selected
'
'
Do not try to get entity directly
'
from feature because feature may be NULL. Instead,
'
use SelectionMgr.
Set
swFeat = swSelMgr.GetSelectedObject5(1)
Set
swEnt = swSelMgr.GetSelectedObject5(1)
Set
swBody = swSelMgr.GetSelectedObject5(1)
Set
swSelObj = swSelMgr.GetSelectedObject5(1)
Set
swSelComp = swSelMgr.GetSelectedObjectsComponent2(1)
Debug.Print
"SelType =
" & swSelMgr.GetSelectedObjectType2(1)
If
Not swFeat Is Nothing Then
Debug.Print
"Feature =
" + swFeat.Name + "
[" + swFeat.GetTypeName + "]"
End
If
If
Not swBody Is Nothing Then
Debug.Print
" Body
selected"
End
If
If
swFeat Is Nothing And _
swEnt
Is Nothing And _
swBody
Is Nothing And _
Not
swSelObj Is Nothing Then
Debug.Print
" Unknown
object"
End
If
'
Could not get component from SelectionMgr
'
so try and get component through Entity
If
swSelComp Is Nothing Then
Set
swSelComp = swEnt.GetComponent
End
If
If
Not swSelComp Is Nothing Then
Set
swSelModel = swSelComp.GetModelDoc
Debug.Print
"CompName =
" + swSelComp.Name2
Debug.Print
"ModelPath =
" + swSelModel.GetPathName
End
If
End Sub
'------------------------------------------