[AccessD] Force selection of multiple records on a datasheet subform
McGillivray, Don
DMcGillivray at ctc.ca.gov
Wed Jun 10 10:37:30 CDT 2015
Kudos on your success, but your original question raises another for me.
I know there are advantages to using a datasheet sub-form (sortable, variable column widths, built-in filtering, etc.) but might a multi-select list box have been an option here? I find it pretty simple to loop through the selected list box items and perform my magic - all while the selected items still appear selected in the list. I've even worked around some of the display limitations by including sorting/filtering options using combo boxes for selecting the target columns/values. I suspect that the overhead of populating/repopulating the list box would be comparable to or lower than that for walking the record set as in your example.
Or maybe you have other reasons for using the sub-form? Or other drawbacks to the list box that I'm missing?
-----Original Message-----
From: AccessD [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Bill Benson
Sent: Wednesday, June 10, 2015 7:53 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Force selection of multiple records on a datasheet subform
I think my last post was too long for the list, here it is again just in case.
Subform code:
Option Compare Database
Option Explicit
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) EstablishSelections End Sub Private Sub EstablishSelections() Dim iHeight As Long Dim i As Long Dim sIDString As String Dim rS As DAO.Recordset iHeight = Me.SelHeight On Error Resume Next If iHeight > 0 Then
ReDim ArSubformSelections(1 To 4, 1 To iHeight)
sIDString = ""
Set rS = Me.RecordsetClone
rS.MoveFirst
rS.Move Me.SelTop - 1
Else
Exit Sub
End If
For i = 1 To iHeight
ArSubformSelections(1, i) = rS![ID]
ArSubformSelections(2, i) = rS![EmployeeName]
ArSubformSelections(3, i) = rS![EmployeeFirstName]
ArSubformSelections(4, i) = rS![Email]
sIDString = sIDString & "," & ArSubformSelections(1, i)
rS.MoveNext
Next
If sIDString <> "" Then
sIDString = "(" & Mid(sIDString, 2) & ")"
End If
End Sub
Parent form Code:
Private Sub cmdSendSelected_Click()
Dim iTest As Long
Dim i As Long, iCount As Long, iFirstSelection As Long, iLastSelection As Long Dim rst As DAO.Recordset Dim FRM As Form Dim F As Form On Error Resume Next iTest = UBound(ArSubformSelections, 2) On Error GoTo 0 If iTest > 0 Then
For iTest = 1 To UBound(ArSubformSelections, 2)
If Err.Number = 0 Then
If Len(CStr(ArSubformSelections(2, iTest))) > 0 Then
iCount = iCount + 1
If iCount = 1 Then
iFirstSelection = ArSubformSelections(1, iTest)
End If
iLastSelection = iTest
End If
End If
Next
If iFirstSelection > 0 Then
Set F = Me.rptFinishedReportsNotYetSent.Form
Set rst = F.RecordsetClone
rst.FindFirst "Id = " & iFirstSelection
If Not rst.NoMatch Then
F.Bookmark = rst.Bookmark
F.SelHeight = iCount
End If
If iLastSelection > iLastSelection Then
If MsgBox("Send reports for IDs " & ArSubformSelections(1,
iFirstSelection) & " through " & ArSubformSelections(1, iLastSelection) & "?", vbQuestion + vbYesNo + vbDefaultButton1) = vbYes Then
'Get details of items to send from the array
End If
Else
If MsgBox("Send reports to " & ArSubformSelections(1,
iFirstSelection) & "?", vbQuestion + vbYesNo + vbDefaultButton1) = vbYes Then
'Get details of items to send from the array
End If
End If
End If
End If
End Sub
Public variable declaration
Public ArSubformSelections()
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com
More information about the AccessD
mailing list