这里人多发个EXCEL VBA的问题

  • w
    wxh5
    工作的关系,一直用EXCEL,半年前想学Python,未入门,想不通这个怎么交互,用EXCEL很容易实现,因为本身一些数据就是写在表里的

    用EXCEL VBA的兄弟不知道多不多?现在碰到个问题,百度的时候也不知道设什么关键词,在这里详细说一下,希望有大神能指导一下


    两个sheet,在sheet1里点开form1后,通过这个form1再打开form2,同时unload form1,同时把sheet2设为激活,操作一番之后,在再unload form2


    这个时候,sheet2处于激活状态,但无法直接在sheet2进行复制、删除操作,可以修改内容,这点很奇怪。如果想恢复sheet2的操作,必须手动切换至sheet1,再切换至sheet2,这时sheet2才能正常。


    是什么原因造成这个现象的?如何在关掉form2之后,能直接在sheet2进行操作?


    上传个测试文件试一下,有闲的朋友吗?test.xlsm(20.77 KB)
  • 围路人甲城
    这大半夜的 来去匆匆
  • w
    wxh5
    回复2#围路人甲城

    想不出原因,又不知道用什么关键词搜索的感觉很不好
  • 奸人坚
    看了下你的vb代码,我记得编辑内容的话需要先把Excel文件变成对象才能编辑的,你没有实例化的Excel对象
  • p
    ptcptr
    一个方法,点录制宏,然后把要操作的步骤操作一遍,再点编辑宏,就看到vba源码了
  • S
    SevenYearItch
    focus,印象中除了激活,还要把焦点设置到active那个对象。具体录制宏,再看看宏代码。
  • w
    wxh5
    谢了楼上两位!明天再试,已经躺下了
  • k
    keshouz
    还是python好用,推荐xlwings和pandas库,vba还是太复杂了 iOS fly ~
  • 挺能说的
    python图形化交互确实是个问题
  • x
    xiaomao88
    为啥要换着激活sheet呢,直接带表名操作不就好了么。HiPDA·NG
  • w
    wxh5
    试着一下在退出form2的时候,直接点击录制宏,没想到提示不能记录

    不管提示直接操作完成后,代码里多了一个模块2,双击,整个excel非法退出了
  • w
    wxh5
    回复12#xiaomao88


    想弄一个工程管理,sheet1是所有工程的具体状态,form1是输入这些信息的界面,输完存在sheet1。
    然后在form1弹出检索的窗口form2,限定条件,在sheet2生成检索表。

    本意是在检索完成后,直接在sheet2复制关键字,回sheet1搜索的

    现在倒好,在sheet2无法直接复制,需要先回sheet1,再切换回sheet2,复制,再回sheet1去搜索。

    现在尝试一下加焦点,代码不熟,去百度一下
  • w
    wxh5
    焦点好像是对控件而言……
  • 围路人甲城
    下载了测试文件,退出窗口2后,对表2的操作一切正常。
  • 围路人甲城
    本意是在检索完成后,直接在sheet2复制关键字,回sheet1搜索的

    现在倒好,在sheet2无法直接复制,需要先回sheet1,再切换回sheet2,复制,再回sheet1去搜索。

    另外“复制关键字”是啥意思?vbag还需要复制?直接赋值不就行了?
  • s
    shiyiii
    貌似表2没被激活啊,不是被操作的表,表1有虚框,是符合条件的框的话,就是表不对
  • s
    shiyiii
    msgbox下现在操作的是哪个表应该就清楚了吧
  • w
    wxh5
    回复19#shiyiii

    是的,复制后是表1的,现在有啥办法在表2操作?
  • w
    wxh5
    回复17#围路人甲城

    退出form2之后进行一般excel操作,不是都在表单里操作的
  • w
    wxh5
    回复16#围路人甲城

    这么神奇?我是2016,你是什么版本??
  • 宋思明
    一个感觉,不一定对,你这个需求可能用access更容易实现
  • s
    shiyiii
    回复20#wxh5

    应该就是form2选中激活下表2吧,最不怕搞错表的操作方法就是直接用表名操作表吧,当然代码麻烦点
  • w
    wxh5
    回复24#shiyiii

    试过了啊,没用你帮我看看??test代码很简单,就1句,我自己实验的时候加了active也没用
    form2的退出按钮代码如下:

    Private Sub CommandButton1_Click()

    Unload UserForm2
    Sheet2.Activate

    End Sub


    没用
  • s
    shiyiii
    回复25#wxh5

    只有手机一台在猜,有电脑就试了,直接表名也不行吗?这就邪乎了
  • w
    wxh5
    回复26#shiyiii


    表名也是sheet2,因为是测试用的,没有自己乱取名字
    感觉在用form1唤出form2之后,再关掉form2,这时当前的活动表就有点怪怪了
  • w
    wxh5
    回复23#宋思明


    重来没用过这个,再说年纪也不小了,
  • 宋思明
    [quote]回复 宋思明


    重来没用过这个,再说年纪也不小了,
    wxh5 发表于 2020-6-23 15:15[/quote
    我也没用过,买了本书上班偷偷看看, access的好处就是可以把几张表关联起来,可以有一个单独的输入输出或者查询的窗口
  • s
    shiyiii
    回复29#宋思明

    什么书呢
  • w
    wxh5
    今天乱百度,没几下就找到了一个曲线解决方案:

    把窗体设为无模式:

    1.有模式:此模式下,只显示本窗体,只能在本窗体使用控件,无法选择其他窗体或者工作表对象。默认ShowModal属性为TRUE,也就是有模式。
    2.无模式 无模式下,可以同时显示多个窗体,能在多个窗体间切换(其他窗体也必须是无模式),能自由选择工作表对象,例如复制单元格内容等操作。

    在无模式下可以同时操作表格的内容。默认是有模式