VBA is certainly the way I would do it, especially as this gives me full control over what is created and which order (I could ensure the main tabbe is populated before the sub so there is a corresponding AssetNo to link to).
Everything you want to do is completely possible.
Step 1 - You should be able to do this yourself, it's a form with a single textbox for the user to imput the new AssetNo and a command button to save / close.
Step 2 - I don't know your form or control names, so I will bold them all so you can easily see what needs replacing. This is some example code to create a new record in a table based on values from 2 forms:
dim db as dao.database
dim rst as dao.recordset
set db = currentdb
dim rst as db.openrecordset("SELECT * FROM MainTable")
rst!Company = forms!frm_assets!CompanyControlName
rst!PurchasedDate = forms!frm_assets!PurchasedDateControlName
rst!AssetNo = forms!NewForm!NewAssetNoControlName
Step 3 - Similar code will be used here, the only difference being the table loaded in the recordset, the fields which are in that table and the form you are refering to to get the data to duplicate.
See if you can work out the final part of code based on the earlier part.
If not I can post more. Better to learn it than be told it though.