Hallo Axel,
was mir auffaellt das die SQL Statements unschoen geschrieben sind und teilweise Fehler unterliegen. Ich mache es mal anders,einfacher und schneller 
Dim Sql as String
Sql="Select dScaleMinimum,dScaleMaximum,lPricition From tblAnalogItem Where lID IN(SELECT lMeasuredVariableID FROM tblPidItem WHERE lID='"
& DataGrid1.SelBookmarks.Item(0) & "') ORDER BY lID;"
Somit hast du deine ganzen Abfragen zusammen in eine Gepackt 
Ich weiss ja nicht wie du auf deine DB zugreifst, aber ich gehe mal von ADO aus. Dazu müsstest du es dann wiefolgt machen.
Private CON as ADODB.Connection
Private RS as New ADODB.Recordset
Public Function FileExists(datei As String) As Boolean
On Error Resume Next
FileExists = Dir$(datei) ""
FileExists = FileExists And Err = 0
On Error GoTo 0
End Function
Public Function OpenDatabase(Filename As String,SQL as String) As Boolean 'Öffnet die DB
On Error GoTo ErrHandler
If Not (FileExists(Filename)) Then Err.Raise 13
Set Con = New ADODB.Connection
With Con
.Provider = "Microsoft.Jet.OLEDB.4.0"
.CursorLocation = adUseClient
.Properties("Data Source") = Filename
.Mode = adModeReadWrite
.Open
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.Open SQL, Con, adOpenDynamic, adLockOptimistic
End With
OpenDatabase = True
Exit Function
ErrHandler:
End Function
So durch Aufruf der Function Opendatabase kannst du nun die DB öffnen. Du musst ihr lediglich das SQL Statement mit übergeben 
Achte dabei aber darauf das sie nicht schon vorher geöffnet ist 
Aber das ist nur ein Demo zu veranschaulichung.
Rechnen kannst du nun wiefolgt mit den Werten
Private Sub Berechne
On Error Resume Next
Dim Sql as String
Sql="Select dScaleMinimum,dScaleMaximum,lPricition From tblAnalogItem Where lID IN(SELECT lMeasuredVariableID FROM tblPidItem WHERE lID='"
& DataGrid1.SelBookmarks.Item(0) & "') ORDER BY lID;"
if not(OpenDatabase("c:\DeineDatenbank.mdb",sql)) then
'Fehler DB konnte nicht geöffnet werden
Exit Sub
else
'Datenbank ist geöffnet
if RS.recordcount=0 then
'Keine Datensätze vorhanden
else
'Datensätze vorhanden!
RS.Movefirst 'Ersten Datensatz selektieren!
Do While Not RS.Eof
'hier rechnen
msgbox rs!Feldname1 / rs!Feldname3
msgbox rs!Feldname2 / rs!Feldname2
rs.movenext
loop
end if
end if
Du musst hier lediglich die Feldnamen ersetzen.
In dem Falle wäre
Feldname1 das Feld in der Tabelle dScaleMinimum mit dem du rechnen magst
Feldname2 das Feld in der Tabelle dScaleMaximum mit dem du rechnen willst
Feldname 3 das Feld in der Tabelle lPricition mit dem du rechnen magst
So ich hoffe ich konnte dir helfen 
Da ich das alles nun aus dem Kopf getippelt habe und nicht getestet, koennte es evtl. sein das sich der eine oder andere kleine Fehler eingeschlichen hat. Aber das prinzip solltet du erkennen 
MfG Alex