使用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“不确定此文件是什么?”?也许是以前的个人档案
'是否将其移动到个人工作簿?如果是,请删除此项。
端接头
您的代码似乎不完整(缺少结束子代码)
),我只包含了部分代码。你需要完整的代码吗?谢谢你,杰森。这起到了很大的帮助,代码现在应该是这样工作的。我的一位同事最初写了这篇文章,所以我很难理解代码,以及如何在个人工作簿中使用它。再次感谢你的帮助。