Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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中的宏?_Excel_Vba_Vb.net - Fatal编程技术网

如何使用加载项excel中的宏?

如何使用加载项excel中的宏?,excel,vba,vb.net,Excel,Vba,Vb.net,我开始在excel VBA中编程,我想做的是: 1) 打开新的excel文件(空)时,导入excel加载项 2) 然后,我想使用在该外接程序上实现的宏(在模块中) 3) 该外接程序基本上将多个excel工作表(在指定路径中)合并为一个工作表(我运行宏的工作表) 注意:当不作为外接程序使用时,即单独使用时,它可以工作 4) 当我在一个空的excel文件中运行以下代码时,它不会将其他工作表放在其中。它只是打开它找到的第一个excel文件,没有发生更多的事情 你知道我犯了什么错误吗?谢谢你的建议:)

我开始在excel VBA中编程,我想做的是:

1) 打开新的excel文件(空)时,导入excel加载项

2) 然后,我想使用在该外接程序上实现的宏(在模块中)

3) 该外接程序基本上将多个excel工作表(在指定路径中)合并为一个工作表(我运行宏的工作表) 注意:当不作为外接程序使用时,即单独使用时,它可以工作

4) 当我在一个空的excel文件中运行以下代码时,它不会将其他工作表放在其中。它只是打开它找到的第一个excel文件,没有发生更多的事情

你知道我犯了什么错误吗?谢谢你的建议:)

Sub-GetSheets()
Path=“C:指定的路径”
Filename=Dir(路径&“*.xlsx”)
文件名“”时执行此操作
工作簿。打开文件名:=路径和文件名,只读:=真
对于ActiveWorkbook.Sheets中的每个工作表
Sheet.Copy After:=此工作簿.Sheets(1)
下一页
工作簿(文件名)。关闭
Filename=Dir()
环
端接头

如果从加载项启动代码,
此工作簿
引用加载项文件,但我猜您希望将第一个
活动工作簿
中的所有内容合并为目标

Sub GetSheets()
    Dim fPath As String, fName As String
    Dim destWB As Workbook, currentWB As Workbook
    Dim i As Long

    Set destWB = ActiveWorkbook
    fPath = "C:\specified path\"
    fName = Dir(fPath & "*.xlsx")
    Do While fName <> ""
        Set currentWB = Workbooks.Open(Filename:=fPath & fName, ReadOnly:=True)
        For i = 1 To currentWB.Sheets.Count
            currentWB.Sheets(i).Copy After:=destWB.Sheets(destWB.Sheets.Count)
        Next i
        currentWB.Close SaveChanges:=False
        fName = Dir()
    Loop
End Sub
Sub-GetSheets()
Dim fPath作为字符串,fName作为字符串
Dim destWB作为工作簿,currentWB作为工作簿
我想我会坚持多久
设置destWB=ActiveWorkbook
fPath=“C:\specified path\”
fName=Dir(fPath&“*.xlsx”)
当fName“”时执行
设置currentWB=Workbooks.Open(文件名:=fPath&fName,只读:=True)
对于i=1到currentWB.Sheets.Count
当前WB.Sheets(i).复制后:=destWB.Sheets(destWB.Sheets.Count)
接下来我
currentWB.Close SaveChanges:=False
fName=Dir()
环
端接头
我建议不要对变量使用“Sheet”或“Filename”等内部名称,因此我更改了它们的名称

如果始终在第一张图纸后面进行复制,则图纸顺序将更改。所以我改为在末尾追加


由于
工作表
也包括图表工作表,因此在这种情况下,它比
工作表
更好。要循环它们,我建议使用计数器,因为没有
对象。

你的意思是
Path=“C:\specified Path\”
?是的,我刚刚更改了实际路径,非常感谢上面的代码。它插入订购的床单,这是我不知道怎么做的。。。但有些事我不明白。此代码应该从加载项运行,对吗?我想运行加载项,但不是从那里开始;有,我想从我的工作表运行宏,但在这种情况下我不能,因为我没有访问addin宏的权限,对吗?我为那些愚蠢的问题感到抱歉。--将代码放入模块(不是工作表的代码),通过F4在VBA编辑器中启用属性编辑器,为该模块指定一个单独的名称e。G“AddinCode”,重命名您的第一个代码行
Public Sub GetSheets()
,并通过
AddinCode.GetSheets
将其分配给按钮,或从宏列表手动启动它。如果您需要一个带有按钮的独立加载项菜单,请搜索“自定义UI编辑器”,因为这是一个较长的故事…:)Asger,我已经按照你说的做了(更改名称并公开),但我不想有按钮来获取床单。。。我想运行宏,但此宏不在列表中。您可以将其分配到快速访问工具栏。如果要将其包含在宏列表中,可能会有帮助(不确定)。描述了标记答案。
Sub GetSheets()
    Dim fPath As String, fName As String
    Dim destWB As Workbook, currentWB As Workbook
    Dim i As Long

    Set destWB = ActiveWorkbook
    fPath = "C:\specified path\"
    fName = Dir(fPath & "*.xlsx")
    Do While fName <> ""
        Set currentWB = Workbooks.Open(Filename:=fPath & fName, ReadOnly:=True)
        For i = 1 To currentWB.Sheets.Count
            currentWB.Sheets(i).Copy After:=destWB.Sheets(destWB.Sheets.Count)
        Next i
        currentWB.Close SaveChanges:=False
        fName = Dir()
    Loop
End Sub