Greetings Liam,
In short, "Cost Centre" is not being found. Thus. .Column creates an error, as Rows(1).Find(what:="Cost Centre") is not returning a Range Object.
Try checking to see if the .Find returns a Range Object before referencing the Object's properties. Does this seem sensible?
Option Explicit
Sub example()
Dim intColNum(0 To 2) As Integer, intArrayPos As Integer, n As Long
Dim rngFound As Range
'// Ignore errors and handle in-line for the moment //
On Error Resume Next
For n = 0 To 2
'// Attempt to set a reference to the cell that .find locates. //
Set rngFound = Rows(1).Find(what:=Array("Positions", "Pos Id", "Cost Centre")(n), LookAt:=xlWhole)
'// If the value is found...
If Not rngFound Is Nothing Then
intColNum(n) = rngFound(1).Column
'// Else... (choose some value or 0 to note that the value was not found)
Else
intColNum(n) = 9999
End If
Next
'// Turn error checking back on, so we aren't later mystified by unknown errors. //
On Error GoTo 0
For intArrayPos = LBound(intColNum) To UBound(intColNum)
MsgBox intColNum(intArrayPos)
Next intArrayPos
End Sub