First, where you wrote "My macro is titled: ZAFUL", I hope that means your macro starts with the line
Sub ZAFUL()
In order to run that macro from a ribbon button or a Quick Access Toolbar button, you have to add an argument between the parentheses, as follows:
Sub ZAFUL(ByVal control As IRibbonControl)
Your macro doesn't have to use that argument for anything, but it must be there or you'll get an error message instead of running the macro.
Second, I'll admit it isn't very clear in Greg's article about which things in the code he shows can be changed and which things have to stay unchanged. Here's XML that works, as I've verified:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="Custom Tab" visible="false">
<group id="customGroup" label="Custom Group">
<button id="customButton" label="Upper Left" image="UL" onAction="ZAFUL" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
The items in the <tab> and <group> tags can have any valid value that isn't in use for something else; the actual values don't matter because the tab is going to stay invisible. Similarly, the
id and label values in the <button> tag can be anything. The
image value must be equal to the name of the icon that you insert in the Custom UI Editor, and you had that correctly. The
OnAction value must be the name of the macro that will be executed when the button is clicked. This last item is the reason your button isn't working.
In Greg's code, the OnAction value "RBX.ButtonOnAction" contains the name of the macro he was using (ButtonOnAction) preceded by the name of the module that contains the macro (RBX), separated by a dot. Including the module name
is optional unless there are two or more macros with the same name but in different modules.