如果我理解正确,用户会将标签或其他内容添加到文档(例如[Name]
)中,并且您想知道如何将您的班级成员映射到这些标签。要做到这一点,你真的不想循环遍历类成员,而是要通过文档标签找出需要的内容。当您找到“标签”时,将其提交给您的班级以填写空白。
第 1 部分是用于查找标签的解析器……我的 VB6 非常生锈,因此使用伪代码:
Const TagStart = "[" ' "$[" is better as it is not likely to appear
Const TagStop = "]" ' "]$" " " "
' make this a loop looking for tags
i = Instr(docScript, TagStart)
j = Instr(docScript, TagStop)
thisTag = Mid(docScript, TagStart, TagEnd )
' not correct, but the idea is to get the text WITH the Start and Stop markers
' like [Name] or [Address]
' get the translation...see below
docText = MyClass.Vocab(thisTag)
' put it back
Mid(docScript, TagStart, TagEnd) = docText
实际上,最好查找Instr(docScript, "[Name]")
存储在数组中的每个可能的合法标签(即 ),但您可能必须在 2 个循环中执行此操作,以允许多次请求给定标签。
第 2 部分提供来自 MyClass 的替换文本:
Friend Function Vocab(tag as string) As String
Dim Ret as string
Select Case tag
Case "$[NAME]$"
ret = "Name: " & m_Name
' if the caption is part of the "script" then just:
'ret = m_Name
Case "$[ADDRESS]$"
ret = "Address: " & m_Addr
' if not found, return the tag so you can add new Vocab items
' or user can fix typos like '[NMAR]'
Case Else
ret = tag
...
End Select
Return Ret
End Function
第 1 部分中的解析例程也可以是您的类中处理调用私有词汇的文档“脚本”的方法。
编辑
“脚本”的一部分可能如下所示:(
Customer's Name:| $[CUST_FNAME]$ $[CUST_LNAME]$
忽略竖线 (|),它是表格单元格标记)
解析器通过字符串查找“$[”,当它找到时,它会隔离相关的标签$[CUST_FNAME]$
。如果你有一个很大的数字,第一部分(CUST)可以用作路由器将它发送到正确的类。接下来,调用获取翻译的方法:
newText = Cust.Vocab(thisTag)
Cust Class 只查看标签并返回“Bob”或其他内容,解析循环将标签替换为数据:
Customer's Name:| Bob $[CUST_LNAME]$
然后继续,直到所有标签都被替换。
使用“仅”22 个词汇项目,您可以为其创建一个专用类:
Vocab.Translate(tag ...) as string
Case "$[CUST_FNAME]$"
return Cust.FirstName
...或者
您是否正在尝试通过办公室的 DOC 对象找到一种方法?以上更多的是从头开始的文档组合类型的事情。对于办公室,我认为您只需要某种替换文本的集合。
高温高压