尝试隐藏最后一列失败,并出现错误“无法将对象从工作表移出”

所以出于某种目的,我需要在excel的最后一列插入注释。

由于我不希望用户能够看到我插入的评论,我尝试隐藏列。

不知何故,它给了我一个错误“不能移动对象的工作表”

Constants.cs

HIDDEN_DATA_COL = 16384; // Which is last column in excel 2007 

MyUtil.cs

 Excel.Range range = ws.get_Range(ws.Cells[1, Constants.HIDDEN_DATA_COL], ws.Cells[1, Constants.HIDDEN_DATA_COL]); range.AddComment(result); range.Comment.Shape.Width = 50; range.Comment.Shape.Height = 50; range.EntireColumn.Hidden = true; 

我也做了一些尝试:

  • 删除range.EntireColumn.Hidden和代码是确定的。
  • 将HIDDEN_DATA_COL更改为小于10的数字,也会使运行时错误消失。

任何想法如何解决它?

工作表最后一列中的“ 隐藏 ”评论可能不是解决您最初问题的最佳方法

您面临的问题是无法在您的代码中将工作表错误移出对象,但即使您设法执行此操作,您的用户也会在每次尝试隐藏或插入任何列时面对此问题。

以下是Microsoftbuild议如何处理此问题: http : //support.microsoft.com/kb/211769


由于这可能是一个XY问题 ,我会提出一些解决方法。

实际上,在你的情况下,你可能会隐藏你的评论在其他地方 ,例如在任何隐藏的单元格,如果你想让用户不要看到它,只是保护你的工作表不隐藏的单元格。

如果您不想保护,则可以将注释存储在另一个工作表中,并使用xlVeryHidden property用VBA将其隐藏(用户无法在不使用VBA的情况下取消隐藏工作表)。

通过首先select评论栏来修复。

  range.AddComment(result); range.Comment.Shape.Width = 50; range.Comment.Shape.Height = 50; range.Columns.Cells.Select(); range.Columns.EntireColumn.Select(); range.Columns.EntireColumn.Hidden = true; 

这个问题不仅仅是为了隐藏一个列,而且为了减less一个列的宽度,也会出现同样的错误。 修复=将评论信息发布/粘贴到另一个单元格中进行保存。 然后删除评论,调整列,并为之前的单元格重新创build评论。 对所需表单上的每条评论都做到这一点。 希望这有助于,享受。 BigEEE 🙂