Hej Ja det är möjligt men kräver en hel del arbete. Detta är inte testat och innehåller säkert något fel, men denna principen bör fungera: Japp, nästan (jag "valde" avgränsning på slutet), tack Andreas! Nu är det lite större chans att det fungerar... :) JAg brukar läägga till i början. För att slipp göra två funktionsanrop. Samt att jag rekomenderar ItemsSelected sammlingen för att slippa loopa igenom alla poster i listan: Tack för hjälpen alla! Du ska ha namnet på en kolumn med unika värden som identifierar dina poster, t.ex. en kolumn av typen "Räknare". Nu fungerar det kanonbra =) Jag använde den här:Välja poster i listruta som ska skrivas ut
Jag har en listruta som presenterar ett resultat av en sökning i en tabell. Nu vill jag göra det möjligt att välja vilka poster i listrutan som ska skrivas ut. De posterna man väljer att markera ska hamna i en och samma rapport som man sedan kan skriva ut. I AccessProgrammering för dummies hittade jag något liknade, men då blir varje post en EGEN rapport. Någon som kan hjälpa mig på traven?
Mvh JessicaSv: Välja poster i listruta som ska skrivas ut
Du behöver skapa en tabell som håller reda på vilka poster som användaren har klickat på, ex:
RadID Vilken post användaren klickat på.
UnikStämpel Visar vilken användare och tidpunkt användaren klickat på posten.
Exempel data:
RadID UnikStämpel
234 Markus Larsson 2005-10-25 17:20:12
345 Markus Larsson 2005-10-25 17:20:12
Den tabellen tar du sedan och joinar mot i frågan för rapporten, där du använder UnikStämpel som villkor så att du bara få de poster användaren har valt.
För att veta vilka poster användaren har valt kan du använda följande kod:
<code>Private Sub ÖppnaRapport()
Dim rsttemp As New ADODB.Recordset
Dim rad
Dim unikStämpel As String
'Sparar den unika stämpeln på formuläret så att den blir den samma på alla valda poster.
unikStämpel = CurrentUser() & " " & Now()
'Öppnar ett recordset till tabellen som innehåller valda poster.
rsttemp.Open "TabellAttSparaTill", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
'Loopar genom listans valda rader.
For Each rad In Me.listbox1.ItemsSelected
'För varje vald rad lägger vi till den i tabellen.
rsttemp.AddNew
'RadID hämtar vi från första kolumnen i listan, ändra 0 till något annat om det inte stämmer.
'rad visar vilken rad vi är på.
rsttemp!RadID = Me.listbox1.Column(0, rad)
'Lägger till den unika stämpeln vi skapade tidigare.
rsttemp!UnikStämpel = unikStämpel
rsttemp.Update
Next varmottagare
rsttemp.Close
'Öppnar rapporten
Docmd.OpenReport "RapportNamn"
End Sub</code>
Jag hoppas du förstår vad jag gör, har du väl gjort det en gång blir det enklare.
Det sämsta med det här arbetstättet är att det krävs en extra tabell, tyvärr vet jag inget annan lösning.
MarkusSv: Välja poster i listruta som ska skrivas ut
<code>
Dim i As Integer
Dim urval As String
For i = 0 To Me.Listruta0.ListCount
If Me.Listruta0.Selected(i) Then
urval = urval & Me.Listruta0.ItemData
End If
Next
If Len(urval) > 0 Then
DoCmd.OpenReport "Rapport1", acPreview, , "MinKolumn IN (" & Left(urval, Len(urval) - 2) & ")"
End If
</code>
/JohanSv:Välja poster i listruta som ska skrivas ut
urval = urval & ", " & Me.Listruta0.ItemData
Antar jag det skall vara. ;o)
Sv: Välja poster i listruta som ska skrivas ut
Dim i As Integer
Dim urval As String
For i = 0 To Me.Listruta0.ListCount
If Me.Listruta0.Selected(i) Then
urval = urval & Me.Listruta0.ItemData & ", "
End If
Next
If Len(urval) > 0 Then
DoCmd.OpenReport "Rapport1", acPreview, , "MinKolumn IN (" & Left(urval, Len(urval) - 2) & ")"
End If
/Johan
Sv:Välja poster i listruta som ska skrivas ut
Private Sub Command2_Click()
Dim varItem As Variant
Dim strIN As String
If List0.ItemsSelected.Count > 0 Then
For Each varItem In List0.ItemsSelected
strIN = strIN & ", " & List0.ItemData(varItem)
Next
strIN = Mid(strIN, 3)
DoCmd.OpenReport "Rapport1", acPreview, , "MinKolumn IN (" & strIN & ")"
Else
MsgBox "Du har inte markerat några poster i listan!", vbExclamation
End If
End Sub
Sv: Välja poster i listruta som ska skrivas ut
Nu förstår jag bara inte vad jag ska byta ut "MinKolumn" till.
JessicaSv:Välja poster i listruta som ska skrivas ut
/JohanSv: Välja poster i listruta som ska skrivas ut
Private Sub SkrivUtValda_Click()
Dim varItem As Variant
Dim strIN As String
If List0.ItemsSelected.Count > 0 Then
For Each varItem In List0.ItemsSelected
strIN = strIN & ", " & List0.ItemData(varItem)
Next
strIN = Mid(strIN, 3)
DoCmd.OpenReport "SQL", acViewPreview, , "ID IN (" & strIN & ")"
Else
MsgBox "Du har inte markerat några poster i listan!", vbExclamation
End If
End Sub
Tackar så mycket! /Jessica