Ah, I misunderstood. To be honest I had no clue Instance Properties were a thing until your post! This new code should work:
Sub Main
Dim oAsm As AssemblyDocument = ThisDoc.Document
Dim oNames As New List(Of String)
oNames.AddRange({"Plant_No", "Room_No", "System", "System Group" })
Do
Dim oComp As ComponentOccurrence = ThisApplication.CommandManager.Pick(kAssemblyLeafOccurrenceFilter, "Select Component")
If oComp Is Nothing Then Exit Sub
'Dim oCustomProps As PropertySet = oComp.Definition.Document.PropertySets("Inventor User Defined Properties")
For Each oName As String In oNames
Try
iProperties.InstanceValue(oComp.Name, oName) = iProperties.InstanceValue(oComp.Name, oName)
Catch
iProperties.InstanceValue(oComp.Name, oName) = ""
End Try
Dim oAsk As String = InputBox("Current Component : " & oComp.Name & vbLf & vbLf _
& "Enter value for : " & oName, "iProp Customizer", iProperties.InstanceValue(oComp.Name, oName))
If oAsk = "" Then Exit Sub
iProperties.InstanceValue(oComp.Name, oName) = oAsk
Next
Loop
End Sub