求帮忙改个excel的宏代码,实现excel文件合并后sheet名称为原来excel的文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求帮忙改个excel的宏代码,实现excel文件合并后sheet名称为原来excel的文件名相关的知识,希望对你有一定的参考价值。

本人需要合并几个excel文件到一个excel文件,网上找到如下宏代码(测试可行)

Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer

On Error GoTo ErrHandler
Application.ScreenUpdating = False

FilesToOpen = Application.GetOpenFilename _
(FileFilter:="MicroSoft Excel文件(*.xls),*.xls", _
MultiSelect:=True, Title:="要合并的文件")

If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "没有选中文件"
GoTo ExitHandler
End If

x = 1
While x <= UBound(FilesToOpen)
Workbooks.Open Filename:=FilesToOpen(x)
Sheets().Move after:=ThisWorkbook.Sheets _
(ThisWorkbook.Sheets.Count)
x = x + 1

Wend

ExitHandler:
Application.ScreenUpdating = True
Exit Sub

ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
这个宏的作用是合并所选的excel文件 并且sheet表名使用的还是原excel文件的sheet名称 请问如何使新生成的sheet表名换成原excel文件的文件名。

请帮忙的人测试过以后再将代码贴出来。
难道这个 功能没办法实现吗

参考技术A 右键左下角的工作表查看代码,复制以下代码:
Sub 多表多文件合并为多表一文件()

Dim FileArray

Dim X As Integer

Dim strFilePath As String
Dim strFileName As String
Dim intNum As Integer

Application.ScreenUpdating = False

FileArray = Application.GetOpenFilename(FileFilter:="Microsoft Excel文件(*.xls),*.xls", MultiSelect:=True, Title:="合并工作薄")

X = 1

While X <= UBound(FileArray)

Workbooks.Open Filename:=FileArray(X)

'MsgBox (FileArray(X)) 'ThisWorkbook.Sheets.

strFilePath = FileArray(X)
intNum = InStrRev(strFilePath, "\") '使用instrrev函数获取最后文件夹名截至的位置
strFileName = Mid(strFilePath, intNum + 1) '文件名

ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = strFileName

Sheets().Move after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

X = X + 1

Wend

ExitHandler:

Application.ScreenUpdating = True

Exit Sub

errhadler:

MsgBox Err.Description

End Sub

保存后,回到excel,选 视图 =》 宏=》 查看宏=》找到 多表多文件合并为多表一文件,执行这个宏
参考技术B http://zhidao.baidu.com/question/199520077480209085.html?oldq=1&from=evaluateTo#reply-box-1823928843
代码直接可用追问

请帮忙测试下,刚测试了和我贴的代码没什么大的区别,没达到我的要求。

追答

测试毛线。

谁晓得你的文件是啥样子的?

通过java代码实现调用excel当中的宏的操作。

最近做的项目是自动化生成基金的交易合同的操作。然后就想着通过java代码去操作Excel当中的宏按钮,然后生成word版本的合同的操作。

具体的java代码如下:

import org.junit.Assert;
import org.junit.Test;

public class ExcelToolsServiceTest {

    private ExcelToolsService service;

    @Test
    public void testMacro() {
        try {
            String path = "C:/Users/admin.admin-PC.000/Desktop/vb/合并的模板/合同模板.xlsm";
            service = new ExcelToolsService();
            service.execMacro(path, "文本替换.生成文档");
        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail();
        }
    }

}


import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;


public class ExcelToolsService {


public void execMacro(String excelPath, String macroName, Variant... params) throws Exception {


ActiveXComponent excel = null;
Dispatch workbooks = null;
Dispatch workbook = null;
long start = System.currentTimeMillis();
System.out.println(start);

try {
ComThread.InitSTA();


excel = new ActiveXComponent("Excel.Application");
workbooks = excel.getProperty("Workbooks").toDispatch();
workbook = Dispatch.call(workbooks, "Open", excelPath).toDispatch();
if (null == params || params.length < 1) {
Dispatch.call(excel, "Run", new Variant(macroName));
} else {
Dispatch.call(excel, "Run", new Variant(macroName), params);
}
Dispatch.call(workbook, "Save");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != workbook) {// 关闭文档
Dispatch.call(workbook, "Close", new Variant(false));
}
if (null != workbooks) {
Dispatch.call(workbooks, "Close");
}
if (null != excel) {
excel.invoke("Quit", new Variant[] {});
}


// 关闭Excel进程
ComThread.Release();


long end = System.currentTimeMillis();
System.out.println("处理文件[{}]宏[{}],共耗时{}s" + excelPath + macroName
+ ((end - start) / 1000 + 1));
}
}


}

 

至此实现了通过Excel的宏自动化的生成基金的合同的操作。










































以上是关于求帮忙改个excel的宏代码,实现excel文件合并后sheet名称为原来excel的文件名的主要内容,如果未能解决你的问题,请参考以下文章

请VBA高手帮忙,我要在EXCEL中插入一个控件,每次只要点击这个控件就能实现下面的功能

EXCEL VBA防盗代码哪里有问题,求帮忙修改。

请问用vba在excel表里指定内容转成文本一键自动发到指定的微信群上?求帮忙!

如何批处理将多个文件夹下的excel文件(xls,xlsx,csv等)合并成一个文件?

通过java代码实现调用excel当中的宏的操作。

当关闭文档是excel vba为啥宏代码自动消失