I have created a table on a worksheet within my workbook titled LookUpTable
where it has data that looks like this
What I want to do is reference that table to set variables to equal the table cell values within my if statement. Here is a portion of my code.
If sweeprate_value = 50 Then
sweep_value = 49.8
sweep_value_max = 50.2
Call updateSD(sysnum, sweeprate_rowindex_1, specmin, sweep_value)
Call updateSD(sysnum, sweeprate_rowindex_1, specmax, sweep_value_max)
Call updateSD(sysnum, sweeprate_rowindex, spectyp, sweeprate_value)
Call updateSD(sysnum, sweeprate_rowindex_1, spectyp, sweeprate_value)
ElseIf sweeprate_value = 100 Then
sweep_value = 99.8
sweep_value_max = 100.2
Call updateSD(sysnum, sweeprate_rowindex_1, specmin, sweep_value)
Call updateSD(sysnum, sweeprate_rowindex_1, specmax, sweep_value_max)
Call updateSD(sysnum, sweeprate_rowindex, spectyp, sweeprate_value)
Call updateSD(sysnum, sweeprate_rowindex_1, spectyp, sweeprate_value)
Else: sweeprate_value = 200
sweep_value = 199.4
sweep_value_max = 200.4
Call updateSD(sysnum, sweeprate_rowindex_1, specmin, sweep_value)
Call updateSD(sysnum, sweeprate_rowindex_1, specmax, sweep_value_max)
Call updateSD(sysnum, sweeprate_rowindex, spectyp, sweeprate_value)
Call updateSD(sysnum, sweeprate_rowindex_1, spectyp, sweeprate_value)
End If
Where I have the lines sweep_value = 49.8 sweep_value_max = 50.2
currently when I debug they both equal 50 which is not what I would like. For this case since sweeprate_value = 50
then sweep_value should = 49.8
and sweep_value_max should = 50.2
as shown in the VLookUp table. Then follow the same flow for the other values. I do not want the values to be hardcoded into the script but rather reference the table to which those values could be changed if needed.
Either you set the values hardcoded like this. Make sure you have an error on non supported sweep rates. Do not repeat code.
Dim sweeprate_value As Long
Dim sweep_value As Double
Dim sweep_value_max As Double
If sweeprate_value = 50 Then
sweep_value = 49.8
sweep_value_max = 50.2
ElseIf sweeprate_value = 100 Then
sweep_value = 99.8
sweep_value_max = 100.2
ElseIf sweeprate_value = 200 Then
sweep_value = 199.4
sweep_value_max = 200.4
Else
MsgBox "A SweepRate Value of """ & sweeprate_value & """ is not supported.", vbCritical + vbOKonly
Exit Sub
End If
Call updateSD(sysnum, sweeprate_rowindex_1, specmin, sweep_value)
Call updateSD(sysnum, sweeprate_rowindex_1, specmax, sweep_value_max)
Call updateSD(sysnum, sweeprate_rowindex, spectyp, sweeprate_value)
Call updateSD(sysnum, sweeprate_rowindex_1, spectyp, sweeprate_value)
Or you use a lookup:
Dim sweeprate_value As Long
' don't know where your sweeprate_value comes from so you get it here
Dim LookUpTable As Worksheet
Set LookUpTable = ThisWorkbook.Worksheets("LookUpTable")
Dim FoundAt As Double ' get the row number of the `sweeprate_value` in the LookUpTable
FoundAt = 0 ' initialize (needed if this is used in a loop!)
On Error Resume Next ' next line will error if that `sweeprate_value` is not in the LookUpTable. Catch that error and hide it.
FoundAt = Application.WorksheetFunction.Match(sweeprate_value, LookUpTable.Range("A:A"), 0)
On Error GoTo 0 ' re-activate error reporting!
' if `sweeprate_value` is not in the LookUpTable stop
If FoundAt = 0 Then
MsgBox "A SweepRate Value of """ & sweeprate_value & """ is not supported.", vbCritical + vbOKOnly
Exit Sub
End If
Dim sweep_value As Double
sweep_value = LookUpTable.Cells(FoundAt, "B").Value
Dim sweep_value_max As Double
sweep_value_max = LookUpTable.Cells(FoundAt, "C").Value
Call updateSD(sysnum, sweeprate_rowindex_1, specmin, sweep_value)
Call updateSD(sysnum, sweeprate_rowindex_1, specmax, sweep_value_max)
Call updateSD(sysnum, sweeprate_rowindex, spectyp, sweeprate_value)
Call updateSD(sysnum, sweeprate_rowindex_1, spectyp, sweeprate_value)