Discussione:
ListBox per Selezione Reports
(troppo vecchio per rispondere)
bizio
2010-01-20 15:01:28 UTC
Permalink
Salve a tutti di nuovo,
lavoro con Access 2007 e sto cercando di creare una combo che
racchiuda la lista dei miei reports e con un pulsante di comando mi
apri quello selezionato.
Ho trovato un metodo cercando su internet ma presenta un errore e non
capisco come risolverlo.
Questa è la procedura:

1. Creato una form con:
* una combo box chiamata lstReports , con etichetta
Reports ;
* una check box chiamata chkPreview , con etichetta
Preview ;
* un pulsante chiamato cmdOpenReport , con etichetta Open
Report .
2. Su evento OnClick del pulsante:

Private Sub cmdOpenReport_Click()

' Purpose: Opens the report selected in the list box.


On Error GoTo cmdOpenReport_ClickErr

If Not IsNull(Me.lstReports) Then

DoCmd.OpenReport Me.lstReports, IIf(Me.chkPreview.Value,
acViewPreview, acViewNormal)

End If

Exit Sub



cmdOpenReport_ClickErr:

Select Case Err.Number

Case 2501 ' Cancelled by user, or by NoData event.


MsgBox "Report cancelled, or no matching data.",
vbInformation, "Information"

Case Else

MsgBox "Error " & Err & ": " & Error$, vbInformation,
"cmdOpenReport_Click()"

End Select

Resume Next

End Sub

3. sulla proprietà origine riga della combo impostata a
EnumReports . Lasciato Origine Controllo a blank.
4. Creato a nuovo modulo con il seguente codice:

Function EnumReports(fld As Control, id As Variant, row As
Variant, col As Variant, code As Variant) As Variant

' Purpose: Supplies the name of all saved reports to a list
box.

' Usage: Set the list box's RowSourceType property to:?
EnumReports

' leaving its RowSource property blank.

' Notes: All arguments are provided to the function
automatically.

' Author: Allen Browne ***@allenbrowne.com
Feb.'97.




Dim db As Database, dox As Documents, i As Integer

Static sRptName(255) As String ' Array to store
report names.


Static iRptCount As Integer ' Number of
saved reports.



' Respond to the supplied value of "code".


Select Case code

Case acLBInitialize ' Called once
when form opens.


Set db = CurrentDb()

Set dox = db.Containers!Reports.Documents

iRptCount = dox.Count ' Remember
number of reports.


For i = 0 To iRptCount - 1

sRptName(i) = dox(i).Name ' Load report
names into array.


Next

EnumReports = True

Case acLBOpen

EnumReports = Timer ' Return a
unique identifier.


Case acLBGetRowCount ' Number of rows


EnumReports = iRptCount

Case acLBGetColumnCount ' 1 column


EnumReports = 1

Case acLBGetColumnWidth ' 2 inches


EnumReports = 2 * 1440

Case acLBGetValue ' The report
name from the array.


EnumReports = sRptName(row)

Case acLBEnd

Erase sRptName ' Deallocate
array.


iRptCount = 0

End Select

End Function

ma quando apro la maschera mi dà error di run-time '13' Tipo non
corrispondente
e mi evidenzia la linea di codice:
Set dox = db.Containers!Reports.Documents

e sulla combo non compare nulla.

Sapete spiegarmi il motivo?

O in alternativa conoscete un metodo simile che funzioni?
Grazie mille dei vostri suggerimenti
Marco Pizzamiglio
2010-01-20 15:32:59 UTC
Permalink
Post by bizio
Salve a tutti di nuovo,
lavoro con Access 2007 e sto cercando di creare una combo che
racchiuda la lista dei miei reports e con un pulsante di comando mi
apri quello selezionato.
[cut]
Post by bizio
O in alternativa conoscete un metodo simile che funzioni?
Grazie mille dei vostri suggerimenti
Metti nell'origine riga della combo
SELECT Name FROM MSysObjects WHERE Type=-32764;
Per maggiori informazioni vai sulle opzioni di visualizzazione e rendi
visibili gli "Oggetti di sistema", poi vai a guardare tra le tabelle.
Sul click del pulsante apri il report:
docmd.openreport me.combonomereport, me.modo
('modo' sarà scelto dall'utente tra Preview e Normal)
Ciao.
-Marco-
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
bizio
2010-01-20 16:12:40 UTC
Permalink
Post by Marco Pizzamiglio
Metti nell'origine riga della combo
  SELECT Name FROM MSysObjects WHERE Type=-32764;
Intanto grazie Marco
Questo l'ho fatto ma non è cambiato nulla
Post by Marco Pizzamiglio
Per maggiori informazioni vai sulle opzioni di visualizzazione e rendi
visibili gli "Oggetti di sistema", poi vai a guardare tra le tabelle.
Questo invece come lo metto in pratica?
Sulle opzioni di Access 2007 non ho trovato questa voce che invece
ricordo ci fosse nelle Opzioni di access 2003
Post by Marco Pizzamiglio
  docmd.openreport me.combonomereport, me.modo
('modo' sarà scelto dall'utente tra Preview e Normal)
Fatto anche questo ma il problema non si risolve.
Dovuto al fatto che non reso visibile ancora gli "Oggetti di Sistema"?
bizio
2010-01-20 16:18:56 UTC
Permalink
Post by Marco Pizzamiglio
Per maggiori informazioni vai sulle opzioni di visualizzazione e rendi
visibili gli "Oggetti di sistema", poi vai a guardare tra le tabelle.
Trovata la voce nelle Opzioni...anche se era un po nascosta...nella
sezione Opzioni di spostamento il risultato è sempre lo stesso:
error di run-time '13' Tipo non
corrispondente
e mi evidenzia la linea di codice nel modulo:
Set dox = db.Containers!Reports.Documents
Marco Pizzamiglio
2010-01-20 16:39:22 UTC
Permalink
Post by bizio
Post by Marco Pizzamiglio
Per maggiori informazioni vai sulle opzioni di visualizzazione e rendi
visibili gli "Oggetti di sistema", poi vai a guardare tra le tabelle.
Trovata la voce nelle Opzioni...anche se era un po nascosta...nella
error di run-time '13' Tipo non
corrispondente
Set dox = db.Containers!Reports.Documents
No, no, non ci siamno capiti, elimina completamente tutto quel codice che
hai messo nel primo post. Ti basta SOLO mettere nell'origine riga quella
SELECT che ti ho dato, che va a leggere l'elenco dei nomi dei report. Poi
il tipo origine riga deve essere "Tabella/query", il numero colonne 1,
colonna associata 1.
La mia è una proposta alternativa, non la soluzione per far funzionare
quel codice.
Ciao.
-Marco-
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
sv
2010-01-20 15:51:59 UTC
Permalink
Post by bizio
Salve a tutti di nuovo,
lavoro con Access 2007 e sto cercando di creare una combo che
racchiuda la lista dei miei reports e con un pulsante di comando mi
apri quello selezionato.
Ho trovato un metodo cercando su internet ma presenta un errore e non
capisco come risolverlo.
* una combo box chiamata lstReports , con etichetta
Reports ;
* una check box chiamata chkPreview , con etichetta
Preview ;
* un pulsante chiamato cmdOpenReport , con etichetta Open
Report .
Private Sub cmdOpenReport_Click()
' Purpose: Opens the report selected in the list box.
On Error GoTo cmdOpenReport_ClickErr
If Not IsNull(Me.lstReports) Then
DoCmd.OpenReport Me.lstReports, IIf(Me.chkPreview.Value,
acViewPreview, acViewNormal)
End If
Exit Sub
Select Case Err.Number
Case 2501 ' Cancelled by user, or by NoData event.
MsgBox "Report cancelled, or no matching data.",
vbInformation, "Information"
Case Else
MsgBox "Error " & Err & ": " & Error$, vbInformation,
"cmdOpenReport_Click()"
End Select
Resume Next
End Sub
3. sulla proprietà origine riga della combo impostata a
EnumReports . Lasciato Origine Controllo a blank.
Function EnumReports(fld As Control, id As Variant, row As
Variant, col As Variant, code As Variant) As Variant
' Purpose: Supplies the name of all saved reports to a list
box.
' Usage: Set the list box's RowSourceType property to:?
EnumReports
' leaving its RowSource property blank.
' Notes: All arguments are provided to the function
automatically.
Feb.'97.
Dim db As Database, dox As Documents, i As Integer
Static sRptName(255) As String ' Array to store
report names.
Static iRptCount As Integer ' Number of
saved reports.
' Respond to the supplied value of "code".
Select Case code
Case acLBInitialize ' Called once
when form opens.
Set db = CurrentDb()
Set dox = db.Containers!Reports.Documents
iRptCount = dox.Count ' Remember
number of reports.
For i = 0 To iRptCount - 1
sRptName(i) = dox(i).Name ' Load report
names into array.
Next
EnumReports = True
Case acLBOpen
EnumReports = Timer ' Return a
unique identifier.
Case acLBGetRowCount ' Number of rows
EnumReports = iRptCount
Case acLBGetColumnCount ' 1 column
EnumReports = 1
Case acLBGetColumnWidth ' 2 inches
EnumReports = 2 * 1440
Case acLBGetValue ' The report
name from the array.
EnumReports = sRptName(row)
Case acLBEnd
Erase sRptName ' Deallocate
array.
iRptCount = 0
End Select
End Function
ma quando apro la maschera mi dà error di run-time '13' Tipo non
corrispondente
Set dox = db.Containers!Reports.Documents
e sulla combo non compare nulla.
Sapete spiegarmi il motivo?
O in alternativa conoscete un metodo simile che funzioni?
Grazie mille dei vostri suggerimenti
Fai un Debug. Può darsi che cia sia qualche "a capo" che ti sfugge.

Il codice funziona perfettamente . Testato con A2003.

--
sv
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
Continua a leggere su narkive:
Loading...