cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Have a PTC product question you need answered fast? Chances are someone has asked it before. Learn about the community search. X

Cant seem to get MCAutoRecalc to run in VB

DavidDickinson
7-Bedrock

Cant seem to get MCAutoRecalc to run in VB

Good morning all,

Im having trouble getting the following bit of code to run:

Public Sub Open_MathCAD()

Dim MathCAD As Object, Worksheets As Variant, Sheet As Variant

Set MathCAD = CreateObject("Mathcad.Application")
Set Worksheets = MathCAD.Worksheets

'THIS IS WHERE IT DOESNT WORK (I TRIED ALL OF THESE, TO NO AVAIL)

MathCAD.Options(mcAutoRecalc) = False

MathCAD.Options MCAutoRecalc = False

MathCAD.Options MCAutoRecalc = False

MathCAD.Options(MCAutoRecalc WorksheetOption) = False


End Sub

I am recieving a "Runtime Error 438 - Object doesnt support this property or method" prompt. I checked to make sure I had all the references loaded (mathcad.exe, automation.tlb, automationprivate.tlb). I did take out of this example a bit of code I used to open up an existing mathCAD file based on what the user chose with msoFileDialogFilePicker, but other than that everything's here.

All I wish to do is to turn off the automatic calculation for MathCAD. Is there something Im missing? Is my syntax right? Also, where can I find a good resource to manipulate MathCAD with VBA with code examples, other than the "Developers Reference"?

ACCEPTED SOLUTION

Accepted Solutions

I got it! I just had to do the following to the code:

Dim MC As MathCAD.Application

Dim WST As MathCAD.Worksheets

Dim WS As MathCAD.Worksheet

Dim WIN As MathCAD.Window

Dim MathCADFile As Variant

MC.Visible = True

MathCADFile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Item(1)

WST.Open (MathCADFile)

Set WS = MC.ActiveWorksheet

Set WIN = MC.ActiveWindow

'to turn off AutoRecalculate

If WS.GetOption(mcAutocalc) = -1 Then

WIN.Worksheet.SetOption mcAutocalc, False

(Note that the screen should also be refreshed as it still shows AUTO in the bottom right-hand corner till you drag your mouse over it)

Thanks for your most helpful example Andy!

View solution in original post

4 REPLIES 4

First of all you need to get a worksheet object (autorecalc is a property of the worksheet), then use the Worksheet.SetOption method.

Also, where can I find a good resource to manipulate MathCAD with VBA with code examples, other than the "Developers Reference"?

There really isn't one, but this document contains a lot of VBscript examples, which are at least close:

Extra Components.mcd

Richard,

Ok, I seemed to have gotten the MathCAD references working correctly by Dimensioning my Variables as such:

Dim MC As MathCAD.Application

Dim WST As MathCAD.Worksheets

Dim WS As MathCAD.Worksheet

Dim WIN As MathCAD.Window

...and setting the variables as such:

If MC Is Nothing = True Then

Set MC = CreateObject("Mathcad.Application")

Set WST = MC.Worksheets

End If

...

If FD.Show = True Then

MC.Visible = True

MathCADFile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Item(1)

WST.Open (MathCADFile)

Set WS = MC.ActiveWorksheet

Set WIN = MC.ActiveWindow

Else

Exit Sub

End If

However, I am still unable to figure out the syntax for the WS.SetOption method. Here is what I have currently tried:

WS.SetOption(mcAutocalc) = False (Gives me Argument not Optional Error)

WS.SetOption(mcAutocalc, -1) = 0 (Gives me Expected Function or Variable Error)

WS.SetOption(mcAutocalc, -1) (Gives me Compile Error: Expected = Error)

Im sure its obvious Im not sure what Im doing, so any bones you could throw me would be GREATLY appreciated. THANKS!

Hi David,

There's an example of the usage for autocalc in the set remote value function (attached).

'Turn auto calculation Off

AutoCalcMode = Application.Worksheets(w).GetOption( mcAutocalc )

Application.Worksheets(w).SetOption mcAutocalc, False

Not sure who the originator for these routines was, one of the many files that I have accumulated from the forum over the years.

It mostly works though I am getting problems when I try to open files that then open reference mathcad sheets that contain active scripts (including the ones attached...)

{There is also a warning about reading variables (GetRemoteValue) - if the variable referenced does not exist, Mathcad crashes.}

Hope this helps

Andy

I got it! I just had to do the following to the code:

Dim MC As MathCAD.Application

Dim WST As MathCAD.Worksheets

Dim WS As MathCAD.Worksheet

Dim WIN As MathCAD.Window

Dim MathCADFile As Variant

MC.Visible = True

MathCADFile = Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Item(1)

WST.Open (MathCADFile)

Set WS = MC.ActiveWorksheet

Set WIN = MC.ActiveWindow

'to turn off AutoRecalculate

If WS.GetOption(mcAutocalc) = -1 Then

WIN.Worksheet.SetOption mcAutocalc, False

(Note that the screen should also be refreshed as it still shows AUTO in the bottom right-hand corner till you drag your mouse over it)

Thanks for your most helpful example Andy!

Announcements

Top Tags