Skip to main content
Inspiring
July 3, 2019
Answered

select ant visible layer to avoid General Photoshop error

  • July 3, 2019
  • 1 reply
  • 937 views

I create a script which cycles through all my layer comps, resize them and save to various folders.

one of the command i use is:

activeDocument.mergeVisibleLayers();

I finally figured out that i would get this error message:

Error: General Photoshop error occurred. This functionality may not be available in this version of Photoshop.

- The command "Merge Visible" is not currently available

when i am running the script when a non visible layer is currently selected.

This can happen when a new layer comp is selected where the active layer should be turned off.

Is there an elegant way to force a selection of a visible layer when the script runs to avoid such errors?

Thanks

This topic has been closed for replies.
Correct answer karpiyon

I ended up selecting the top most visible layer like shown below:

function SelectTopVisibleLayer() {

    for (var i = 0; i < activeDocument.layers.length; i++){

        var theLayer = activeDocument.layers;

        if (theLayer.typename === "ArtLayer" ){

            //select a visible layer - any layer

            if(theLayer.visible == true){

                    activeDocument.activeLayer =activeDocument.layers.getByName(theLayer.name);

               break;

            }

        }

    }

}

1 reply

Legend
July 3, 2019

May be suitable

app.activeDocument.flatten();

or

app.activeDocument.artLayers.add();

app.activeDocument.mergeVisibleLayers();

karpiyonAuthorCorrect answer
Inspiring
July 4, 2019

I ended up selecting the top most visible layer like shown below:

function SelectTopVisibleLayer() {

    for (var i = 0; i < activeDocument.layers.length; i++){

        var theLayer = activeDocument.layers;

        if (theLayer.typename === "ArtLayer" ){

            //select a visible layer - any layer

            if(theLayer.visible == true){

                    activeDocument.activeLayer =activeDocument.layers.getByName(theLayer.name);

               break;

            }

        }

    }

}