VBA-根据摘要excel工作表上的条件,将不同的模板工作表从工作簿复制到另一工作簿的多个工作表中
我对VBA(3天经验)相当陌生,我已经浏览了几个论坛,但我找不到解决方案 我有两本作业本。“主”工作簿有一个摘要表,其中a列-名称列表超链接到同一工作簿中的空白表,每个选项卡的标签与该列中的名称相同。B列有1种颜色或颜色组合-有5种选择(红色、蓝色、绿色、蓝色和红色或红色和绿色)。 我有一个单独的模板工作簿,有5个模板页,每个模板页对应于颜色:标记为红色、蓝色、绿色、蓝色和红色或红色和绿色 我想要一个宏,该宏将通过我的“主”工作簿的B列,并根据颜色,从模板工作簿复制相应的模板,然后返回主工作簿。单击相邻a列中的链接,这将使其通过一个空工作表并粘贴模板。应重复此操作以遍历整个列 例如:VBA-根据摘要excel工作表上的条件,将不同的模板工作表从工作簿复制到另一工作簿的多个工作表中,vba,excel,Vba,Excel,我对VBA(3天经验)相当陌生,我已经浏览了几个论坛,但我找不到解决方案 我有两本作业本。“主”工作簿有一个摘要表,其中a列-名称列表超链接到同一工作簿中的空白表,每个选项卡的标签与该列中的名称相同。B列有1种颜色或颜色组合-有5种选择(红色、蓝色、绿色、蓝色和红色或红色和绿色)。 我有一个单独的模板工作簿,有5个模板页,每个模板页对应于颜色:标记为红色、蓝色、绿色、蓝色和红色或红色和绿色 我想要一个宏,该宏将通过我的“主”工作簿的B列,并根据颜色,从模板工作簿复制相应的模板,然后返回主工作簿。
Sub Summary()
Dim rng As Range
Dim i As Long
Set rng = Range("B:B")
For Each cell In rng
If cell.Value <> "Red" Then cell.Offset(0, -1).select
ActiveCell.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Workbooks.Open Filename:= _
"T:\Contracts\Colour Templates.xlsx"
Sheets("Red Template").Select
Cells.Select
Selection.Copy
Windows("Master.xlsx").Activate
ActiveSheet.Range(“A1”).select
ActiveSheet.Paste
Next
End Sub
子摘要()
变暗rng As范围
我想我会坚持多久
设置rng=范围(“B:B”)
对于rng中的每个单元
如果单元格值为“红色”,则单元格偏移量(0,-1)。选择
ActiveCell.Hyperlinks(1).遵循NewWindow:=False,AddHistory:=True
工作簿。打开的文件名:=_
“T:\Contracts\color Templates.xlsx”
图纸(“红色模板”)。选择
单元格。选择
选择,复制
Windows(“Master.xlsx”)。激活
ActiveSheet.Range(“A1”)。选择
活动表。粘贴
下一个
端接头
好的,这里有一些代码让您开始学习。我根据您提供的代码命名,这就是为什么它很有用。为了帮助您学习,我已经对此进行了很多评论,实际上只有十几行代码
注意:此代码可能无法“按原样”工作。尝试并调整它,查看对象浏览器(在VBA编辑器中按F2)和文档(在谷歌搜索中添加“MSDN”)以帮助您
Sub Summary()
' Using the with statement means any code phrase started with "." assumes the With bit first
' So ActiveSheet.Range("...") can now become .Range("...")
Dim MasterBook As Workbook
Set MasterBook = ActiveWorkbook
Dim HyperlinkedBook As Workbook
With MasterBook
' Limit the range to column 2 (or "B") in UsedRange
' Looping over the entire column will be crazy long!
Dim rng As Range
Set rng = Intersect(.UsedRange, .Columns(2))
End With
' Open the template book
Dim TemplateBook As Workbook
Set TemplateBook = Workbooks.Open(Filename:="T:\Contracts\Colour Templates.xlsx")
' Dim your loop variable
Dim cell As Range
For Each cell In rng
' Comparing values works here, but if "Red" might just be a
' part of the string, then you may want to look into InStr
If cell.Value = "Red" Then
' Try to avoid using Select
'cell.Offset(0, -1).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
' You are better off not using hyperlinks if it is an Excel Document. Instead
' if the cell contains the file path, use
Set HyperlinkedBook = Workbooks.Open(Filename:=cell.Offset(0, -1).Value)
' If this is on a network drive, you may have to check if another user has it open.
' This would cause it to be ReadOnly, checked using If myWorkbook.ReadOnly = True Then ...
' Copy entire sheet
TemplateBook.Sheets("Red Template").Copy after:=HyperlinkedBook.Sheets(HyperlinkedBook.Sheets.Count)
' Instead of copying whole sheet, copy UsedRange into blank sheet (copy sheet is better but here for learning)
' HyperlinkedBook.Sheets.Add after:=HyperlinkedBook.Sheets.Count
' TemplateBook.sheets("Red Template").usedrange.copy destination:=masterbook.sheets("PasteIntoThisSheetName").Range("A1")
ElseIf cell.Value = "Blue" Then
' <similar stuff here>
End If
Next cell
End Sub
子摘要()
“使用with语句意味着以“.”开头的任何代码短语都先假定with位
'所以ActiveSheet.Range(“…”)现在可以变成.Range(“…”)
作为工作簿的Dim MasterBook
设置MasterBook=ActiveWorkbook
将HyperlinkedBook设置为工作簿
随书
'将范围限制在UsedRange中的第2列(或“B”)
“在整个柱子上循环将是疯狂的长!
变暗rng As范围
设置rng=Intersect(.UsedRange、.Columns(2))
以
'打开模板手册
Dim TemplateBook作为工作簿
Set TemplateBook=Workbooks.Open(文件名:=“T:\Contracts\color Templates.xlsx”)
'调暗循环变量
暗淡单元格作为范围
对于rng中的每个单元
比较值在这里是有效的,但如果“红色”可能只是一个
'字符串的一部分,那么您可能需要查看InStr
如果cell.Value=“红色”,则
'尽量避免使用Select
'cell.Offset(0,-1)。超链接(1)。Follow NewWindow:=False,AddHistory:=True
“如果是Excel文档,最好不要使用超链接。相反
'如果单元格包含文件路径,请使用
设置HyperlinkedBook=Workbooks.Open(文件名:=cell.Offset(0,-1).Value)
'如果这是在网络驱动器上,您可能需要检查其他用户是否打开了它。
'这将导致它是只读的,请使用myWorkbook.ReadOnly=True进行检查,然后。。。
“复制整张纸
TemplateBook.Sheets(“红色模板”).Copy after:=HyperlinkedBook.Sheets(HyperlinkedBook.Sheets.Count)
'将UsedRange复制到空白表格中,而不是复制整张表格(复制表格更好,但此处用于学习)
'HyperlinkedBook.Sheets.Add after:=HyperlinkedBook.Sheets.Count
'TemplateBook.sheets(“红色模板”).usedrange.copy目的地:=masterbook.sheets(“粘贴到此SheetName”).Range(“A1”)
ElseIf cell.Value=“蓝色”则
'
如果结束
下一个细胞
端接头
使用宏记录器帮助您学习如何执行简单任务:
然后尝试编辑代码,避免使用Select
:
过去一周,我一直在努力让代码正常工作,但运气不佳。我尝试了各种修改,最终给出了不同的错误代码。我遇到的第一个错误是
Set rng=Intersect(.UsedRange,.Columns(2))
“对象不支持此属性或方法”
然后我把它改成只浏览整个专栏,看看它是否有效。
设置rng=范围(“B:B”)
。
当我这样做的时候,它就会通读,我得到一个错误,错误代码是:Set HyperlinkedBook=Workbooks.Open(Filename:=cell.Offset(0,-1).Value)
,错误代码是:运行时错误1004很抱歉,我们找不到24 James.xlsx。是否可能已将其移动、重命名或删除?”
我相信这行代码是假设超链接应该以该名称打开另一个工作簿,但事实并非如此。Sum上的超链接
Sub Summary()
Dim MasterBook As Workbook
Set MasterBook = ActiveWorkbook
With MasterBook
Dim rng As Range
Set rng = Range("B:B")
End With
Dim TemplateBook As Workbook
Set TemplateBook = Workbooks.Open(Filename:="C:\Users\Desktop\Example template.xlsx")
Dim cell As Range
For Each cell In rng
If cell.Value = "Red" Then
cell.Offset(0, -1).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
TemplateBook.Sheets("Red").Copy ActiveSheet.paste
ElseIf cell.Value = "Blue" Then
cell.Offset(0, -1).Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
TemplateBook.Sheets("Blue").Copy ActiveSheet.paste
End If
Next cell
End Sub