ByRef, ByVal 接頭語に関して。
サブルーチン内で定義する方法をLet文、具体的には「=」記号のみに限定する
という方法を選択して、
引数の変数を示す語をInstrで探して、
前が数字とアルファベット以外・又は文頭、後ろが数字とアルファベット以外、の場合に、変数を参照していると解釈する。
Open、For、Dim、ReDim、Select Case、IF、DO、LOOP、WHILE、Untilの場合には専用にルーチンで語の一致をみて、参照する場合と決定
IF THEN ELSE 文は、IF - Then 間、THen-Else間、ELSE移行の3文に分割
変数の前の文字を 「# : , ( 算術演算子」の場合に分けて
変数の後ろの文字を 「: , ) 算術演算子」の場合に分けて
「,」や「()」の場合には、前後の()を探して、配列名か関数名を特定。Declear文に記載がある場合に限って関数と解釈、ない場合が配列と解釈。
関数の場合には、自己の検査結果より引数が定義にしているか参照しているを調べる。配列名の場合には参照すると決定(MSやUnix系関数は判断できない)。
算術演算子の場合には参照と決定。
前に「#」があるばあいには、参照と決定。
前に「=」があるばあいには、参照と決定。
後ろに「=」があるばあいには、定義と決定。
多文字演算子として、MOD 演算子は + に書き換えで処理。

までやって、100位解釈できない引数があるけど、なんとかそれらしきものができた。
あとちょっとやれば、ByRef ByVal ガ原因の混乱は終焉すると思う。