...setiap form akan memasukkan dan mengambil data dari kolom yang tidak beraturan...
Maksudnya bagaimana? Untuk masalah kode VBA sebelumnya, itu dapat diatasi dengan trik menyimpan indeks kolom target pada setiap kontrol input... ;) Setiap kontrol pada UserForm memiliki properti TAG. Nah, triknya kita bisa menyimpan indeks kolom sel target pada properti TAG ini. Sedangkan proses looping setiap kontrol, gunakan fungsi FOR EACH. Contohnya:
Private Sub CommandButton1_Click()
Dim objControl As Control
Dim sName As String
Dim lLastRow, lCol As Long
With ActiveSheet
lLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
sName = "TextBox|ComboBox"
For Each objControl In Me.Controls
If InStr(1, sName, TypeName(objControl)) > 0 Then
If objControl.Tag <> vbNullString Then
If IsNumeric(objControl.Tag) Then
lCol = Val(objControl.Tag)
Cells(lLastRow, lCol) = objControl.Text
End If
End If
End If
Next
End Sub
Pada UserForm, kontrol properti TAG dari kontrol TextBox1 diisi dengan kolom target, misalnya 1. Sehingga, tidak masalah susunannya acak, baris kode:
Cells(lLastRow, lCol) = objControl.Text
akan otomatis mengisi nilai dari kontrol ke kolom yang dituju sesuai variabel lCol yang merupakan konversi nilai dari properti TAG dari kontrol input... ;)