Feedback on an indexed Menu

The script I wrote seems to work fine on my end.

I took yours and made some adjustments:
You only need to declare the shape array once, then you can reuse it.
The error that was thrown was an undeclared function – setParameterOfZones() –

I tried this out and it worked:
If it doesn’t work on your side, you might have to check your program structure and parameter connections.
Your filter shape menus from the macro page should be connected to the script parameters and not the zone parameters for example.

filterShapes={
  {name="LP24",   index=0},
  {name="LP12",   index=2},
  {name="BP12",   index=4},
  {name="BP24",   index=5},
  {name="HP24",   index=10},
  {name="HP12",   index=12},
}

function getFilterShapeNames()
  filterShapeNames={}
  for i=1,#filterShapes do
    filterShapeNames[i]=filterShapes[i].name
  end
end

getFilterShapeNames()

last = {}

function filterShapeChanged()
  this:setParameter('FilterShapeOSCs', FilterShape)
  this:setParameter('FilterShapeWA', FilterShape)
end

defineParameter("FilterShape",nil,1,filterShapeNames,filterShapeChanged)

function filterShapeOSCsChanged()
  this.parent:getZone("Synth Zone"):setParameter("Filter.ShapeA",filterShapes[FilterShapeOSCs].index)
end

defineParameter("FilterShapeOSCs",nil,1,filterShapeNames,filterShapeOSCsChanged)

function filterShapeWAChanged()
  this.parent:getZone("Wavetable"):setParameter("Filter.ShapeA",filterShapes[FilterShapeWA].index)
end

defineParameter("FilterShapeWA",nil,1,filterShapeNames,filterShapeWAChanged)