No me ha quedado claro lo de las alarmas pero en principio no tienes problemas, pero no uso macros. Supongamos que la tabla Origen del formulario se llama Clientes, y entre otros campos tienes Email, donde aparece su correo electrónico, un campo Fechavto, y una casilla tipo Si/No llamado Enviado.
En el evento Al abrir del formulario o mejor, en un botón de comando ponle
form.recordsource=select * from clientes where fechavto=date()-8 and enviado=-0"
Esto hará que en el formulario sólo te aparezcan aquellos registros de la tabla Clientes en que fechavto + 8 días sea igual al de hoy y que todavía no se le haya enviado el mensaje.
Para no complicarte más, podrías poner otro botón(no es necesario, pero como te digo para no complicarte, y ponerle
docmd.runsql"update clientes set Enviado=-1 where idcliente=forms!nombredelformulario!idcliente"
O sea, envía un mensaje a la dirección que aparece en el campo email y en el Asunto ponle lo de "me debes... y en el texto lo de "tomaré... Lo de true es por si quieres verlo antes de enviarlo, sino le pones false y ya está.
Si fueran muchos morosos, quizá te convendría crear un formulario continuo sin origen de datos, con por ejemplo, Idcliente, Email. Y en el formulario que ya tienes poner un botón y en el evento Al hacer clic poner
Docmd. Openform"nombre nuevo formulario"
En el evento Al abrir del nuevo formulario
form.recordsource=select * from clientes where fechavto=date()-8 and enviado=-0"
Y ponele, por ejemplo, un botón y en el evento Al hacer clic poner
dim i as integer
for i=1 to form.recordset.recordcount
DoCmd. SendObject, "", "", "me.email", "", "", """Me debes dinero, paga ahora""", "Tomare medidas", false, ""
Docmd. Gotorecord,, acnext
next
De todas formas, si quieres, mándame la base con un par de registros inventados(es por no escribir yo) y te pongo un ejemplo. Mi correo es [email protected] Si lo haces, en el asunto del mensaje pon tu alias Alex Ibarra, ya que si no sé quien me escribe ni los abro.