让我们一起探索一下这些藏在excel自动排序中的“小秘密”。-英雄云拓展知识分享
8880
2024-09-06
Q:Excel没有提供便捷的方法来找到所给单元格的所有援用单元格,虽然Range对象有一个Precedents属性,但只适用于援用单元格都在同一工作表上的情况。
举例来看,下所示的工作表Sheet1,在单元格A1中的公式为=B3+5,而单元格B3中的公式又援用了单元格D2和E2,单元格D2乃至援用了另外一工作表Sheet2中的单元格A1。
经过公式选项卡中的“追踪援用单元格”命令,可以看到单元格A1的援用关系以下所示。
下面的程序:
Sub test()
Dim rngToCheck As Range
Dim rngPrecedents As Range
Dim rngPrecedent As Range
Set rngToCheck = Range(“A1”)
On Error Resume Next
Set rngPrecedents = rngToCheck.Precedents
On Error GoTo
If rngPrecedents Is Nothing Then
Debug.PrintrngToCheck.Address(External:=True) & “没有援用单元格.”
Else
For Each rngPrecedent In rngPrecedents
Debug.PrintrngPrecedent.Address(External:=True)
Next rngPrecedent
End If
End Sub
得到的结果是:
[Q&A49.xlsm]Sheet1′!$B$3
[Q&A49.xlsm]Sheet1′!$D$2
[Q&A49.xlsm]Sheet1′!$E$2
并没有追踪列出第3级的援用关系,即对工作表Sheet2中单元格A1的援用。
由于大多数电子表格计算横跨多个工作表,因此Precedents属性不能满足要求,能不能编写一个程序用来列出含有公式的单元格援用的所有单元格?
A:可以编写VBA程序来解决Precedents属性的局限。这个程序会肯定所提供的单元格区域的援用单元格并以正确的援用顺序列出它们,唯一的限制是没法重新计算已关闭工作簿、隐藏的工作表、受保护工作表或循环援用中的援用单元格。
在colinlegg.wordpress.com中,使用下面的程序(本文在整理时略有修改)可以列出单元格A1的援用单元格和层级关系。
Sub testGetAllPrecedents()
Dim rngToCheck As Range
Dim dicAllPrecedents As Object
Dim i As Long
Dim str As String
Set rngToCheck =Sheet1.Range(“A1”)
Set dicAllPrecedents =GetAllPrecedents(rngToCheck)
str = “单元格” & ActiveCell.Address(False, False) & “中的公式为: ” _
& ActiveCell.Formula &vbCrLf
str = str & “其顺次援用的单元格信息以下:” & vbCrLf & vbCrLf
str = str & “层级” & vbTab & “援用的单元格” & vbTab & vbTab & “公式” & vbCrLf
If dicAllPrecedents.Count = Then
MsgBox rngToCheck.Address(External:=True)& “没有援用单元格.”
Else
For i = LBound(dicAllPrecedents.Keys)To UBound(dicAllPrecedents.Keys)
str = str &dicAllPrecedents.Items()(i) & vbTab
str = str &dicAllPrecedents.Keys()(i) & vbTab
str = str & Range(dicAllPrecedents.Keys()(i)).Formula& vbCrLf
Next i
End If
MsgBox str
End Sub
Public Function GetAllPrecedents(ByRef rngToCheck As Range) As Object
Const lngTOP_LEVEL As Long = 1
Dim dicAllPrecedents As Object
Dim strKey As String
Set dicAllPrecedents =CreateObject(“Scripting.Dictionary”)
Application.ScreenUpdating = False
GetPrecedents rngToCheck, dicAllPrecedents,lngTOP_LEVEL
Set GetAllPrecedents = dicAllPrecedents
Application.ScreenUpdating = True
End Function
Private Sub GetPrecedents(ByRef rngToCheck As Range, ByRef dicAllPrecedents As Object,ByVal lngLevel As Long)
Dim rngCell As Range
Dim rngFormulas As Range
If Not rngToCheck.Worksheet.ProtectContentsThen
If rngToCheck.Cells.CountLarge > 1Then
On Error Resume Next
Set rngFormulas =rngToCheck.SpecialCells(xlCellTypeFormulas)
On Error GoTo
Else
If rngToCheck.HasFormula Then SetrngFormulas = rngToCheck
End If
If Not rngFormulas Is Nothing Then
For Each rngCell InrngFormulas.Cells
GetCellPrecedents rngCell,dicAllPrecedents, lngLevel
Next rngCell
rngFormulas.Worksheet.ClearArrows
End If
End If
End Sub
Private Sub GetCellPrecedents(ByRef rngCell As Range, ByRef dicAllPrecedents As Object,ByVal lngLevel As Long)
Dim lngArrow As Long
Dim lngLink As Long
Dim blnNewArrow As Boolean
Dim strPrecedentAddress As String
Dim rngPrecedentRange As Range
Do
lngArrow = lngArrow + 1
blnNewArrow = True
lngLink =
Do
lngLink = lngLink + 1
rngCell.ShowPrecedents
On Error Resume Next
Set rngPrecedentRange =rngCell.NavigateArrow(True, lngArrow, lngLink)
If Err.Number <> Then
Exit Do
End If
On Error GoTo
strPrecedentAddress =rngPrecedentRange.Address(False, False, xlA1, True)
If strPrecedentAddress =rngCell.Address(False, False, xlA1, True) Then
Exit Do
Else
blnNewArrow = False
If NotdicAllPrecedents.Exists(strPrecedentAddress) Then
dicAllPrecedents.Add strPrecedentAddress,lngLevel
GetPrecedentsrngPrecedentRange, dicAllPrecedents, lngLevel + 1
End If
End If
Loop
If blnNewArrow Then Exit Do
Loop
End Sub
GetAllPrecedents函数返回一个Dictionary对象,包括在键中的单元格地址和在项中的援用层级。代码使用了递归:GetPrecedents进程和GetCellPrecedents进程一遍一遍地相互调用,直到遍历完所有援用单元格。
对上面的示例工作表,运行代码后的结果以下所示。
>>>>🚀🌟 点击注册 免费试用 更高级的-英雄云企业级云表单 🌟🚀 😃👉🌐>>>>
在现代企业管理中,数据的高效管理和处理至关重要。随着信息技术的不断发展,英雄云的云表单已经成为了提高数据录入、管理和分析效率的不可或缺的工具。让我们来深入探讨英雄云-云表单的几大优势。
基础字段:多样性满足业务需求
英雄云的云表单中包括了各种基础字段,如单行文本、多行文本、数字输入框、单选框、复选框、下拉框、下拉复选框、日期时间、分割线等。这些字段的多样性使用户可以根据具体的业务需求,轻松进行文本、数据和时间信息的录入或修改。例如,您可以使用单行文本字段录入员工姓名、产品型号等,或者使用下拉框进行多选,根据不同情况选择更加方便的字段类型。
高级字段:提升工作效率
英雄云的云表单还提供了高级字段,如地址、图片、附件、手写签名、手机、子表、关联数据、关联查询以及流水号。这些高级字段在基础字段的基础上升级,可帮助用户完成一些琐碎的工作。例如,使用地址字段可以避免逐字打字,而流水号字段可以自动生成规律性的编号,非常适用于合同编号生成等场景。
部门成员字段:精确管理与通讯录的关联
英雄云的部门成员字段允许企业对各个部门的成员进行精确管理。用户可以通过部门成员字段获取通讯录中的部门成员信息,应用于记录报销人、报销部门等场景。这些成员字段还细分为成员单选和成员多选,可根据具体需求在通讯录中选择一个或多个成员。
聚合表:数据处理更智能
英雄云的聚合表功能用于对已存在的表单数据进行聚合计算,从而得到一张聚合表,后续其他表单可调用聚合表进行数据联动、关联查询和关联数据等操作完成数据处理。这一功能可应用于多种场景,如进销存管理、财务管理和门店零售管理等,帮助企业完成数据处理,提高工作效率。
表单权限设置:灵活管理数据访问
英雄云的表单权限设置允许用户根据企业的具体需求管理表单的访问和操作权限。用户可以根据系统权限或自定义权限对不同成员或团队进行权限设置,以确保数据的安全和合规性。这一功能使企业能够根据变化的业务需求和团队结构,实时调整权限设置。
自定义打印模板:文档输出更便捷
英雄云的云表单支持自定义打印模板,可将表单数据转换为可打印的Word文档。用户可以根据自己的需求进行排版和编辑,将产品规格说明书等文档轻松生成。这一功能提供了一种标准化的文档输出方式,简化了信息整理的过程。
综合来看,选择英雄云的云表单意味着选择更智能、更灵活、更高效的数据管理工具。无论是提高工作效率,精确管理数据,还是实现数据处理,英雄云的云表单都能满足您的多样化需求,助力您的业务发展。
如果您正在寻找一款强大的云表单工具,不妨考虑英雄云,它将为您带来更多的便捷和智能,助您事半功倍。
免责声明:
本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿等来源。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。
发表评论
暂时没有评论,来抢沙发吧~