OK, gotcha.
you are trying to pass wkbname through the function, which is not necessary.
change GetDirPath_ThisWorkbook from a Function to a Sub, and take the variable out so it looks like this:
Sub GetDirPath_ThisWorkbook()
'Returns the path from a filespec
Dim x As Variant
x = Split(ThisWorkbook.FullName, Application.PathSeparator)
ReDim Preserve x(0 To UBound(x) - 1)
wkbname = Join(x, Application.PathSeparator) & Application.PathSeparator
End Sub
then on workbook sheet
Private Sub Workbook_Open()
GetDirPath_ThisWorkbook
End Sub
...and this should work. You don't have to pass the variable if it is public.
...Also, you know you could do away with the procedures and public variable completely by just using...
Workbooks.Open Filename:=ThisWorkbook.Path & Application.PathSeparator & "Days Cover.xls"
..or if you are going to need the variable for the file path elsewhere and really want it in a public (if this example is not the real problem) then just declare in module and use...
Private Sub Workbook_Open()
wkbname=ThisWorkbook.Path & Application.PathSeparator
End Sub