- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的项目中,我经常利用表以及底层的 ListObjects 和 ListColumns。我喜欢它们,因为它们比裸 Range 对象更容易引用和更新。然而,我仍然没有找到一种合理且可维护的方法来处理由许多 ListColumn 组成的多个 ListObject,并在项目中的所有工作表中引用。
假设我有一个工作表((名称)属性设置为“WorksheetA”),其中包含带有几列(称为 Column1、Column2、...、Column10)的表(称为 TableA)。
现在我想引用另一个工作表代码中的其中一列。我可以这样做:
WorksheetA.ListObjects("TableA").ListColumns("Column7")
现在,直接使用字符串是一种不好的做法,因为它难以维护并且容易出错。
那现在怎么办?
我可以创建专用模块来将我的字符串存储为常量。例如,名为“Constants”的模块:
Public Const TABLE_A As String = "TableA"
Public Const COLUMN7 As String = "Column7"
然后我的引用可以转换为:
WorksheetA.ListObjects(Constants.TABLE_A).ListColumns(Constants.COLUMN7)
但是,该解决方案有一些缺点:
我可以将常量存储在 WorksheetA 中,并通过公共(public)函数使它们可用,例如:
Private Const TABLE_A As String = "TableA"
Private Const COLUMN7 As String = "Column7"
Public Function GetTableAName() As String
GetTableAName = TABLE_A
End Function
Public Function GetTableA() As ListObject
Set GetTableA = WorksheetA.ListObjects(TABLE_A)
End Function
Public Function GetTableAColumn7() As ListColumn
Set GetTableAColumn7 = GetTableA().ListColumns(COLUMN7)
End Function
这个解决方案实际上解决了上面提到的所有三个问题,但它仍然有点“脏”并且耗时,因为添加新表需要为每列创建一个函数。
您有更好的想法如何处理这个问题吗?
EDIT1(为了清楚起见):假设用户不得更改任何名称(表名或列名)。如果用户这样做,则应归咎于他/她。
EDIT2(为了清楚起见):我使用 Column7 作为列名仅作为示例。我们假设列有更有意义的名称。
最佳答案
这是我的两分钱。我不是一个受过教育的程序员,但我确实得到报酬,所以我想这让我变得专业。
第一道防线是我创建一个类来对表进行建模。我从表中填充类,其他代码甚至不知道数据所在的位置。当我初始化时,我将运行类似的代码
clsEmployees.FillFromListObject wshEmployees.ListObjects(1)
然后在类中,代码如下所示
vaData = lo.DataBodyRange.Value
...
clsEmployee.EeName = vaData(i,1)
clsEmployee.Ssn = vaData(i,2)
etc
每个工作表只有一个 ListObject。这是我的规则,我从不违反它。任何有权访问工作表的人都可以重新排列列并破坏我的代码。如果我想使用 Excel 作为数据库(有时我确实这样做),那么这就是我所承担的风险。如果它非常重要以至于我无法冒这个风险,那么我会将数据存储在 SQL Server、SQLite 或 JET 中。
我实际上可以调用 ListColumns 名称,而不是将范围放入数组中。这样,如果有人重新排列列,我的代码仍然可以工作。但它介绍了他们可以重命名这些列,所以我只是用一种风险换取另一种风险。它将使代码更具可读性,因此这可能是您想要进行的交易。我喜欢数组填充的速度,所以这就是我所做的交易。
如果我的项目足够小或者应该直接使用 ListObjects,那么我遵循与任何字符串相同的规则。
如果 MGlobals 占据了超过半个屏幕,那么我就做错了什么,我需要退一步思考我想要完成的任务。然后我创建一个自定义类。
关于vba - 处理表时如何编写清晰且可维护的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33040203/
你好,我是 Cone。 首先,我们思考一个问题。 为什么会有操作系统? 在我们教科书上会提到分时系统、批处理系统等等现代操作系统前的中间产物,也会讲到管理硬件的功能,但似乎没有讲到为什么有
假设我只想清除顶部的所有条目,清除 Map 的 Map 的最合适方法是什么 -关卡 map ? Map> nestedMap; 方法A:仅清除顶层 map 。 nestedMap.clear();
我时不时遇到一个问题,我不确定解决方案是什么。 我有一个 2 列布局(左边是 strit,然后是主要区域)。在主要区域,我有时会有一个次要的 2 栏布局(例如 - 对于新闻部分,那里有一个图标,然后是
我有以下代码: Created Created .clearfix:after{ clear: both; bdy: "."; display
有没有办法CLS单行输出?我不相信 CLS 有任何开关,所以也许更好的问题是: 有什么办法吗 保留所有以前的输出以供重复使用? 或 捕获当前显示的输出(就像通过标记和复制一样)? 我只是想通过实时反馈
我有一个流式布局。当布局足够宽时,一些 div(.one 和 .two)可以全部水平排列在一条线上。 当布局最终被挤压时,右侧 float 的 div (.two) 最终会出现在多行上。有没有一种方法
我面临着一个我真的不知道从哪里开始解决的问题,所以我希望这个问题不要太宽泛。 我正在制作并在屏幕上应用它,我将有一个包含一些信息的矩形(假设它是一个 )并且我需要用另一个矩形覆盖那个矩形,所以当用户
我的 UITableView 跨越 iPhone View 的大小,并有一个 tableHeaderView 保存附加内容。想要标题清晰,表格的其余部分白色,我将表格的背景颜色设置为清晰,并在 Vie
我一直在使用 ImageMagick,但它产生的结果非常模糊。 convert -density 300 ../images/favicons/procensus.svg -background tr
我有手动数据的工作项目,但我想在我的项目中添加 json 解析。我认为我需要帮助。 (必须是实时解析,如果可能的话,新的item添加时会自动释放) 我的 TableView 代码 - (void)sc
我正在制作一个响应式网站。我有 3 个 div (.block),我需要将它们水平放置在一起。 当屏幕足够宽时,这很容易实现。但是,当我使浏览器更窄时,第三个 div (3) 换行到下一行,但我想要的
如何在 Swift 3 中使这个 UITableView 和它的单元格清晰。 我已经完成了前面的线程,但我仍然得到一个白色背景。 正如您从我的代码中看到的,我已经尝试了提到的各种方法: overrid
当我使用 为了显示图标,它在谷歌浏览器中看起来非常清晰锐利。然而,当我在 Firefox 或 Internet Explorer 中打开 svg 时,图标看起来很模糊。 这些浏览器似乎将图标呈现为半像
我是一名优秀的程序员,十分优秀!