Voglio usare vba per fare uno screenshot (che verrà poi inviato come allegato di posta elettronica). Idealmente, mi piacerebbe fare uno screenshot della sola forma attiva. C'è un modo per fare questo?C'è un modo per fare uno screenshot in MS-Access con vba?
risposta
Per eseguire questa operazione è necessario utilizzare le chiamate API di Windows. Il seguente codice funziona in MS Access 2007. Salva i file BMP.
Option Compare Database
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_SNAPSHOT = &H2C
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare Function CloseClipboard Lib "user32"() As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
(PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, _
IPic As IPicture) As Long
'\\ Declare a UDT to store a GUID for the IPicture OLE Interface
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
'\\ Declare a UDT to store the bitmap information
Private Type uPicDesc
Size As Long
Type As Long
hPic As Long
hPal As Long
End Type
Private Const CF_BITMAP = 2
Private Const PICTYPE_BITMAP = 1
Sub PrintScreen()
keybd_event VK_SNAPSHOT, 1, 0, 0
End Sub
Public Sub MyPrintScreen(FilePathName As String)
Call PrintScreen
Dim IID_IDispatch As GUID
Dim uPicinfo As uPicDesc
Dim IPic As IPicture
Dim hPtr As Long
OpenClipboard 0
hPtr = GetClipboardData(CF_BITMAP)
CloseClipboard
'\\ Create the interface GUID for the picture
With IID_IDispatch
.Data1 = &H7BF80980
.Data2 = &HBF32
.Data3 = &H101A
.Data4(0) = &H8B
.Data4(1) = &HBB
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H30
.Data4(6) = &HC
.Data4(7) = &HAB
End With
'\\ Fill uPicInfo with necessary parts.
With uPicinfo
.Size = Len(uPicinfo) '\\ Length of structure.
.Type = PICTYPE_BITMAP '\\ Type of Picture
.hPic = hPtr '\\ Handle to image.
.hPal = 0 '\\ Handle to palette (if bitmap).
End With
'\\ Create the Range Picture Object
OleCreatePictureIndirect uPicinfo, IID_IDispatch, True, IPic
'\\ Save Picture Object
stdole.SavePicture IPic, FilePathName
End Sub
C'è uno Knowledge Base article che va più in profondità. esempio
Mi spiace sollevarlo da morto, ma funziona anche su Access 2003? In caso contrario, posso farlo funzionare in questo? – Magisch
Ho appena esaminato il codice. Non riesco a capire perché non funzionerà in Access 2003 finché sono presenti le DLL. Hai provato? –
L'implementazione funziona ... approssimativamente. Non ci sono controlli se il contenuto degli appunti è in realtà un printcreen, ma va bene visto che lo chiami direttamente. Il problema principale che ho lasciato ora è che i file di immagine generati da questo sono grandi ... intorno a 6mb per un full printscreen. Da quello che vedo per Access 2003 non ci sono modi incorporati per fare di un IPicture in un file .png e comprimerlo, ne conosci uno? – Magisch
Usa di Raj per ottenere l'immagine e poi questo per salvare
Dim oPic
On Error Resume Next
Set oPic = Clipboard.GetData
On Error GoTo 0
If oPic Is Nothing Then
'no image in clipboard'
Else
SavePicture oPic, "c:\temp\pic.bmp"
end if
Che cos'è 'PastePicture'? –
era una lib esterna, ho modificato il mio post originale – bugtussle
- 1. Come fare uno screenshot con FireMonkey (multipiattaforma)
- 2. Come fare uno screenshot in modo programmatico su iOS?
- 3. C'è un modo diverso dal metodo miniatura per fare uno screenshot di un video in Iphone?
- 4. C'è un modo per fare automaticamente uno screenshot di un sito web attraverso un URL?
- 5. Excel VBA salvare screenshot
- 6. È possibile fare uno screenshot dell'intera pagina con Selenium/Capybara?
- 7. Il modo più veloce per fare uno screenshot con python su windows
- 8. C'è un modo per fare uno screenshot del desktop di Windows dell'utente?
- 9. MSAccess 2003 - VBA per il passaggio di un valore da un modulo all'altro
- 10. Come posso fare uno screenshot in un'applicazione Windows?
- 11. Cattura uno screenshot con C \ GTK
- 12. Come fare screenshot sotto Wayland?
- 13. Rileva uno screenshot Android
- 14. Senza iPhone, come fare screenshot con XCode?
- 15. Come fare una selezione dell'area screenshot disegnando sul desktop per fare screenshot?
- 16. Prendere uno screenshot con Silverlight 5/XNA
- 17. Il modo migliore per fare screenshot di test in Selenium 2?
- 18. Esistono strumenti per visualizzare un grafico RDF? (includi uno screenshot)
- 19. Come ottenere Spoon per fare screenshot per i test dell'Espresso?
- 20. modo rapido per fare 26 macro (uno per ogni lettera)
- 21. Come eseguire uno screenshot parziale con Selenium WebDriver in python?
- 22. C'è un modo per ottenere uno screenshot anche dai processi quando sono minimizzati?
- 23. Acquisizione di uno screenshot mediante Graphics.CopyFromScreen con ridimensionamento del 150%
- 24. In che modo Android acquisisce screenshot?
- 25. Prendendo uno screenshot di una pagina singola applicazione con JavaScript
- 26. Cattura uno screenshot di un video incorporato utilizzando C#
- 27. Ottenere uno screenshot da una pagina ASP.Net
- 28. generando uno screenshot di un sito Web utilizzando jquery
- 29. Che cos'è il DDL per rinominare la colonna in MSAccess?
- 30. È tecnicamente possibile fare uno screenshot di un sito web a livello di programmazione?
avete bisogno di questo per essere automatizzato? È per questo che non puoi usare Alt + PrintScreen? –
Sì, deve essere automatizzato. Voglio inserirlo nel codice in modo che quando un utente esegue una determinata azione, uno screenshot sia preso e inviato via email a un amministratore. – dmr
Oppure lo snapshot può essere salvato in una tabella dei messaggi di errore come bmp. Insieme ad altre informazioni come nome di moduli attivi, numero di workstation, userid, data/ora, ecc. –