Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA在单击“保存”按钮后执行操作_Excel_Vba - Fatal编程技术网

Excel VBA在单击“保存”按钮后执行操作

Excel VBA在单击“保存”按钮后执行操作,excel,vba,Excel,Vba,我一直试图将这一点与我对VBA的有限理解结合起来,但所有的点似乎都排成一行 我有两个SharePoint环境。一个供公司内部使用,另一个供外部访问 有一个工作簿在内部环境中不断更新。当那本工作手册被保存时,我想 完成保存操作 删除标题为“红色”、“蓝色”和“绿色”的列 另存为“Newbook.xlsx”到外部sharepoint(如果文件存在) 保持原始工作簿处于打开状态 必须将书的原始副本原封不动地保存为正常副本,并将新副本保存到特定列以下 我尝试使用添加到“此工作簿”部分的以下代码: 其中模

我一直试图将这一点与我对VBA的有限理解结合起来,但所有的点似乎都排成一行

我有两个SharePoint环境。一个供公司内部使用,另一个供外部访问

有一个工作簿在内部环境中不断更新。当那本工作手册被保存时,我想

  • 完成保存操作
  • 删除标题为“红色”、“蓝色”和“绿色”的列
  • 另存为“Newbook.xlsx”到外部sharepoint(如果文件存在)
  • 保持原始工作簿处于打开状态
  • 必须将书的原始副本原封不动地保存为正常副本,并将新副本保存到特定列以下

    我尝试使用添加到“此工作簿”部分的以下代码:

    其中模块1已创建并读取

    Sub Save()
    ActiveWorkbook.SaveAs ("C:\Users\me\Desktop\Test 1")
    
    End Sub
    
    我得到一个循环,它只是不断地保存一次又一次,不会结束。我还尝试使用此位代替save函数(测试删除行)

    是的,它确实删除了我想要删除的列,但原始图书上的保存操作没有完成


    我想我已经完成了大部分工作,我似乎无法把它带回家。

    在将其保存为另一个工作簿并立即启用之前,您需要将事件禁用为
    Application.EnableEvents=False
    。我认为这就是您进入循环的原因,因为您再次在
    Workbook\u AfterSave
    事件开始时进入循环。
    Sub Save()
    ActiveWorkbook.SaveAs ("C:\Users\me\Desktop\Test 1")
    
    End Sub
    
    dim a as long, w as long, vDELCOLs as variant, vCOLNDX as variant
    vdelcols = array("Blue","Red","Green")
    with thisworkbook
        for w=1 to .worksheets.count
            with worksheets(w)
                for a=lbound(vdelcols) to ubound(vdelcols)
                    vcolndx=application.match(vdelcols(a), .rows(1), 0)
                    if not iserror(vcolndx) then
                        .columns(vcolndx).entirecolumn.delete
                    end if
                next a
            end with
        next w
    end with