The code posted has multiple issues:
- Worksheetis not a valid object - you need to use- Worksheets.
- .lenis not a property of a Range object.
- Even in .lenwas a property of a Range, you would need a
de-reference operator (aka '.') in here:Range("A"&x)len(Left,"-")
- If you intend to use the function Len(), it only takes one argument.
- You apparently are trying to loop, but you need to use either a For
or For Each loop - it won't loop automatically when you increment x
at the bottom of the sub.
- Rightis a function, but you're calling it without arguments and they are not optional.
- Similarly, Leftis a function, but you're also calling it without
the required arguments.
- totallenis not declared anywhere, so- Len(totallen)will assume
that totallen is a Variant (default for undeclared variables), then
cast it to a String, and then always return 0 because it has never
been given a value.
- Anything else I may have missed.
The solution is to use the InStr function.  It returns the location in a string of a given sub-string.
Sub xn()
    Dim x As Long
    Dim sheet As Worksheet
    Set sheet = ActiveWorkbook.Worksheets("Sheet1")
    For x = 1 To sheet.Range("A" & sheet.Rows.Count).End(xlUp).Row
        sheet.Cells(x, 2) = InStr(1, sheet.Cells(x, 1), "-") - 1
    Next x
End Sub
I'd also recommend taking a look at the MSDN article on Looping Through a Range of Cells (2003 vintage, but still valid), and Error Finding Last Used cell In VBA.