【问题标题】:Using MS Access to add comments to a MS Excel range object使用 MS Access 向 MS Excel 范围对象添加注释
【发布时间】:2014-12-31 16:20:36
【问题描述】:

我正在尝试在 MS Access 模块中编写一个子例程,该模块访问 MS Excel 工作表并向指定范围添加注释。我正在使用后期绑定,这样我的信心不足的用户就不需要摆弄添加引用。尝试将 cmets 添加到范围对象时,会引发以下错误:

运行时错误“1004”:应用程序定义的或对象定义的错误。

使用以下示例代码,假设打开的工作表有一个带有注释“Hello”的单元格 A1,带有注释“World”的单元格 A2,并且单元格 A3 没有注释。

Sub export(strFilePath As String)
 Dim XL As Object
 Dim WB as Object
 Dim WS as Object
 Set XL = CreateObject("Excel.Application")
 XL.Workbooks.Open strFilePath
 Set WB = XL.Workbooks(1)
 Set WS = WB.Sheets("ExportSheet")

 Debug.Print WS.Comments.Count 'returns accurate number of comments on sheet (2)
 Debug.Print WS.Range("a1").Comment.Text 'returns comment of cell A1 (Hello)
 WS.Range("a1").Comment.Delete 'removes comment of cell A1
 Debug.Print WS.Comments.Count 'returns accurate number of comments on sheet (1)
 Debug.Print WS.Range("a2").Comment.Text 'returns comment of cell A2 (World)
 WS.Range("a2").ClearComments 'removes comment of cell A2
 Debug.Print WS.Comments.Count 'returns accurate number of comments on sheet (0)

 WS.Range("a3").AddComment("HelloAgain") 'causes 1004 error
 WS.Range("a3").AddComment "HelloAgain" 'also causes 1004 error, if the above line is commented out

End Sub

除了range.AddComment 方法外,我可以访问与 cmets 相关的方法。 如何添加评论?

【问题讨论】:

  • 尝试删除 "HelloAgain" 周围的括号 --> WS.Range("A3").AddComment "HelloAgain"
  • 不幸的是,无论注释是否在括号内,都会出现同样的错误。我已经更新了我的原始帖子以反映这一点。
  • 嗯...A3 中是否存在现有评论?我在 A1 和 A2 中看到了您的清算 cmets,但没有在 A3 中看到。如果该范围内已存在评论,则会引发错误 1004。
  • Fink,单元格 A3 不包含注释。下面的一些答案建议清除单元格中的评论以确保可以添加新评论。我可以使用.ClearComments 清除单元格的注释(不存在),但.AddComment 方法仍然会抛出相同的错误。

标签: excel ms-access vba late-binding


【解决方案1】:

当单元格 A3 已包含注释时,会发生此错误。我能够重现它。

>>>编辑 - 尝试向任何单元格添加评论时出现问题

如果工作表与另一个工作表分组,也会出现此问题。见http://www.pcreview.co.uk/forums/did-lose-ability-add-edit-comments-excel-t3837597.html

复制:

  1. 在 Excel 中打开工作簿,然后单击 Sheet1 选项卡。
  2. 按住 Shift 键,单击 Sheet2。这会导致工作表 1 和 2 被分组。
  3. 右键单击任何单元格。 “插入评论”选项不见了!
  4. 在审核/评论下,“新评论”选项是灰色的!

修复:

如果这确实是您的问题,请尝试添加一行代码来取消工作表的分组。

 Set WS = WB.Sheets("ExportSheet")
 WS.Select      ' ungroup worksheets  <-- ADD THIS CODE

我发现了如何使用 VBA 通过录制宏来取消组合工作表。我右键单击 Sheet 选项卡并选择“Ungroup Sheets”,然后查看生成的代码。

【讨论】:

  • 谢谢,汤姆,但在我的解释中,我规定单元格 A3 没有评论。与 mwolfe02 的回答一样,我尝试从单元格中清除评论无济于事,并且仍然出现 1004 错误。还有其他想法吗?
  • 您可以在 Excel 中向 A3 添加评论吗?从所有 MS Office 应用程序退出后,任务管理器/进程是否显示任何仍在运行的 excel.exe 副本?您是否在 End Sub 之前执行 WB.Close 和 XL.Quit?
  • 电子表格已分组 - 选择单个工作表解决了问题。非常感谢您的宝贵时间!
【解决方案2】:

发生错误是因为已有评论。如果你想覆盖任何现有的评论,但不确定单元格是否已经有评论,你可以调用 Range 对象的.ClearComments 方法。这将从单元格中清除任何现有的 cmets,但如果当前不存在评论,则不会引发错误。

WS.Range("a3").ClearComments
WS.Range("a3").AddComment "HelloAgain"

【讨论】:

  • 谢谢,mwolfe02,但在我的解释中,我规定单元格 A3 没有附加注释。无论如何,如果我 .ClearComments 范围,我仍然无法运行 .AddComment 方法。发生同样的错误。 .AddComment 方法是否可能是问题所在,并且无法从 Access 访问?
  • 在从单元格 A2 清除评论后,您能否在单元格 A2 上使用 .AddComment
  • 不,这也不起作用。每次我在一个范围内调用.AddComment 方法时(不管它是否有注释)都会抛出 1004 错误。
  • 如果选择了多个工作表,ClearComments 将起作用,但 AddComment 将失败。请参阅下面我编辑的答案。 (Excel 太棒了直观!)
最近更新 更多