Large Power Apps Forms Across Screens
Have you ever needed to build a Power Apps form with 60, 100, or even 150 fields? Those massive business forms are out there in the real world, and your users need a way to fill them out without feeling overwhelmed. My solution in Power Apps, is wizard-like interface that splits your large form across multiple screens with tabs. This makes it digestible and user-friendly, even saving it as a draft along the way.
In this post and demonstration video, I’ll walk you through all the logic and moving parts needed to build this kind of interface. Fair warning: it’s fairly complex, but once you understand the concepts, you can apply them to any large form scenario.
📋 The Large Form Concept
The idea is simple: instead of one massive form control with hundreds of fields, you create multiple screens, each with its own form control containing a subset of fields. Users navigate between screens using tabs across the top, and they can click Next to progress through the wizard.
But here’s the key insight that makes this work: only the first form is ever in New mode. As soon as users complete that first screen and click Next, the record is created in SharePoint. All subsequent screens are in Edit mode because they’re editing an existing record.
I’m also building in a draft concept. When users are filling out large forms, they might not complete all 150 fields in one sitting. They need to be able to step away and finish later. So we’ll set the form status to “Draft” initially, and only change it to “Submitted” when they complete the final screen.
🔧 Setting Up Your SharePoint List
Before building the app, you need a SharePoint list with all your columns. For this example, I created a list called “Large Form” with many columns. The important addition is a Form Status column, which is just a text field with a default value of “Draft”.
🎯 The Key Variables for Large Form Navigation
Three variables drive this entire solution:
- varFormMode – A text variable that tells each form whether to be in New, Edit, or View mode. Since it’s a global variable, it carries across all your screens and forms.
- varFormNav – A number variable representing which tab you’re on (1, 2, 3, or 4). This controls navigation between screens.
- varRecordLargeForm – This variable holds the entire record. It’s set in the OnSuccess of each form, and it’s what you use as the Item property on all your form controls so they all know which record to work with.
➕ Building the New Button
When users click to create a new form, here’s what needs to happen in the OnSelect:
- Set the form mode to New: Set(varFormMode, “new”)
- Reset the form to clear any previous data: ResetForm(frmLarge_1)
- Set the navigation variable to 1: Set(varFormNav, 1)
- Navigate to the first screen: Navigate(LargeFormScreen_1)
Set( varFormMode, "new");ResetForm(frmLarge_1);Navigate('Large Form Screen_1');Set(varFormNav,1)
📑 Creating the Tab Interface
I started with the “Header and Form” screen template, which gives you a nice professional layout. Then I added a horizontal container and dropped buttons into it to create the tabs.
To make the buttons look like tabs, set the Border Radius on the top left and top right to 15. This gives them that nice rounded top edge.
For the visual distinction between the active tab and inactive tabs, I use the modern button’s Style property. The active tab gets Primary style (your accent color), and all inactive tabs get Secondary style (white background).

1️⃣ The First Form Control (The Special One)
The first form is different from all the others because it’s the only one that ever needs to be in New mode. Here are the critical properties:
DefaultMode
If( varFormMode = "edit", FormMode.Edit, varFormMode = "view", FormMode.View, FormMode.New)
This checks the varFormMode variable and sets the form accordingly. If it’s not Edit or View, it defaults to New.
Item Property
varRecordLargeForm
This is how all forms know which record to work with. On the first form when it’s brand new, this variable won’t have a value yet, but that’s okay.
Next Button OnSelect
SubmitForm(frmLarge_1); Set(varFormNav, varFormNav + 1)
Notice we’re NOT navigating here! We only submit the form and update the navigation variable. The actual navigation happens in the OnSuccess property of the form control.
OnSuccess (The Most Important Part!)
This is where the magic happens. After the form successfully submits:
Set( varRecordLargeForm, Self.LastSubmit);Switch( varFormNav, 1, Navigate('Large Form Screen_1'), 2, Navigate('Large Form Screen_2'), 3, Navigate('Large Form Screen_3'), 4, Navigate('Large Form Screen_4'), Navigate('Purchase Request Welcome'))
The Self.LastSubmit gives you the entire record that was just saved, and we store that in varRecordLargeForm. The Switch statement then looks at varFormNav to know where to go next. If it’s not 1, 2, 3, or 4, it navigates back to the home screen.
2️⃣ 3️⃣ 4️⃣ Subsequent Form Screens
The other screens are simpler because they never need New mode. Here’s what’s different:
DefaultMode (No New option!)
If(varFormMode="view",FormMode.View,FormMode.Edit)
Since the record already exists by the time users reach these screens, we only need Edit or View mode.
Back Button
Add a Back button with this OnSelect:
SubmitForm(frmLarge_2);Set(varFormNav,varFormNav-1)
Same concept as Next, but we subtract 1 from the navigation variable. The OnSuccess handles the actual navigation.

Want to master complex Power Apps techniques like this? My Advanced Power Apps course at IW Mentor covers forms, variables, conditional logic, and more.
Check it out here – Power Apps Advanced Training!
🔀 Letting Users Jump to Tabs
Want users to be able to click directly on a tab to jump to it? This is totally up to you, the maker, if it is a requirement in the business process. Add this to each tab button’s OnSelect property, on each screen:
SubmitForm(frmLarge_2);Set(varFormNav,2)
Pro tip: If you have required fields on each tab and need users to complete them in order, simply don’t add OnSelect logic to the tabs. The Next button approach forces sequential completion, so that users can’t skip any tabs.
Another approach I’ve used: only allow tab clicking when the form is in View mode (already submitted), but force sequential completion when it’s being filled out initially.
✅ The Final Screen: Changing Status to Submitted
On your last screen, the Next button becomes Submit Final. Here’s how to change the status from Draft to Submitted:
- Add the Form Status field to your last form control (you can hide it later). I created this as a single line of text column in SharePoint.
- Find the data card for Form Status and go to its Update property
- Set it to: If(varRecordLargeForm.FormStatus = “Draft”, “Submitted”, YOUR_TEXT_BOX_CONTROL_NAME.Value)
This logic only changes the status to Submitted if it’s currently in Draft. If the status is something else (like “In Review” or “Approved”), it leaves it alone.
For the Submit Final button’s OnSelect, in this case I have 4 screens and 4 forms:
SubmitForm(frmLarge_4);Set(varFormNav,0)
Setting varFormNav to 0 (or any number not 1-4) means the OnSuccess will navigate back to the welcome screen (per the logic we created in OnSuccess property of each form).
📋 Building a Gallery for Existing Forms
You’ll need a gallery where users can see and click on existing forms. In the gallery item’s OnSelect:
If( ThisItem.'Form Status' = "Draft" && User().Email=ThisItem.'Created By'.Email, Set( varFormMode, "edit" ), Set( varFormMode, "view" ));Set(varRecordLargeForm,ThisItem);Navigate('Large Form Screen_1')

This logic checks: Is it in Draft AND am I the person who created it? If yes, open in Edit mode. Otherwise, open in View mode. This prevents users from editing someone else’s draft.
👀 Handling View Mode
Here’s a gotcha: if the form is in View mode, you can’t submit it! So all those buttons with SubmitForm will throw errors.
You’ll need to add logic to each navigation button (next and back buttons and anywhere you have SubmitForm()):
If( varFormMode = "view", Navigate('Large Form Screen_2'), SubmitForm(frmLarge_1));Set( varFormNav, 2)
In this example, this logic would go on the NEXT button:

If in View mode, just navigate directly. Otherwise, submit the form first.
💡 Pro Tips
- Name your screens and forms with underscores: Use names like LargeFormScreen_1, LargeFormScreen_2. When you duplicate a screen, Power Apps automatically increments the number.
- Test early and often: Get your first two screens fully working before copying them. Test every permutation of Next, Back, View (from a gallery), and tab clicking.
- Multiple screens improve performance: Instead of one giant screen with 150 controls, spreading them across screens keeps performance running smoothly.
- Show the status: Consider adding a label that displays varRecordLargeForm.FormStatus at the bottom of each screen so users always know their form is in draft mode, submitted, approved, etc.
- Use containers: A horizontal container for your tabs keeps everything neat and aligned without fussing with positioning.
Want to master complex Power Apps techniques like this? My Advanced Power Apps course at IW Mentor covers forms, variables, conditional logic, and more.
Check it out here – Power Apps Advanced Training!
🎯 Wrapping Up
Yes, this is a complex pattern with lots of moving parts. But once you understand the core concepts, it becomes a repeatable solution for any large form scenario. The key things to remember:
- Only the first screen is ever in New mode
- Use a variable (varRecordLargeForm) to track the current record across all screens
- Navigation happens in OnSuccess, not in the button’s OnSelect
- Use a number variable (varFormNav) to control which screen to navigate to
- Build and test your first two screens before duplicating
Now go forth and build your large form wizard concepts in Power Apps! Check out my video below, where I build and demonstrate all of these steps.
How did you know I wanted to build a screen with tabs?