![]() |
1
4
如果工作表被锁定,宏似乎没有对低级信息(如ID)的写入权限。 但是,我认为不可能在UDF中取消对工作表的保护。根据设计,自定义项受到严格限制;我认为让一个细胞公式控制床单保护将打破一个细胞公式只影响一个细胞的公式范式。 看见 this page 我认为这限制了你的选择。您必须:
UDF方法充满了问题,因为您试图使用为计算单元格而设计的东西在工作表上做永久标记。 尽管如此,这里有一个UDF示例,您可以使用它在单元格上标记“永久”值,该值适用于受保护工作表的未锁定单元格。此方法仅适用于单个单元格(尽管它可以适用于数组公式)。
但这是有缺陷的。但是,使用“复制”或“填充框”将保留先前复制的值。只有将单元格显式设置为新公式,它才能工作。但是,如果您再次在单元格中输入公式(只需单击它,然后按enter键),将计算一个新值-这是标准单元格行为。 我认为工作表变更事件是一个方向,它有更多的自由度。下面是一个简单的示例,用于更新任何单元格更改的ID。它可以根据您的特定场景进行定制。此功能需要添加到每个需要ID设置行为的工作表中。
最后一点;在所有情况下,如果您重新打开工作表,您的ID计数器都将重置(至少在示例中提供的有限详细信息下)。 希望这有帮助。 |
![]() |
2
1
同意Ant-您的代码在Excel2003SP3上运行良好。 我还能够使用:
我想你是从一个数组公式中调用它的,它在整个范围内只被调用一次。无法获取某个区域的ID-只能获取单个单元格。这就解释了为什么Application.Caller.ID会失败,因为Range(“A1:B9”).ID会生成
当你使用
|
![]() |
3
1
|
![]() |
4
1
问题在于Application.Caller。 因为您是从用户定义的函数调用它,所以它将向您传递一个错误描述。这是帮助文件中的备注。 评论 此属性返回有关如何调用Visual Basic的信息,如下表所示。
因为您是从用户定义的函数调用它,所以发生的是Application.Caller向您的范围变量curCell返回一个错误代码字符串。它不会导致错误处理程序将拾取的错误。之后发生的是引用curCell,它实际上不再是一个范围。在我的机器上,它尝试设置curCell=Range(“错误2023”)。无论该对象是什么,它可能不再具有ID属性,当您尝试设置它时,它会向您抛出该对象错误。 这是我要尝试的。。。
|
![]() |
5
0
我发现,如果我使用“protect DrawingObjects:=False”保护该表,UDF可以设置Id.Strange。 谢谢你在这方面的帮助。 |
![]() |
Interactive · 如果相邻单元格为空,则VBA完成循环 1 年前 |
![]() |
RonanC · VBA数据验证下拉列表,是否也允许自由文本? 1 年前 |
|
user1646660 · 如果日期介于两个日期之间,则向插槽添加日期 1 年前 |
![]() |
Blake S · Excel宏错误:过程调用或参数无效 1 年前 |
|
Hieu Minh · 数据透视表无法覆盖现有的合并单元格 1 年前 |
![]() |
Nick · 当条件匹配电源查询时,从单独的查询中返回多列 2 年前 |