提取可能会或可能不会改变的值的最有效方法?

Most efficient way to pull values that may or may not change?

我不是受过训练的程序员,但我在基于 VBA 的系统中协助 developing/maintaining 宏,以加快员工手动执行的各种任务。例如,将数据从一个屏幕复制到另一个屏幕。手动执行此操作可能需要 30 秒到 2 分钟,但使用宏可能需要 2-3 秒。

我们开发的大多数宏都依赖于根据每个字符的 row/column 格式准确提取显示数据(而不是从其相关字段!)的能力。因此,我们使用自定义命令(我们称它为... Instance.Grab),使用行 x/column y 坐标和我们想要的长度从屏幕上拉出我们需要的内容拉。例如,我们通常会从坐标 1,1:

中提取一个 8 字符的字符串
dim PulledValue as String
PulledValue = Instance.Grab(1,1,8) 

如果我 运行 到目前为止我的问题的代码,我们宏的 returned 值将是 "I am not"

不幸的是,我们的系统正在将其显示更改为增加字符长度的处理值。因此,我们正在提取的数据的坐标正在发生显着变化。与其遍历我们的宏并在每个宏中手动更改坐标和长度(如果屏幕格式再次更改则需要重复),我正在转换我们的宏,以便在他们需要拉取所需字符串时,我们可以从中央位置简单地更改所需的 coordinate/length。

我的问题是,处理此任务的最佳方法是什么?我想到了一些想法,但考虑到我有限的编程经验,我想最大限度地提高效率并尽量减少开发它所花费的时间。为此,我们将我需要实现的称为 CoorGrab,在需要数组的地方,创建一个名为 CoorArray 的数组:

1) 创建 Public Function CoorGrab(ThisField As Variant) - 如果我这样做,我会根据我输入的变体简单地列出所有需要的 coordinate/length 集合,然后使用 3 维数组根据需要拉出任何一组。例如:CoorGrab(situationA) 会 return CoorArray(5, 7, 15)。对于我们这些对编程有所了解的人来说,这很容易编辑,但如果我们出于任何原因不在身边,可能会出现问题。

2) 在模块的 public 数组中创建所有需要的坐标。我不太熟悉如何实现这个,但我想我读过一些叫做 public 常量的东西?我有点喜欢这个想法,因为它很简单,但我对使用任何变量或数组作为 public 犹豫不决。

3) 在共享驱动器中创建一个 .txt 文件,其中包含所有需要的数据和用于识别它们的标签,并将其保存到共享驱动器中,当 运行 这些宏时,任何终端都可以访问该共享驱动器。如果我或我们其他精通编程的员工之一不在,这对于非程序员来说是最容易参与和编辑的,但似乎工作量远远超过需要,我担心如果.txt 文件有一个类型或被意外删除。

关于我应该如何进行的任何想法?以上选项之一是否天生比其他选项 better/easier?还是有另一种方法来处理我没有介绍的这种情况?大家可以提供的任何信息或建议将不胜感激!

8/2/15 注意 - 可能应该提到 VBA 用作终端仿真器的一部分,其中包含满足我们部门需求的自定义应用程序。我不管理模拟器或其应用程序,也没有系统管理员权限;我只是在其中使用 create/edit 宏来简化我们的用户处理工作负载的一些方式。在我们做这件事的三个人中,我最不擅长编程,但也是唯一一个可以在更改生效之前更新它们的人。

你的方法还不错,我会:

  • 使用字符串作为标签作为 CoorGrab 的参数
  • Return 范围而不是字符串(因为您可以将单个单元格范围用作文本,并且可以跟踪数据所在的位置)

public CoorGrab(byval label as string) as range

  • 创建一个包含 3 行的 Excel Sheet:1 = 标签,2 = x,3 = y(您可以 如果您需要在另一个 sheet)
  • 中搜索,请添加 4
  • CoorGrab() Find 中的标签 Excel Sheet 和 return X / Y

如果开发人员不可用,他们只需编辑 Excel sheet。 您也可以创建和外包 Excel 文件以读取本地文件外的坐标,或使用它来更新每个人的文件(从服务器读取文件,add/update 服务器文件中的所有标签,但不在本地文件中)