Multiple classes, object references & Shared subs
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I'm having a bit of difficulty with some slightly more elaborate classes that I'm working with. To date I've only done a simple one with 3 or 4 values that I passed directly into the class and that was it.
My first class in this code, however, is supposed to be passed a component occurrence. From there it does a look up inside of the function new and gets a variety of parameters and writes them into the various class parameters for ease of access. One of the things its supposed to do is create an array of a secondary class that contains a lot of geometric information involved in the component. That part of the program also needs to do an excel lookup for various information relevant to that geometric information.
Unfortunately I keep getting "Reference to a non-shared member requires an object reference." It does these for all the parameters and the excel lookup. I fixed the parameters by using the component occurrence to reference the component occurrences parameters directly rather than using the assembly parameter function that inventor specifies. However, I see no other way than the FindRow statement in order to do my lookup in excel (excluding the possibility of creating an instance of excel, silently opening the referenced workbook, and doing it manually, something I'm not willing to do quite yet)
I've tried making it shared thus far, but Shared does not apparently allow for public statement and will not allow the passing of parameters into the function, so I'm kinda stuck? Any ideas would be most appreciated.
Thank you,
Thomas Long
Public Class Base
Public BeamList() As Beam
Public oLength As Double
Public oWidth As Double
Public oHeight As Double
Public oName As String
Public oSplits(3) As Boolean
Public oPart As ComponentOccurrence
Public oSectionNumber As Integer
Public Sub New(oPart As ComponentOccurrence)
oDoc = oPart.Definition.Document
MyClass.oLength = oDoc.ComponentDefinition.Parameters.Item("SectionLength").Value
MyClass.oWidth = oDoc.ComponentDefinition.Parameters.Item("SectionWidth").Value
MyClass.oHeight = oDoc.ComponentDefinition.Parameters.Item("GirderHeight").Value
MyClass.oName = oPart.Name
MyClass.oPart = oPart
'MyClass.oSectionNumber = Split(iProperties.Value("Custom", "ETO Item"), "H00")(UBound(Split(iProperties.Value("Custom", "ETO Item"))))
For Each oVal in MyClass.oSplits
oVal = False
Next
If oDoc.ComponentDefinition.Parameters.Item("LengthwiseSplits").Value = "Side A" Or oDoc.ComponentDefinition.Parameters.Item("LengthwiseSplits").Value = "Side A & C" Then MyClass.oSplits(0) = True
If oDoc.ComponentDefinition.Parameters.Item("WidthwiseSplits").Value = "Side B" Or oDoc.ComponentDefinition.Parameters.Item("WidthwiseSplits").Value = "Side B & D" Then MyClass.oSplits(1) = True
If oDoc.ComponentDefinition.Parameters.Item("LengthwiseSplits").Value = "Side C" Or oDoc.ComponentDefinition.Parameters.Item("LengthwiseSplits").Value = "Side A & C" Then MyClass.oSplits(2) = True
If oDoc.ComponentDefinition.Parameters.Item("WidthwiseSplits").Value = "Side D" Or oDoc.ComponentDefinition.Parameters.Item("WidthwiseSplits").Value = "Side B & D" Then MyClass.oSplits(3) = True
ReDim MyClass.BeamList(oDoc.ComponentDefinition.Parameters.Item("Beams").Value-1)
For i = 0 To UBound(MyClass.BeamList)
MyClass.BeamList(i) = New Beam(oDoc.ComponentDefinition.Parameters.Item("Beam_" & i+1).Value, oDoc.ComponentDefinition.Parameters.Item("Location_" & i+1).Value, oDoc.ComponentDefinition.Parameters.Item("Facing_" & i+1).Value)
Next
End Sub
End Class
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'Defines an instance of a beam
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Public Class Beam
Public oSize As String
Public oLocation As Double
Public oFacing As String
Public oFlangeWidth As Double
Public oMidPoint As Double
Public Sub New(oSize As String, oLocation As Double, oFacing As String)
MyClass.oSize = oSize
MyClass.oLocation = oLocation
MyClass.oFacing = oFacing
GoExcel.FindRow("N:\Mechpart\TLONG\Reference Materials\Information\BEAM INFORMATION.xlsx", "Channels", "Beam Size", "=", oSize)
MyClass.oFlangeWidth = GoExcel.CurrentRowValue("FlangeWidth")
If oFacing = "Right"
MyClass.oMidPoint = oLocation + .5*GoExcel.CurrentRowValue("FlangeWidth")
ElseIf oFacing = "Left"
MyClass.oMidPoint = oLocation - .5*GoExcel.CurrentRowValue("FlangeWidth")
End If
End Sub
End Class
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\