MS访问:从Excel Workbook中选择工作表



我正在MS Access中编写一些代码,然后到达用户需要选择Excel Workbook的哪个工作表,需要对其中执行一些操作。我不知道,此工作表的名称是什么或放置哪个位置。

我正在考虑一种解决方案,该解决方案将向用户显示包含所有表格名称的列表框的表单(作为模态表单)。当用户单击其中的一个表单时,将显示A1:J10范围(因此用户可以选择正确的一个工作表)。确认选择工作表后,它将返回为工作表对象。

每件事都很棒,直到我想将对象变量传递给表单。在OpenArgs中,我只能通过一个字符串。我什至在想一个可以打开此表格的课程,但是传递对象参数仍然没有运气。

我正在尝试避免全球/公共变量。

有什么想法吗?

假设您的对象是WSOBJ,您不能只使用WSOBJ。Name
还可以看一下WSOBJ。 CodeName,这也可能很有趣。

有很多可能性在对象之间发送一些值的可能性。

a )使用全局vars到访问vba模块

Global yourvariable As String

如果您需要一些不同的值可以使用变体,单一等。

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

在所有三种可能的解决方案上,您可以使用带有VAR和值的链条发送多个值,一个示例:

myvar_mutiple="name=John Doe|address=Rua del Percebe 34|location=Madrid|phone=34 91 1234567"

在此示例上,我使用了"管道"(键1上的altgr)char将每个var = value分开然后,在目标过程中只需要分开每对:

splitvar=Split(myvar_multiple,"|")

您可以为每个" splitvar"获得一个像" name = john doe"之类的元素再次使用" ="进行拆分以获得变量一个值。对于每个值,您可以将结果重新分配到本地var。完整代码示例:

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

我用于此代码"多vars"的一些建议: - 始终使用低情况变量或更改以下方式:

paramvars=tmpsplit(0)

paramvars=lcase(tmpsplit(0))

- 如果您需要使用" ="为Value,则可以通过其他替代char更改或搜索第一个" ="表格(我使用此解决方案而不是拆分)

paramvars=trim(lcase(left(splitvar(x),len(splitvar(x))-(len(splitvar(x))-instr(splitvar(x),"="))-1)))
  • 请记住,您可以发送任何值并可以在目标代码上转换。在此示例上,我只使用字符串,因此您可以使用clng或cint等。

在您的解决方案上,从访问中选择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

应该工作

最新更新