Solved

Type Mismatch on Variant

Posted on 2011-02-26
4
771 Views
Last Modified: 2012-05-11
Hello,
I am getting a "Type Mismatch" error on the line:

Margin = (Total - TotalCost) / Total

All three variables are defined as Variant.

Thanks,

Ron
Public Sub StoreMargin(BegDate1, EndDate1, Cell1)

Dim conSQL, conSQLCost As ADODB.Connection
Dim strSQL, strSQLCost As String
Dim i As Integer
Dim Total, TotalCost, Margin As Variant
Dim rs, rsCost As ADODB.Recordset
Total = 0
i = 0

Set conSQL = New ADODB.Connection
conSQL.Open "Server=THEDUB;DRIVER=SQL Server;Database=***;Password=***;User ID=***"
   
strSQL = "Select Sum(PUBLIC_TransactionEntry.Quantity * PUBLIC_TransactionEntry.price) AS sum_sales" & _
  " From PUBLIC_Transaction Inner Join" & _
  " PUBLIC_TransactionEntry On PUBLIC_Transaction.TransactionNumber =" & _
  " PUBLIC_TransactionEntry.TransactionNumber Inner Join" & _
  " PUBLIC_Item On PUBLIC_TransactionEntry.ItemID = PUBLIC_Item.ID Inner Join" & _
  " PUBLIC_Department On PUBLIC_Item.DepartmentID = PUBLIC_Department.ID" & _
  " WHERE PUBLIC_Department.Name NOT LIKE '%Gift%Card%' " & _
  " AND PUBLIC_Transaction.Time >= (" & BegDate1 & ")" & _
  " AND PUBLIC_Transaction.Time <  (" & EndDate1 & ")" & _
  " AND PUBLIC_Department.Code NOT Like 'E/%'" & _
  " AND PUBLIC_Department.code NOT Like 'T/%'"
    
  Set rs = New ADODB.Recordset
  rs.Open strSQL, conSQL, adOpenStatic, adLockOptimistic
     
  If Not rs.EOF Then
    Total = rs.GetRows(-1, 1, "sum_sales")
  Else
    Total = 0
  End If

  
Set conSQLCost = New ADODB.Connection
conSQLCost.Open "Server=***;DRIVER=SQL Server;Database=***;Password=***;User ID=***"

strSQLCost = "Select Sum(PUBLIC_TransactionEntry.Quantity * PUBLIC_TransactionEntry.cost) AS sum_cost" & _
  " From PUBLIC_Transaction Inner Join" & _
  " PUBLIC_TransactionEntry On PUBLIC_Transaction.TransactionNumber =" & _
  " PUBLIC_TransactionEntry.TransactionNumber Inner Join" & _
  " PUBLIC_Item On PUBLIC_TransactionEntry.ItemID = PUBLIC_Item.ID Inner Join" & _
  " PUBLIC_Department On PUBLIC_Item.DepartmentID = PUBLIC_Department.ID" & _
  " WHERE PUBLIC_Department.Name NOT LIKE '%Gift%Card%' " & _
  " AND PUBLIC_Transaction.Time >= (" & BegDate1 & ")" & _
  " AND PUBLIC_Transaction.Time <  (" & EndDate1 & ")" & _
  " AND PUBLIC_Department.Code NOT Like 'E/%'" & _
  " AND PUBLIC_Department.code NOT Like 'T/%'"
    
  Set rsCost = New ADODB.Recordset
  rsCost.Open strSQLCost, conSQLCost, adOpenStatic, adLockOptimistic
     
  If Not rsCost.EOF Then
    TotalCost = rsCost.GetRows(-1, 1, "sum_cost")
  Else
    TotalCost = 0
  End If
  
 ' If Total <> 0 Then
    Margin = (Total - TotalCost) / Total
    Range(Cell1).Value = Margin
 ' Else
 '   Range(Cell1).Value = 0
 ' End If
  conSQL.Close
  conSQLCost.Close

End Sub

Open in new window

0
Comment
Question by:bikeski
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 34989657
Try declaring them as Double instead of Variant. This should help you determine if one of those variables is not getting set to the correct data type.

Wayne
0
 
LVL 81

Accepted Solution

by:
zorvek (Kevin Jones) earned 250 total points
ID: 34989667
Change this:

TotalCost = rsCost.GetRows(-1, 1, "sum_cost")

to:

TotalCost = rsCost.GetRows(-1, 1, "sum_cost")(0,0)

Kevin
0
 
LVL 81

Expert Comment

by:zorvek (Kevin Jones)
ID: 34989670
And this:

Total = rs.GetRows(-1, 1, "sum_sales")

to:

Total = rs.GetRows(-1, 1, "sum_sales")(0,0)

Kevin
0
 

Author Closing Comment

by:bikeski
ID: 34989751
Thanks, adding (0,0) did the trick.

FYI, I tried changing to the Double variable type, that didn't work.
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
You need to know the location of the Office templates folder, so that when you create new templates, they are saved to that location, and thus are available for selection when creating new documents.  The steps to find the Templates folder path are …
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

737 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question