This is not causing your problem but it will cause other problems and it would make this one easier to fix --- The app should be split into FE/BE. The BE contains ONLY tables. The FE contains all other objects with links to the tables in the BE.
The problem is caused by corruption. You are going to have to rebuild the app object by object until you encounter the object that is corrupted so you can skip that one. As the last step, you will need to recreate the corrupted object or get it from one of your backups.
Start with going through the split process. Create a new database and suffix the name with _FE to identify it as the FE. Open this database and import ALL objects except the tables. Do it by type. Import the queries, then the macros. If any group fails, you will need to do the import one at a time until you identify the corrupted object and skip it.
Create another new database and suffix the name with _BE. Open this database and import the tables one at a time until you find the one that fails.
After all the data is imported correctly, make sure that the indexes are all created. Create the relationships and enforce Referential Integrity. The final step is to open the FE and link the tables to the BE.
One thing you will need to be careful with is every time you move the BE, you will need to open up the linked tables manager in the FE and relink the tables. Once an app is created and released for production, the BE doesn't move so this isn't a problem. As the developer, you would need your own test copy of the FE and also a test copy of the BE and so you would need to relink the BE as you move from test to production and back. As long as all the tables are in a single BE, this is not usually a problem and the users will never have to do it. Just you.