Okay, so here’s some code to get you started. I based the names on the code you gave, which is why it was helpful. I’ve commented this a lot to try and aid your learning, there are only actually about a dozen lines of code!
Note: this code will likely not work “as is”. Try and adapt it, look at the Object Browser (press F2
in VBA editor) and documentation (add “MSDN” to Google searches) to help you.
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
Use the Macro Recorder to help you learn how to do simple tasks:
http://www.excel-easy.com/vba/examples/macro-recorder.html
Try to then edit the code, and avoid using Select
:
How to avoid using Select in Excel VBA macros
4
solved VBA – copy different template sheets from a workbook, into multiple sheets of another workbook based on criteria on a summary excel sheet