excel - 删除没有颜色的工作表,从所有工作表中删除评论,断开所有源的链接

标签 excel vba modeling financial

我目前正在开发我的第一个 VBA 宏来运行标题中描述的功能。我目前有以下代码。

它似乎按预期工作,但我希望有第二双眼睛告诉我是否有任何意想不到的后果,或者是否有更稳定的方法来写这个。在此先感谢,KP。

'
' deletecomments Macro
' delete comments, removetabs, break links for rolling models
'
' Keyboard Shortcut: Ctrl+alt+R
'
Public Sub RollModel()
Dim ws As Worksheet, cmt As Comment

For Each ws In ActiveWorkbook.Worksheets
For Each cmt In ws.Comments
cmt.Delete
Next cmt
Next ws

   On Error Resume Next
   For Each it In ThisWorkbook.LinkSources
       For Each sh In Sheets
         sh.Cells.Replace it, ""
          For Each cl In sh.UsedRange.SpecialCells(-4174)
             If InStr(cl.Validation.Formula1, "#REF") Then cl.Validation.Delete
          Next
       Next
       ThisWorkbook.BreakLink it, 1
    Next

Application.DisplayAlerts = False
Dim Sht As Worksheet

For Each Sht In Worksheets
    If Sht.Tab.ColorIndex = xlColorIndexNone Then Sht.Delete
Next

Application.DisplayAlerts = True

End Sub

最佳答案

相信其他人可以给你一个更好的答案,但这些只是我注意到的一些事情。

  • 未声明的变量被视为变体
  • On error resume next 将抑制所有错误——不仅仅是你试图忽略的错误
  • Sheets如果您的工作簿中存在图表工作表,则集合可以包含图表工作表,而 Worksheets不要。

  • 另外,很抱歉格式错误。写在手机上。未经测试。
    Option Explicit
    
    Public Sub RollModel()
    
    With thisworkbook
    
    Dim ws As Worksheet
    
    For Each ws In .Worksheets
    Ws.cells.clearcomments
    Next ws
    
    ' I assume your on error resume next was because when there are no LinkSources, vbempty is returned instead of an array -- which you can't iterate over '
    
    ' Also, this method can also return a 2 dimensional array according to https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.linksources -- which would cause an error as array indexes below are one-dimensional '
    
    Dim linkArray as variant
    Linkarray = .linksources
    
    Dim linkIndex as long
    Dim cell as range
    
    If not isempty(linkarray) then
    
    For linkIndex = Lbound(linkarray) to ubound(linkarray)
    
    For Each ws In .Worksheets
    
    Ws.cells.replace linkarray(linkIndex), ""
    
    For Each cell In ws.cells.SpecialCells(xlCellTypeAllValidation)
    If InStr(cell.Validation.Formula1, "#REF") Then
    cl.Validation.Delete ' Not sure if this is the best way/approach, so have not really changed it.'
    End if
    Next cell
    
    Next ws
    
    .BreakLink linkarray(linkIndex), xlLinkTypeExcelLinks
    
    Next linkIndex
    
    End if
    
    For Each ws In .Worksheets
    
    If ws.Tab.ColorIndex = xlColorIndexNone Then
    Application.DisplayAlerts = False
    ws.Delete
    Application.DisplayAlerts = True
    
    Next ws
    
    End With
    
    End Sub
    

    关于excel - 删除没有颜色的工作表,从所有工作表中删除评论,断开所有源的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53163781/

    相关文章:

    Excel公式获取月份中的周数(有星期一)

    excel - .range() 和 .cell() 相等的方法?

    excel - 更改加载项用户窗体的父工作簿窗口

    r - 随机森林错误 : "Need at least two classes to do classification"

    embedded - 嵌入式代码示例的用例图

    excel - 我怎样才能让智能感知为 XLAM 文件中的 UDF 工作?

    excel - 如何使用 NPOI XSSF 创建 Excel 表

    vba - Microsoft Word 中的拼写错误

    Excel VBA 导出到 Excel - 删除连接

    r - 我在 lme4::lmer() 中的语法有什么问题,用于具有不平衡重复测量的拆分图设计?