Not tested
I used Option Explicit
If you are not using Worksheet_Change or other events, you don't need to disable them
Sh is Dim-ed as a Worksheet
To avoid issues with empty strings, I like to use Len() = 0 as a check (it might be a 0 length string)
To avoid issues with a non-empty string that consists of spaces, I like to use Trim()
For number based WS looping, I've found it's easier for me to use .Cells(r, c) instead of something like Range("A" & i)
To answer your question, look at Next q and Next Sh below to see how a nested loop works
My thoughts
Option Explicit
Sub RemoveBlankCells2()
Dim strLR2 As String
Dim q As Long
Dim Sh As Worksheet
For Each Sh In Sheets(Array("Fire", "FA Def", "FA NA", "Sprinkler", "Sprinkler Def", "Sprinkler NA", "Suppression", "Suppression Def", "Suppression NA", "Inspections"))
With Sh
strLR2 = .Range("A" & .Rows.Count).End(xlUp).Row
For q = 2 To strLR2
If Len(Trim(.Cells(q, 9).Value)) = 0 Then .Cells(q, 9).ClearContents
Next q
End With
Next Sh
End Sub