O erro deve estar dentro da sua macro, a forma como você escreve a instrução WRITE faz com que o comando gere um erro ao obter dados para o marcador de posição. Como você não mostrou seu código de macro, tentei criar o meu e funcionou normalmente:
DEFINE WRITE_GRID.
FORMAT COLOR = &5.
WRITE AT &2 &1 INVERSE = &3 INTENSIFIED = &4.
END-OF-DEFINITION.
DATA: CNT TYPE C LENGTH 3,
POS TYPE i.
CONSTANTS:
COL_TOTAL TYPE I VALUE 3,
COL_KEY TYPE I VALUE 4,
COL_POSITIVE TYPE I VALUE 5,
COL_HEADING TYPE I VALUE 1,
ON TYPE I VALUE 1,
OFF TYPE I VALUE 0.
CNT = SY-DBCNT .
POS = 6.
WRITE_GRID CNT POS ON OFF COL_TOTAL.
Mas como Horst disse, você não deve usar macros. Se não estiver familiarizado com o ABAP Object, ainda pode escrever uma sub-rotina para lidar com isso.