Dnereb 发表于 2007-11-30 16:19:54

用于创建模块的代码

我知道这个“可能”听起来有点奇怪,但是有人写过创建新子模块的代码吗?
例如,如果我让用户做一些事情,比如挑选点,我希望模块1将这些点存储在一个变量中,然后可能使用该信息来编写一个新模块、模块2等。
这有点奇怪,但在某种意义上,您可以让用户实际为您创建代码,具体取决于他们的输入或事件。
有人有这种事情的例子吗?
谢谢
马克
**** Hidden Message *****

Dnereb 发表于 2007-11-30 16:58:23

自我修改代码是一种黑色艺术,一般来说,在lisp、python等脚本语言中更容易。
然而,几乎没有什么是不可能的,所以我首先参考 Microsoft Visual Basic for Applications Extensibility 库(例如,C:\ Program Files \ Common Files \ Microsoft Shared \ VBA \ VB a6 \ vbe 6 ext。OLB),然后检查对象模型(F2)。
例如,您可能最终会玩这样的东西-
Dim component As VBComponent, _
    subDef    As String, _
    QT      As String
   
QT = Chr$(34)
   
subDef = "Sub Woot ()" & vbCrLf & vbCrLf & _
         vbTab & "Call Msgbox ( " & QT & "Woot!" & QT & ") " & vbCrLf & vbCrLf & _
         "End Sub"
Set component = VBE.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule)
component.CodeModule.AddFromString subDef
为了简洁/懒惰,我忽略了许多细节,包括但不限于检查您是否已经添加了代码模块、模块命名、调用技术...雅达。
玩得开心,但不要伤害任何小动物。

Dnereb 发表于 2007-11-30 17:41:01

如果你加载一个引用库的dvd项目,你不必重新引用这些库;它们是,嗯,粘性的。

Dnereb 发表于 2007-11-30 17:51:27

我的两分钱...
我不明白为什么你需要创建新模块来存储数据以创建新数据。
文本文件,Excel工作表,Access数据库,Sql Express数据库,Oracle数据库,MS SQl数据库甚至二进制文件都应该同样完成这项工作,并且在数据库的情况下,检索数据也应该更容易,更快捷。
如果你想把数据存储在内存中,供以后使用集合、数组、字典,最明显的方法。
在这之后咆哮了一个问题....您能解释一下为什么模块中的存储是真正需要的,以及它将带来什么优势。

Dnereb 发表于 2007-11-30 18:01:14


嗨,Dnerb,
你的咆哮实际上对
非常有用,我同意;我相信有更好的方法来存储数据并稍后检索它。如果你阅读了我的帖子,就在MP的上面,我确实说过我可以使用VBScript Textstream方法来写入文本文件,然后在需要时读取。此外,我从未尝试过VBA中任何东西的字典对象方法,你有没有一个例子来说明这如何有助于存储数据和检索数据?
我想做这样的事情的原因还不完全清楚。
我只是有一些想法。
我看到有人使用The(wtf)Writto File方法编写了一个LISP例程,他们正在从用户选择的位置检索点和其他一些数据,然后将该信息写入另一个(可能是. txt)文件并用它创建一个新的Lisp文件。
所以,本质上,用户实际上是在为他创建Lisp例程(动态)。
我只是觉得这很有趣,可能对某些事情很有用。
同样,Lisp更基于ASCII,并且可能比VB更适合做这些事情。
我只是想把它扔出去,看看人们有什么要说的。
我们在VB中也有动态数组和Redim等方法
所以,做用户创建模块的整个想法可能根本不是一个好主意。
想法?
谢谢你,
Mark

Dnereb 发表于 2007-11-30 18:06:46

我想我没有意识到这个线程的动力。如果您谈论的只是数据持久性,VB/A完全能够满足您的需求。
除了流(顺序)、随机和二进制文件I/O之外,您还可以利用ADO等人等外部库。
根据您的描述,一个简单的csv文件就足够了。
就像我之前说的,“虽然很有趣,但我认为替代方法可以实现与自修改代码类似的结果”。

Dnereb 发表于 2007-12-2 15:30:35


MP
所以你是说,将输入流式传输到csv文件?
我想更好地总结需求或问题(我认为你们正在解决它)基本上是数据采集和存储。
所以,让我们以点为例:
我们从用户那里收集选择的点数据,然后我们意识到我们可能希望在以后使用该信息;我们如何保存该信息直到需要它?同样,它可以流式传输到csv文件或类似的文件中,但可能有一种方法可以让VBA长期保存它;然后我们可以在需要时调用那个变量或任何保存信息的东西。?
Mark

Dnereb 发表于 2007-12-3 09:36:52

通过“长期”,您的意思是在AutoCAD当前会话的后期,还是从现在开始的三周内?

Dnereb 发表于 2007-12-3 09:46:47

标记多少点?
是否有任何相关数据必须伴随点数据,例如描述符、日期等?
数据绘图是否以中心为中心?
以用户为中心?
以项目为中心?
以客户为中心?
您预计数据量会及时增长吗?
增长多少?
数据会被其他应用程序使用吗?例如数据收集器、全站仪等。阅读“数据格式应该尊重现有的行业标准吗?”
你确定吗?
...
/好奇心害死了猫

Dnereb 发表于 2007-12-3 10:59:55

嗨,Bob,
是的,我确实没有固定的时间,但3周是一个很好的时间范围。
绝对不是在这个环节。一旦我们关闭了ACAD,变数就被清除了,对吗?
因此,我希望有一种方法可以无限期地保存数据。
然后,我可以说:
使用保存的数据
让我们在当前模块或项目中使用它。
标记
页: [1] 2
查看完整版本: 用于创建模块的代码