【发布时间】:2017-03-15 06:09:10
【问题描述】:
我有一个包含大约 150 个工作表的工作簿。第一个工作表是一个大约 150 行长和 16 列宽的信息表/列表,名为“log”。在上校。 “日志”工作表的“j”是包含新的或关闭的单元格值。在上校。 “m”是指向工作簿中其他工作表的超链接。代码的目标是遍历“日志”表的每一行,并确定它是否包含在 col 中关闭。 j.如果是,请按照相应的超链接,在同一行中删除工作表。问题是我遇到了多行共享超链接的情况。例如,第 5 行超链接到第 2 页,第 15 行超链接到第 2 表。我的问题是,当代码到达第 15 行并跟随超链接时,没有什么可遵循的,因此,“日志”是活动表并且“日志”最终被删除,然后我的代码被炸毁了。有没有办法编写代码,如果活动工作表是日志表,则不删除它或跳过当前存在的代码以删除工作表并继续循环?
这里是代码...
Sub Deletelinks()
'Macro will check to see if status is closed and if so it will
'delete the supporting worksheet by following the hyperlink in
'same row
Dim count As Integer
Dim lrow As Long
Dim Rng As Range
Set Rng = Range("J2")
lrow = Worksheets("log").Range("J" & Rows.count).End(xlUp).row - 1
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For count = 1 To lrow
Sheets("log").Activate
Rng.Offset(count - 1, 0).Activate
Select Case ActiveCell.Value = "Closed"
Case True
If ActiveCell.Offset(0, 3).Value = "Click" Then
ActiveCell.Offset(0, 3).Hyperlinks(1).Follow
If ActiveSheet.Name <> "log" Then
With ActiveSheet
ActiveWindow.SelectedSheets.delete
End With
End If
End If
Case False
End Select
Next count
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
我原以为你的行说
If ActiveSheet.Name <> "log" Then已经阻止了名为“log”的工作表被删除。它实际上被命名为“日志”吗?或者它可能被称为“日志”? -
如果第 2 行和第 15 行都有指向 Sheet2 的超链接,并且第 2 行显示“已关闭”但第 15 行显示“打开”,您是否希望删除或保留 Sheet2? (或者这不是问题,因为两行应该具有相同的状态?)
-
我的代码中的 'if ActiveSheet.name "log" then' 部分似乎永远无法正常工作。我以为会,但它基本上被忽略了。我不确定为什么它不起作用,但这就是我问这个问题的原因。要回答您的其他问题,这应该不是问题,因为它们应该是相同的。看起来 Thomas 下面的代码就像他所说的那样是一种更简单的方法并且工作得很好。谢谢
-
如果由于大写字符而将工作表称为
"Log"或"LOG",则对"log"的测试将不起作用,所以我只是想知道这样简单的事情是否会导致您的问题。 (我也在考虑其他不明显的差异,例如"0"而不是"o",或者工作表名称中的尾随空格,但它们会阻止Worksheets("log")工作,所以不可能是那种如果有差异。)
标签: vba excel hyperlink macros