Cannot open clipboard error

I need to copy up to 21 specific columns from a large worksheet (advstringgrid; ASG1) to a second worksheet (ASG3).  Below is my code.  I select an ASG1 column, copy it to the clipboard, go to Row 1 of the next ASG3 column, and paste from the clipboard.  

I frequently get a 'Cannot open clipboard. Access denied' error.  Is there a better approach?  Any ideas for fixing?

  { Copy selected col from ASG1 to ASG3...}
  Col_ASG2 := 0;
  for i:=1 to 21 do begin
    if SaveColArray<>-1 then begin
      Col_ASG1 := SaveColArray;                // get ASG1 column number
      ASG1.SelectRange(Col_ASG1,Col_ASG1,1,ASG1.RowCount-1);  // select the ASG1 column
      ASG1.CopySelectionToClipboard;          // copy to Clipboard

      INC(Col_ASG2);                                      // next ASG2 column
      ASG3.GotoCell(Col_ASG2,1);                 // go Row 1 of the next ASG2 column
      ASG3.PasteSelectionFromClipboard;      // paste from the Clipboard

      strlist.Add(SaveColNameArray);                   // Add col working title
    end;
  end;

I would suggest to not rely on the clipboard to do such operations in a tight loop.

A better approach  is to copy the information from one grid to another grid using a memorystream and the grid methods : grid.SaveRectToBinStream(), grid.LoadAtPointFromBinStream()
These functions are designed to copy a range  of cells to a memorystream and you can load from this memory stream in the grid.
Thanks.  I borrowed your code from
https://www.tmssoftware.com/site/tips.asp?s=faq&show=530

  { Copy selected col from ASG1 to ASG3...}
  Col_ASG3 := 0;
  for i:=1 to 21 do begin
    if SaveColArray<>-1 then begin
      Col_ASG1 := SaveColArray;  // get ASG1 column number to be copied to ASG3
      INC(Col_ASG3);                // next ASG2 column

      ms := TMemoryStream.Create;
      try
        ASG1.SaveRectToBinStream( Rect(Col_ASG1,1,Col_ASG1,ASG1.RowCount-1), ms);
        ms.Position := 0;
        ASG3.LoadAtPointFromBinStream(Point( Col_ASG3,1), ms);
      finally
        ms.free;
      end;

    end;
  end;