How to Create Forms in MS Access

Nobody wants to type straight into an Access table—it’s easy to break data or miss a required field. Forms give you a proper screen for entering and editing records, with one field per box and validation if you add it. You can create forms in MS Access in two main ways: the Form Wizard (pick a table, pick fields, get a form in a minute) or Design View (blank form, you add every control and wire it up yourself). This page walks you through both, then covers what goes wrong when a form is blank, shows #Name?, or a subform shows every record instead of just the ones for the current record—and how to fix it. If you’re still setting up tables and queries, create a table in MS Access and Access queries come first.

What a Form in MS Access Actually Is (And the Two Kinds)

A form is either bound to data or it isn’t. A bound form has a RecordSource—a table or a query—and the form displays those records. When you change a value in a text box and move to the next record or close the form, Access writes the change back to the table. That’s what you want for data entry: one form per table (or query), with text boxes tied to each field. An unbound form has no RecordSource. Nothing is saved automatically; you use it for a main menu, a search screen, or a dialog where you read and set values in VBA. When someone says “create a form in MS Access,” they usually mean a bound form for entering or editing data. You build that with the Form Wizard (fast) or Form Design (flexible). The “Form” button (one big click) is a shortcut that builds a form from whatever table or query you have selected—it’s basically the wizard with defaults.

Create a Form in MS Access Using the Form Wizard

The wizard is the fastest way to get a working form. You tell it which table or query to use, which fields to show, and how you want them arranged. At the end you have a form that already has RecordSource set and every field bound—no property sheet digging required.

  1. Open the wizard: Click the Create tab on the ribbon, then in the Forms group click Form Wizard. (If you don’t see it, look for a dropdown under “More Forms.”) The first screen has two lists: “Tables/Queries” at the top and “Available Fields” below. If Available Fields is empty, pick a table or query from the Tables/Queries drop-down—the fields from that object will appear in the list.
  2. Choose the fields: Select the fields you want on the form (use the single arrow to move one, double arrow to move all). The order you add them is the order they’ll appear. Skip fields you don’t want users to edit. Click Next.
  3. Pick a layout: Columnar puts one record on the screen—one field per row, label on the left, value on the right. Good for data entry. Tabular shows many records in rows, one row per record, like a spreadsheet. Use that when you want to scroll through a list. Datasheet looks like the table view. Justified fits fields in a block. For most data-entry forms, Columnar is what you want. Click Next.
  4. Name the form and finish: Type a title in the box at the top. That title becomes the form’s name (no spaces is best—e.g. frmCustomers). Choose “Open the form to view or enter information” to go straight into the form, or “Modify the form’s design” if you want to add buttons or change layout first. Click Finish. The form opens and is already bound to the table or query you chose.

After the wizard finishes, you can switch to Design View (right-click the form tab or View → Design View) to add a Save button, change tab order, or drop in a subform. The wizard doesn’t lock you in. A shorter wizard-only walkthrough with screenshots is on Access forms.

Create a Form in MS Access Using Design View (Blank Form)

Design View is for when the wizard isn’t enough: you need a main form with a subform, a form that isn’t tied to one table (e.g. a search screen), or you want to place every control by hand. You start with an empty form and set the RecordSource and controls yourself.

  1. Create a blank form: Create tab → Forms group → Form Design. A blank form opens in Design View with three sections: Form Header (top), Detail (middle—this is where the record data goes), and Form Footer (bottom). Click the form background (not a section) so the form itself is selected—you’ll need that for the next step.
  2. Set the form’s RecordSource: Press F4 to open the property sheet. If you don’t see “Form” at the top of the sheet, click the form background again. In the property list find Record Source. Click the drop-down and pick a table or query, or click in the box and type a query name or SQL (e.g. SELECT * FROM Customers). Leave Record Source blank only if this form is a menu or dialog with no table behind it.
  3. Add fields to the form: On the Design tab, click “Add Existing Fields.” A pane lists the fields from the form’s RecordSource. Drag a field onto the Detail section—Access creates a label and a text box and sets the text box’s ControlSource to that field. If the list is empty, the form has no RecordSource or the RecordSource has no columns; go back and set Record Source. You can also add a text box from the Controls gallery, then in the text box’s property sheet set Control Source to the field name (exactly as it appears in the table or query).
  4. Save the form: Ctrl+S. Give the form a name without spaces (e.g. frmCustomer or frmOrderEntry). A naming prefix like frm makes it easy to find forms in the Navigation Pane and in VBA.

How RecordSource and ControlSource Work (And Why You Get #Name?)

The form’s RecordSource is the table or query that supplies the record. Each control that shows or edits a value has a ControlSource. If ControlSource is a field name that exists in the RecordSource, the control is bound: it displays that field and saves changes back. If you type a field name wrong or use a field that isn’t in the RecordSource, the control shows #Name? or #Error. Fix it by opening the control’s property sheet (F4 with the control selected), clicking Control Source, and picking the correct field from the list or typing the exact name. For a calculated value (e.g. Quantity times UnitPrice), set Control Source to an expression like =[Quantity]*[UnitPrice]—again, names in brackets must match fields in the RecordSource. Unbound controls have no Control Source; you set and read them in VBA with Me!ControlName.Value.

Default View: Single Form, Continuous, or Datasheet

In the form’s property sheet, Default View controls how many records you see at once. Single Form shows one record per screen— best for data entry. Continuous Forms shows one record per “row” so you can scroll through many. Datasheet looks like a table grid. For most data-entry forms, keep Default View as Single Form.

Adding a Subform to Show Related Records

A subform shows records related to the main form (e.g. Orders for the current Customer). Create the child form first: set its RecordSource to Orders (or a query that includes the link field, e.g. CustomerID). On the main form (RecordSource = Customers), add a Subform/Subreport control, set Source Object to that Orders form, and set Link Master Fields and Link Child Fields to CustomerID so the subform only shows orders for the current customer. If you see every order for every customer instead of just the current one, the link fields are wrong or missing—check that both Link Master Fields and Link Child Fields use the same key (e.g. CustomerID) and that the child form’s RecordSource includes that column. More detail: how to use subforms in MS Access and Access subforms.

VBA: Open a Form and Go to a Record

When you have a button or another form that should open a form and jump to a specific record (e.g. “View this customer”), use DoCmd.OpenForm. The WhereCondition filters the form to that record so the user doesn’t have to search.

' Open form and show only the record where CustomerID matches
DoCmd.OpenForm "frmCustomer", WhereCondition:="CustomerID = " & Me!CustomerID

' Open form for new record (data entry mode)
DoCmd.OpenForm "frmOrder", acNormal, , , acFormAdd

' Open form and set a value on it (e.g. after open)
DoCmd.OpenForm "frmOrder"
Forms!frmOrder!CustomerID = Me!CustomerID
Forms!frmOrder!CustomerName.Requery

Form Events: BeforeUpdate for Validation

Without validation, users can save a record with required fields left blank or invalid data. To check before Access writes the record, use the form’s BeforeUpdate event. If something is wrong, show a message and set Cancel = True—Access cancels the save and leaves the user on the same record so they can fix it.

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If IsNull(Me!OrderDate) Or IsNull(Me!CustomerID) Then
        MsgBox "Order Date and Customer are required.", vbExclamation
        Cancel = True
    End If
End Sub

Common Mistakes When Creating Forms in MS Access

  • Form is blank: Usually the form has no RecordSource. Fix: Open the form in Design View, select the form (click the form background), press F4, and set Record Source to the correct table or query. If you use a query, make sure it returns the same column names you use in your controls.
  • #Name? or #Error in a text box: The control’s ControlSource doesn’t match a field in the RecordSource (typo or wrong field). Fix: Select the control, press F4, and set Control Source to the exact field name from your table or query, or pick it from the drop-down.
  • Subform shows all records instead of just the current one: Link Master Fields and Link Child Fields aren’t set. Fix: Select the subform control, press F4, and set both Link Master Fields and Link Child Fields to the same key (e.g. CustomerID). The child form’s RecordSource must include that field.
  • Tab order is confusing: Users tab through controls in Tab Index order. Fix: In Design View, right-click the form → Tab Order, then drag rows into the order you want. Put Save and Close buttons where users expect them.

When to Use Design View Instead of the Wizard

The wizard is great when you need a simple form in a hurry—one table, one layout, done. Switch to Design View when you need something the wizard can’t do: a main form with subforms, an unbound form (menu or dialog), conditional formatting or visibility, or custom buttons that run VBA. If the wizard’s layout doesn’t fit how your users work, Design View lets you rearrange everything. When you’re adding forms to a database that already has them, creating an Access form in an existing database usually means Design View or copying an existing form and changing its RecordSource.

Key Takeaways

  • Create forms in MS Access with the Form Wizard (quick, pick table/query and layout) or Form Design (blank form, set RecordSource and add controls).
  • Bound forms have a RecordSource; controls have ControlSource set to a field or expression. Unbound forms have no RecordSource and are used for menus or dialogs.
  • Subforms need Link Master Fields and Link Child Fields set so the child shows only related records.
  • Use Form_BeforeUpdate with Cancel = True to validate before save. Use DoCmd.OpenForm with WhereCondition to open a form filtered to one record.
  • Fix #Name?/#Error by checking RecordSource and ControlSource; fix subform showing all records by setting the link fields.

Frequently Asked Questions

How do I create a form in MS Access?

Easiest way: Create → Form Wizard, choose a table or query and the fields you want, pick a layout (Columnar is best for data entry), give the form a name, and click Finish. If you need more control, use Form Design: Create → Form Design, set the form’s Record Source (F4), then add fields with “Add Existing Fields” or drop controls and set their Control Source. Save with Ctrl+S.

What is the difference between bound and unbound forms in Access?

A bound form has a RecordSource—a table or query—so it displays and saves data to that source. That’s what you use for data entry. An unbound form has no RecordSource; you use it for menus, dialogs, or search screens where you load or set values in code.

Why does my form show #Name? or #Error in a text box?

The control is bound to a field name that doesn’t exist in the form’s RecordSource—often a typo or a field that isn’t in the table or query. Select the control, press F4, and set Control Source to the correct field name (or pick it from the list). Spelling and capitalization must match exactly.

How do I add a subform to show related records?

Build the child form first (e.g. Orders) and set its RecordSource. On the main form (e.g. Customers), add a Subform/Subreport control, set Source Object to that child form, and set both Link Master Fields and Link Child Fields to the same key (e.g. CustomerID). The subform will then show only the records that belong to the current main record. If it shows everything, the link fields are missing or wrong.

How do I open a form to a specific record from VBA?

Use DoCmd.OpenForm with the WhereCondition so the form opens already filtered to that record. For example: DoCmd.OpenForm "frmCustomer", WhereCondition:="CustomerID = " & Me!CustomerID. The user lands on the right record instead of having to search.

Conclusion and Next Steps

Once you know the two paths—wizard vs Design View—and how RecordSource and ControlSource work, you can fix most form issues yourself: blank form, #Name?, or a subform showing the wrong records. Use the wizard for quick single-table forms; use Design View when you need subforms, unbound forms, or custom layout. For more, Access forms goes deeper on the wizard; how to use subforms in MS Access and creating an Access form in an existing database extend the workflow. If you’d like forms built or refined for your database, contact us for a free quote.

Have a question? Ask us!