はじめに
「Sub または Function が定義されていません。」はプロシージャを呼び出そうとした時に、そのプロシージャが見つからない場合に出るエラーです。
単純なスペルの書き間違いや、モジュール間のアクセスが禁止されている事が原因である事が殆どでしょう。
プロシージャ名の書き間違い
以下の例は、単純なプロシージャ名の書き間違いです。プロシージャ名を修正する事で解決しますが、書き間違いによるエラーは気づきにくい場合があるので侮れません。
Sub Error1()
Call myFunc22 'スペルを間違えた
End Sub
Sub myFunc2()
Range("A1") = 123
End Sub
プロシージャの参照不備
通常、標準モジュール間でのプロシージャの呼び出しは自由にできますが、シートモジュール、ThisWorkbookモジュールなどはPrivate扱いなので参照する事ができません。
また、標準モジュールでもPrivateなどのアクセス指定子を付けているとプロシージャを参照する事が出来ずエラーとなります。

まとめ
「Sub または Function が定義されていません。」の原因については比較的見つけやすいエラーと言えます。ただ、モジュール間でアクセスできない場合があるなど、参照できないルールを知らないと困惑するでしょう。
そもそもPrivateなどのアクセス指定子は、勝手なアクセスを禁止してエラー喚起させるものですので、標準モジュールのPrivateアクセス指定子なども、その意図を汲み取って対処するべきでしょう。