MS Access:从Excel工作簿中选择工作表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MS Access:从Excel工作簿中选择工作表相关的知识,希望对你有一定的参考价值。
我正在MS Access中编写一些代码,我达到了用户需要选择Excel工作簿的哪个工作表需要执行某些操作的程度。我不知道,这个工作表的名称是什么,或者它放在哪个位置。
我正在考虑一个解决方案,它将向用户显示一个表单(作为模态表单),其中列表框包含所有工作表名称。当用户单击其中一个表单时,将显示A1:J10范围(因此用户可以选择正确的一个工作表)。确认选择的工作表后,它将作为工作表对象返回。
每件事都很棒,直到我想将一个对象变量传递给表单。在openArgs中,我只能传递一个字符串。我甚至考虑过一个会打开这个表单的类,但是传递对象参数仍然没有运气。
我正在努力避免全局/公共变量。
有任何想法吗?
假设你的对象是wsObj,你不能只使用wsObj.Name
吗?
另外看看wsObj.CodeName
,这也可能很有趣。
在对象之间发送一些值有很多种可能性。
A)将Global vars用于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
我用于此代码“多个变量”的一些建议: - 始终使用Low Case变量或更改此:
paramvars=tmpsplit(0)
通过
paramvars=lcase(tmpsplit(0))
- 如果您需要在值中使用“=”,您可以通过其他替代字符更改或搜索左侧的第一个“=”表单(我使用此解决方案而不是拆分)
paramvars=trim(lcase(left(splitvar(x),len(splitvar(x))-(len(splitvar(x))-instr(splitvar(x),"="))-1)))
- 请记住,您可以发送任何值,并可以转换目标代码。在此示例中,我只使用String,因此您可以使用cLng或cInt等。
在您的解决方案中从Access选择Excel on Excel我认为有更好的选择。
在表单模块中,您可以将属性声明为对象,然后在加载后设置该属性。所以在表单模块中
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
应该工作
以上是关于MS Access:从Excel工作簿中选择工作表的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个 Excel 工作簿中的多个工作表合并成一个工作表?
使用 Python(和 DataNitro)将单元格从一个 Excel 工作簿中的特定工作表复制到另一个 Excel 工作簿中的特定工作表