custom property macro for Weight, how to get the parenthesis?

Discussion in 'SolidWorks' started by Sam, Jan 10, 2008.

  1. Sam

    Sam Guest

    I am trying to write a macro to create a custom property for Weight
    and set the Weight custom property value to "SW-
    " (including parenthesis) so that at the next save
    the value of the Weight custom property will be set to the weight of
    the model. The macro works for the most part but I cannot get the
    initial value of the Weight custom property to include the
    parenthesis. The codes is below and as you can see the "SW-
    " is enclosed in parenthesis but the only thing added
    to the custom property value is (without the
    parenthesis). I tried adding a second set of parenthesis to the code
    ("""") but that causes a problem with the macro.

    I am sure there must be a way to do this, any help will be greatly
    appreciated.




    ModelDoc.AddCustomInfo3("", "Weight", swCustomInfoText, "SW-
    ")
     
    Sam, Jan 10, 2008
    #1
  2. Sam

    That70sTick Guest

    Do you mean "quotation marks"?

    Use CHR(34) to get a quote mark.

    i.e.
    String1 = chr(34) & "This text in quotes" & chr(34)
     
    That70sTick, Jan 10, 2008
    #2
  3. Sam

    Sam Guest

    HA, yes quotation marks...

    But for some reason that is not getting converted into the weight
    value, the custom property value remains "". If I
    manually add that same text string to the value for a custom property
    (and I mean manual key strokes, not by selecting from the combo box)
    then the weight of the component is assigned to the custom property.
    Even if I add "" to a custom property for a part
    file that has already been saved as 1234.sldprt then the Part1 is
    converted to 1234.sldprt and the weight value is assigned to the
    custom property but it does not seem to be working that way when the
    custom property value is assigned via the API.

    Any ideas why???


    Thanks,

    Sam
     
    Sam, Jan 10, 2008
    #3
  4. Sam

    That70sTick Guest

    Post your code.
     
    That70sTick, Jan 10, 2008
    #4
  5. Sam

    Sam Guest

    Here is the code, its part of a batch utilities program that I have
    developed over time. There is some "filtering" at the first to make
    sure its only working on sldprt files then a silent save at the end.
    The code for adding the Weight custom property is near the end, look
    for SetSuccess = ...



    Dim selcol As New Collection
    Dim longerror As Long
    Dim DocOptions As Long
    Dim thisDoc As Variant
    Dim i As Integer
    Dim c As Integer
    Dim retval As Variant
    Dim vConfNameArr As Variant
    Dim sConfigName As String
    Dim ci As Long
    Dim bShowConfig As Boolean
    Dim boolstatus As Boolean
    Dim swSelMgr As SldWorks.SelectionMgr

    Set swApp = Application.SldWorks
    DocOptions = swOpenDocOptions_Silent

    For Each thisDoc In doclist

    Dim DocType As Long
    Dim DocExt As String
    Dim SkipFile As Long

    SkipFile = InStr(1, thisDoc, "~", vbTextCompare) 'Do not
    process temp files

    If SkipFile = 0 Then
    DocExt = UCase(Right(thisDoc, 3))
    Select Case DocExt
    Case "PRT"
    DocType = swDocPART
    Case "DRW"
    DocType = swDocDRAWING
    Case "ASM"
    DocType = swDocASSEMBLY
    Case Else
    DocType = swDocNONE
    'MsgBox "Unexpected extension encountered: " &
    thisDoc
    End Select

    '*** Filter doc types to act on***
    If DocType = swDocPART Then 'Act on slddrw files only
    Dim DocErrors As Long
    Dim DocWarnings As Long
    Dim ModelDoc As SldWorks.ModelDoc2
    Dim nretval As Long
    Dim SetSuccess As Boolean
    Dim swCustPropMgr As SldWorks.CustomPropertyManager

    Set ModelDoc = swApp.OpenDoc6(thisDoc, DocType,
    DocOptions, "", DocErrors, DocWarnings)
    If ModelDoc Is Nothing Then
    MsgBox "Couldn't open document: " & thisDoc
    Else

    SetSuccess = ModelDoc.AddCustomInfo3("", "Weight", swCustomInfoText,
    Chr(34) & "" & Chr(34))

    Dim SaveOptions As Long
    SaveOptions = swSaveAsOptions_Silent
    Dim SaveSuccess As Boolean
    SaveSuccess = ModelDoc.Save3(SaveOptions,
    DocErrors, DocWarnings)
    If SaveSuccess = False Then
    MsgBox "Couldn't save document: " & thisDoc
    End If
    End If
    swApp.CloseDoc thisDoc
    End If
    End If
    Next
    End Sub
     
    Sam, Jan 10, 2008
    #5
  6. Sam

    That70sTick Guest

    Looks like it should work.

    Does the property already exist in the file? AddCustomInfo does not
    overwrite or change existing properties.

    Usually I perform an AddCustomInfo and then a CustomInfo2 immediately
    after in case the property already exists and I want to overwrite.
     
    That70sTick, Jan 10, 2008
    #6
  7. Sam

    Sam Guest

    No the custom property does not already exist.

    I think figured out the problem, Chr(34) does not seem to be adding a
    quote. It adds two individual hash marks that looks like a quote but
    it actually two indivdual characters. I need to find the character
    number for a real quote, I think that will fix the problem.


    Sam
     
    Sam, Jan 10, 2008
    #7
  8. Sam

    That70sTick Guest

    Interesting. I just checked one of my other macros and CHR(34) works
    fine for this purpose.

    Are you using a different (non-English) character set on your computer?
     
    That70sTick, Jan 10, 2008
    #8
  9. Sam

    Sam Guest

    Nope, its english. Can you explain how and where you were able to find
    out that Chr(34) converts to an apostrophe? Maybe I can do some
    research and find the number for quotes?

    Thanks for your help...
     
    Sam, Jan 10, 2008
    #9
  10. Sam

    Sam Guest

    It looks like 39 gives a single apostrophe and 34 gives a double
    apostrophe (that looks like a quote but really is not a quote).

    Sam
     
    Sam, Jan 10, 2008
    #10
  11. Sam

    That70sTick Guest

    Perhaps write a program.

    I once wrote a VBA program w/ a form w/ one textbox and a command
    button. Enter the a character into the textbox, hit command button,
    and get a message box that returns the ascii number of the first
    character in the textbox.

    You will need to use the ASC command.
     
    That70sTick, Jan 10, 2008
    #11
  12. Sam

    Sam Guest

    I got it to work, it needs three opening quotes and three closing
    quotes. I tested it and it works fine.


    SetSuccess = ModelDoc.AddCustomInfo3("", "Weight", swCustomInfoText,
    """""")


    Thanks for your help

    Sam
     
    Sam, Jan 10, 2008
    #12
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.