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

时间:2015-08-02 05:13:29

标签: database vba function reference cursor-position

我不是一名训练有素的程序员,但我协助在基于VBA的系统中开发/维护宏,以加快员工手动执行的各种任务。例如,将数据从一个屏幕复制到另一个屏幕。手动,任何此类实例可能需要30秒到2分钟,但使用宏,可能需要2-3秒。

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

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

如果我到目前为止在我的问题上运行了该代码,我们宏的返回值将是“我不是”

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

我的问题是,处理此任务的最佳方法是什么?我考虑过一些想法,但是考虑到我有限的编程经验,我希望最大限度地提高效率并最大限度地减少开发它的时间。为了这个,让我们调用CoorGrab需要做的事情,在需要数组的地方,创建一个名为CoorArray的数组:

1)创建公共函数CoorGrab(ThisField As Variant) - 如果我这样做的话,我只是根据我输入的变量列出所有需要的坐标/长度集,然后根据需要使用3来拉出任何一组维数组。例如:CoorGrab(situationA)将返回CoorArray(5,7,15)。这对于我们其中一位对编程有所了解的人来说很容易编辑,但如果我们因为任何原因不在身边,可能会出现问题。

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

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

关于我应该如何进行的任何想法?上述选项之一本身比其他选项更好/更容易吗?还是有另一种处理这种情况的方法,我没有涉及?您可以提供的任何信息或建议将不胜感激!

8/2/15注 - 应该提到的是,VBA被用作终端仿真器的一部分,其中包含用于我们部门需求的自定义应用程序。我不管理模拟器或其应用程序,也没有系统管理员访问权限;我只是创建/编辑其中使用的宏来简化用户处理其工作负载的一些方法。在我们三个这样做的人中,我是最不熟练的编程人员,但也是唯一能够在更改生效之前更新它们的人。

1 个答案:

答案 0 :(得分:0)

你的方式并不是那么糟糕,我会:

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

public CoorGrab(byval label as string) as range

  • 创建一个包含3行的Excel工作表:1 =标签,2 = x,3 = y(你可以 如果您需要在另一张表中搜索,请添加4)
  • CoorGrab()Find Excel工作表中的标签并返回X / Y

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