Code:
Sub Test()
Dim FName As Variant
FName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xlsx", Title:="Select File To Be Opened")
If FName = False Then
Exit Sub
Else
Workbooks.Open FName
End If
SG_MoveColumns ("Sheet1")
ThisWorkbook.Activate
MsgBox "TWF Done.Check Columns and Data."
Worksheets("Import Macros").Range("F10").Value = "Done"
End Sub
Sub SG_MoveColumns(sSheetname As String)
Dim src As Worksheet
Dim srcLastRow As Double
Dim srcLastCol As Double
Dim tgt As Worksheet
Dim tgtLastRow As Double
Dim dest As Range
Dim i As Long
Dim x As Long
Dim sColLetter As String
Dim stgtColLetter As String
Dim bFoundCol As Boolean
' Switch screen updating back off
Application.ScreenUpdating = False
' Create objects to use
Set src = Worksheets(sSheetname) ' use sheet name passed in to the
srcLastRow = src.Cells(Rows.Count, 1).End(xlUp).Row
srcLastCol = src.Cells(1, Columns.Count).End(xlToLeft).Column
Set tgt = Workbooks("Template - Data.xlsm").Worksheets("Leavers (incl SSMA Prog)")
tgtLastRow = tgt.Cells(Rows.Count, 2).End(xlUp).Row
' Selects the columns to be copied
myColumns = Array("Assignment id")
' Search the source worksheet to find the columns that the required field are in
For i = 0 To UBound(myColumns)
On Error Resume Next
' search the column headers - assume that held in row 1
' set the flag to NOT FOUND
bFoundCol = False
For x = 1 To srcLastCol
On Error Resume Next
If Trim(UCase(myColumns(i))) = Trim(UCase(src.Cells(1, x).Text)) Then
bfound = True
' convert the column number in to a column letter
sColLetter = Col_Letter(x)
' convert the array to the target column letter
stgtColLetter = Col_Letter(i + 1)
' copy of the column data
'Range(sColLetter is the column reference & "2" is the row of that column i.e. 2 omits the header
src.Range(sColLetter & "2:" & sColLetter & srcLastRow).Copy tgt.Range(stgtColLetter & tgtLastRow + 1)
Exit For
End If
Next x
Next i
'Tidy-up created objects
Set src = Nothing
Set tgt = Nothing
' Switch screen updating back on
Application.ScreenUpdating = True
End Sub
Function Col_Letter(lngCol As Long) As String
Dim vArr
' calculate the letter linked to the column
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
' return the letter
Col_Letter = vArr(0)
End Function
Code:
src.Range(sColLetter & "2:" & sColLetter & srcLastRow).Copy tgt.Range(stgtColLetter & tgtLastRow + 1)
I borrowed and tweaked this code but would now like to make an amendment that helps the user track the data being pasted as its being added below populated data.
How do I amend this code to paste in either Blue or Red Font?
Thanks in advance