I don't know what
correct before the wrong one
means.
Maybe:
Sub test_RndIntPick()
Dim a() As Variant, i As Integer
a() = RndIntPick(1, 15, 15)
'MsgBox Join(a(), vbLf)
For i = 1 To UBound(a)
Me("Image" & i).Picture = LoadPicture("V:\CGC_DATA\Images\picture" & a(i) & ".jpg")
'MsgBox a(i)
Next i
End Sub
Function RndIntPick(first As Long, last As Long, _
noPick As Long, Optional bSort As Boolean = False) As Variant
Dim i As Long, R As Long, temp As Long, k As Long
ReDim iArr(first To last) As Variant
Dim a() As Variant
For i = first To last
iArr(i) = i
Next i
Randomize
For i = 1 To noPick
R = Int(Rnd() * (last - first + 1 - (i - 1))) + (first + (i - 1))
temp = iArr(R)
iArr(R) = iArr(first + i - 1)
iArr(first + i - 1) = temp
Next i
ReDim Preserve iArr(first To first + noPick - 1)
ReDim a(1 To noPick)
For R = 1 To noPick
a(R) = iArr(LBound(iArr) + R - 1)
Next R
If bSort = True Then
RndIntPick = ArrayListSort(a())
Else
RndIntPick = a()
End If
End Function
Function ArrayListSort(sn As Variant, Optional bAscending As Boolean = True)
With CreateObject("System.Collections.ArrayList")
Dim cl As Variant
For Each cl In sn
.Add cl
Next
.Sort 'Sort ascendending
If bAscending = False Then .Reverse 'Sort and then Reverse to sort descending
ArrayListSort = .toarray()
End With
End Function