public AST.COMRef makeInputVectorCOMRef(AST.Range rng) { // check for the range in the dictionary AST.COMRef c; if (!_all_vectors.TryGetValue(rng, out c)) { // otherwise, create and cache it Excel.Range com = rng.GetCOMObject(_app); Excel.Worksheet ws = com.Worksheet; Excel.Workbook wb = ws.Parent; string wsname = ws.Name; string wbname = wb.Name; var path = new Microsoft.FSharp.Core.FSharpOption<string>(wb.Path); int width = com.Columns.Count; int height = com.Rows.Count; c = new AST.COMRef(rng.getUniqueID(), wb, ws, com, path, wbname, wsname, Microsoft.FSharp.Core.FSharpOption<string>.None, width, height); _all_vectors.Add(rng, c); _do_not_perturb.Add(rng, true); // initially mark as not perturbable } return c; }