This is a good question! Fortunately the answer is easily laid out. First, the difference between a VBX and OCX is purely a technological one. A VBX was the first software module created by Microsoft for Visual Basic. By definition, a VBX is a 16-bit piece of software and only works on the Windows 3.x and Window95 operating systems using Visual Basic 3.0 or 4.0, 16-bit version.
An OCX was the first 32-bit software module, designed to run on Windows 95 and NT using Visual Basic 4.0 (32-bit), Visual Basic 5.0, and other 32-bit applications. The difference between an ActiveX control and an OCX is for the most part one of naming. When Microsoft developed their internet strategy, the name ActiveX was created to refer to internet related technologies. For a variety of reasons, the term OCX was replaced with ActiveX. (see related article).
So, if you are creating an application for Windows 95 and NT only, use ActiveX controls or OCXs. If you’re having to support Win 3.x, then you’ll need a VBX. Unfortunately, no technology exists that will safely run on all 3 platforms. Although some VBX’s might run on Windows NT, it is highly discouraged as performance of the 16-bit code may be unacceptable and certain hardware interfaces may not work. For best results on Windows NT, use ActiveX controls.