I'm just a novice (and self taught).
Captions and TextBoxs contain only Strings. Math requires numbers.

Convert numerical Strings into Numbers with CLng, CDbl, CCur, and a few others. Generally, CDble will work in most cases where an Integer or "long integer" is not required.

Personally, I would add an additional step, that recorded, multiplied, and summed all Numerical values before formatting and applying those values to any String valued Controls, Probably with an array.

Something similar to
Dim SalesDetails
Const Q as Long = 2 'Makes code easier to comprehend.
Const P As Long = 1

Private Sub UserForm_Initialize()
  Redim Sales Details(1 to 8, 1 to 2)
End Sub

Private Sub Qty1_Change()
Dim LngTotalValue As Variant 'Result of your one line declaration
Dim P1 as Variant
DimP2 As Double

With Me 'Me is the UserForm, in this case
   If .Qty1.Text = "" Then
   .Controls("TotalPrice1").Caption = ""
    Else
  SalesDetails(1, P) = CDble((.PurPrice1) 'Not sure of this syntax, and not going to investigate
  SalesDetails(1, Q) = CDble(.Qty1)
   .TotalPrice1.Caption =  Format(SalesDetails(1, P) * SalesDetails(1, Q), "#,###.##")
Etc
etc
etc

Private Sub Qty2_Change()
'Use 2 vice 1 in this sub
  SalesDetails(2, P) = CDble((.PurPrice2)
  SalesDetails(2, Q) = CDble(.Qty2)
  .TotalPrice2.Caption =  Format(SalesDetails(2, P) * SalesDetails(2, Q), "#,###.##")
Etc
etc
etc


For 1 = 1 to 8
    TotalValue = TotalValue + SalesDetails(i, P) * SalesDetails(i, Q)
Next