Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
使用VBA打开另一个带有个人工作簿宏的Excel文件_Vba_Excel - Fatal编程技术网

使用VBA打开另一个带有个人工作簿宏的Excel文件

使用VBA打开另一个带有个人工作簿宏的Excel文件,vba,excel,Vba,Excel,我有一个宏可以格式化报告。我希望在我的个人工作簿中包含此宏,但是代码的一部分引用了第二个工作簿,并将该工作簿中的格式复制到另一个工作簿中。使用个人工作簿时,宏只能部分工作(某些工作表的格式不是我想要的),我认为它不能完全工作,因为我正在引用另一个工作簿。当我自己运行宏时,一切正常。我的代码中是否缺少某些内容 Sub Format() Sheets(Sheets.Count).Move Before:=Sheets(1) Rows("1:1").Select Selecti

我有一个宏可以格式化报告。我希望在我的个人工作簿中包含此宏,但是代码的一部分引用了第二个工作簿,并将该工作簿中的格式复制到另一个工作簿中。使用个人工作簿时,宏只能部分工作(某些工作表的格式不是我想要的),我认为它不能完全工作,因为我正在引用另一个工作簿。当我自己运行宏时,一切正常。我的代码中是否缺少某些内容

Sub Format()
    Sheets(Sheets.Count).Move Before:=Sheets(1)
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp

    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        Rows("1:11").Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Rows("12:12").Select
        Selection.Font.Bold = True
        Selection.AutoFilter
        Cells.Select
        Cells.EntireColumn.AutoFit
        ws.Range("A4") = ws.Name
        Range("A4").Select
        Selection.Font.Bold = True
        On Error Resume Next
        Sheets(ActiveSheet.Index + 1).Activate
        If Err.Number <> 0 Then Sheets(1).Activate
    Next ws


    Range("D13:E222").Select
    Selection.ClearContents

    xlApp.Workbooks.Open FileName:="C:\Automation\Format.xlsm"
    Sheets("All_Leadsheet").Select

    Range("A1:O233").Select
    Selection.Copy
    ActiveWorkbook.Activate
    Range("A1:N471").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Range("A1").Select


    Columns("A:F").Select
    Selection.ColumnWidth = 40
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlBottom
        .WrapText = True '!!!!!!!!!!!!!!!!!!!!!
        .Orientation = 0
    End With

    Windows("Format.xlsm").Close savechanges:=False
子格式()
工作表(Sheets.Count).在之前移动:=工作表(1)
行(“1:1”)。选择
选择。删除移位:=xlUp
将ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个ws
ws.Activate
行(“1:11”)。选择
选择。插入Shift:=xlDown,CopyOrigin:=xlFormatFromLeftOrAbove
行(“12:12”)。选择
Selection.Font.Bold=True
自动筛选
单元格。选择
Cells.EntireColumn.AutoFit
ws.Range(“A4”)=ws.Name
范围(“A4”)。选择
Selection.Font.Bold=True
出错时继续下一步
工作表(ActiveSheet.Index+1)。激活
如果错误编号为0,则为工作表(1)。激活
下一个ws
范围(“D13:E222”)。选择
选择.ClearContents
xlApp.Workbooks.Open文件名:=“C:\Automation\Format.xlsm”
工作表(“所有工作表”)。选择
范围(“A1:O233”)。选择
选择,复制
活动工作簿。激活
范围(“A1:N471”)。选择
Selection.Paste特殊粘贴:=xlPasteFormats,操作:=xlNone_
SkipBlanks:=False,转置:=False
范围(“A1”)。选择
列(“A:F”)。选择
Selection.ColumnWidth=40
有选择
.HorizontalAlignment=xlGeneral
.垂直对齐=xl底部
.WrapText=真“!!!!!!!!!!!!!!!!!!!!!
.方向=0
以
Windows(“Format.xlsm”)。关闭保存更改:=False

我认为您遇到的主要问题是,您引用了sheets()和range(),但没有指定它们的位置,因此VBA在猜测。我猜VBA是在猜测个人工作簿和它的工作表,而不是你想在上面执行操作的工作簿

我不得不猜测你在这里所做的一些事情,但你应该从我的更改中吸取的主要东西是,在对单元格进行更改之前,你不必选择单元格。我猜这是因为你录制了宏(顺便学习的好方法)。但这会降低宏的速度,只有在实际需要时才选择宏。这实际上也适用于工作表,您不必让工作表处于活动状态才能对其进行更改。希望这有帮助

Sub Format()

Dim wb As Workbook

Set wb = ActiveWorkbook

wb.Sheets(Sheets.Count).Move Before:=Sheets(1)
wb.Sheets("not sure which sheet you want").Rows("1:1").Delete 'Shift:=xlUp

Dim ws As Worksheet
For Each ws In wb.Worksheets
    ws.Activate
    ws.Rows("1:11").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    With ws.Rows("12:12")
        .Font.Bold = True
        .AutoFilter
    End With
    ws.Cells.EntireColumn.AutoFit
    ws.Range("A4") = ws.Name
    Range("A4").Font.Bold = True
    'On Error Resume Next 'Careful with these, all your errors will now just resume next
    'Sheets(ActiveSheet.Index + 1).Activate 'Next ws takes care of this, unless you are wanting to skip two worksheets
    'If Err.Number <> 0 Then Sheets(1).Activate
Next ws

Set ws = wb.Sheets(1)
ws.Activate

ws.Range("D13:E222").ClearContents

xlApp.Workbooks.Open Filename:="C:\Automation\Format.xlsm" 'Where is xlApp set at?


Set ws = Sheets("All_Leadsheet")

ws.Range("A1:O233").Copy
'ActiveWorkbook.Activate 'active workbook should already be active
ws.Range("A1:N471").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'ws.Range("A1").Select


With ws.Columns("A:F")
    .ColumnWidth = 40
    .HorizontalAlignment = xlGeneral
    .VerticalAlignment = xlBottom
    .WrapText = True '!!!!!!!!!!!!!!!!!!!!!
    .Orientation = 0
End With

Windows("Format.xlsm").Close savechanges:=False 'Not sure what this file is? Perhaps the individual file before
                                                'moving it to personal workbook? If so delete this.
End Sub
子格式()
将wb设置为工作簿
设置wb=ActiveWorkbook
wb.Sheets(Sheets.Count).在之前移动:=工作表(1)
wb.Sheets(“不确定要哪张表”)。行(“1:1”)。删除'Shift:=xlUp
将ws设置为工作表
对于wb.工作表中的每个ws
ws.Activate
ws.Rows(“1:11”)。插入Shift:=xlDown,CopyOrigin:=xlFormatFromLeftOrove
带ws.行(“12:12”)
.Font.Bold=True
.自动过滤器
以
ws.Cells.EntireColumn.AutoFit
ws.Range(“A4”)=ws.Name
范围(“A4”).Font.Bold=True
“下一步出错时继续”小心这些,您的所有错误都将在下一步继续
'Sheets(ActiveSheet.Index+1).Activate'Next ws会处理这个问题,除非您想跳过两个工作表
'如果错误编号为0,则为工作表(1)。激活
下一个ws
设置ws=wb.Sheets(1)
ws.Activate
ws.Range(“D13:E222”).ClearContent
xlApp.Workbooks.Open文件名:=“C:\Automation\Format.xlsm”'xlApp设置在哪里?
设置ws=工作表(“所有工作表”)
ws.Range(“A1:O233”)。副本
“ActiveWorkbook.Activate”活动工作簿应已处于活动状态
ws.Range(“A1:N471”).Paste特殊粘贴:=xlPasteFormats,操作:=xlNone_
SkipBlanks:=False,转置:=False
'ws.Range(“A1”)。选择
使用ws.Columns(“A:F”)
.ColumnWidth=40
.HorizontalAlignment=xlGeneral
.垂直对齐=xl底部
.WrapText=真“!!!!!!!!!!!!!!!!!!!!!
.方向=0
以
Windows(“Format.xlsm”)。关闭savechanges:=False“不确定此文件是什么?”?也许是以前的个人档案
'是否将其移动到个人工作簿?如果是,请删除此项。
端接头

您的代码似乎不完整(缺少
结束子代码)
),我只包含了部分代码。你需要完整的代码吗?谢谢你,杰森。这起到了很大的帮助,代码现在应该是这样工作的。我的一位同事最初写了这篇文章,所以我很难理解代码,以及如何在个人工作簿中使用它。再次感谢你的帮助。