我在MS Access中编写了一些代码,并且达到了用户需要选择Excel工作簿的哪个工作表需要执行某些操作的程度。我不知道,这个工作表的名称是什么,或者它放在哪个位置。
我正在考虑一个解决方案,它会向用户显示一个表单(作为模态表单),其中包含所有工作表名称的列表框'。当用户单击其中一个表单时,将显示A1:J10范围(因此用户可以选择正确的一个工作表)。确认选择的工作表后,它将作为工作表对象返回。
每件事都很棒,直到我想将一个对象变量传递给表单。在openArgs中,我只能传递一个字符串。我甚至考虑过一个可以打开这个表单的类,但是传递对象参数仍然没有运气。
我试图避免全局/公共变量。
有什么想法吗?
答案 0 :(得分:0)
假设你的对象是wsObj,你不能只使用wsObj。Name
吗?
另请参阅wsObj。CodeName
,这也可能很有趣。
答案 1 :(得分:0)
在表单模块中,您可以将属性声明为对象,然后在加载后设置该属性。所以在表单模块中
Option Explicit
Private myObj as object
Property Set DesiredWorksheet(o as object)
set myobj = o
End
然后在你的代码中
Load myform
set myform.desiredworksheet = wsObj
myform.show
啊,抱歉我写的是Excel不能访问!!!
Docmd.openform f
f.desiredworksheet = ws.obj
docmd.openform f, windowmode:=acdialog
应该工作
答案 2 :(得分:0)
在对象之间发送一些值有很多种可能性。
A )将全局变量用于ACCESS Vba模块
Global yourvariable As String
如果你需要一些不同的值,可以使用Variant,Single等。
B )使用Windows注册 为了节省价值:
SaveSetting "yourprojectname", "Settings", "yourvariable", yourvalue
要检索价值:
retvalue = GetSetting("yourprojectname", "Settings", "yourvariable", "your_default_value_if_not_exist")
C )将OpenArg用于Open Form命令过程
DoCmd.OpenForm "stDocName", acNormal, "filter_if_needed", "stlinkcriteria", acFormEdit, acWindowNormal, "arguments_forOpenArgs"
目的地表格
Private Sub Form_Open(cancel as integer)
your_args=Me.OpenArgs
在所有三种可能的解决方案中,您可以使用带有变量和值的链来发送多个值,例如:
myvar_mutiple="name=John Doe|address=Rua del Percebe 34|location=Madrid|phone=34 91 1234567"
在这个例子中,我使用" pipe" (键1上的AltGr)char用于分隔每个var = value 然后在目标程序上只需要拆分每对:
splitvar=Split(myvar_multiple,"|")
通过这个,您可以获得每个" splitvar"像" name = John Doe" 再次与" ="分开获得变量值。对于每个值,您可以将结果重新分配给本地变量。 完整代码示例:
if me.OpenArgs<>"" then
splitvar=Split(me.OpenArgs,"|")
for x=0 to ubound(splitvar)
tmpsplit=Split(splitvar(x),"=")
paramvars=tmpsplit(0)
paramvalue=tmpsplit(1)
select case paramvars
case "name"
stname=paramvalue
case "address"
straddress=paramvalue
case "location"
strlocation=paramvalue
case "phone"
strphone=paramvalue
end select
next
end if
我用于此代码的一些建议&#34;多个vars&#34;: - 始终使用Low Case变量或更改此:
paramvars=tmpsplit(0)
通过
paramvars=lcase(tmpsplit(0))
- 如果您需要使用&#34; =&#34;进入价值,您可以通过其他替代字符更改或搜索第一个&#34; =&#34;表格左(我使用此解决方案而不是拆分)
paramvars=trim(lcase(left(splitvar(x),len(splitvar(x))-(len(splitvar(x))-instr(splitvar(x),"="))-1)))
在您的解决方案中选择来自Access的Excel表格,我认为有更好的选择。