VCS_Report.bas 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. Option Compare Database
  2. Option Private Module
  3. Option Explicit
  4. ' --------------------------------
  5. ' Structures
  6. ' --------------------------------
  7. Private Type str_DEVMODE
  8. RGB As String * 94
  9. End Type
  10. Private Type type_DEVMODE
  11. strDeviceName(31) As Byte 'vba strings are encoded in unicode (16 bit) not ascii
  12. intSpecVersion As Integer
  13. intDriverVersion As Integer
  14. intSize As Integer
  15. intDriverExtra As Integer
  16. lngFields As Long
  17. intOrientation As Integer
  18. intPaperSize As Integer
  19. intPaperLength As Integer
  20. intPaperWidth As Integer
  21. intScale As Integer
  22. intCopies As Integer
  23. intDefaultSource As Integer
  24. intPrintQuality As Integer
  25. intColor As Integer
  26. intDuplex As Integer
  27. intResolution As Integer
  28. intTTOption As Integer
  29. intCollate As Integer
  30. strFormName(31) As Byte
  31. lngPad As Long
  32. lngBits As Long
  33. lngPW As Long
  34. lngPH As Long
  35. lngDFI As Long
  36. lngDFr As Long
  37. End Type
  38. 'Exports print vars for reports
  39. Public Sub ExportPrintVars(ByVal obj_name As String, ByVal filepath As String)
  40. DoEvents
  41. Dim fso As Object
  42. Set fso = CreateObject("Scripting.FileSystemObject")
  43. Dim DevModeString As str_DEVMODE
  44. Dim DevModeExtra As String
  45. Dim DM As type_DEVMODE
  46. Dim rpt As Report
  47. 'report must be open to access Report object
  48. 'report must be opened in design view to save changes to the print vars
  49. DoCmd.SetWarnings False
  50. DoCmd.OpenReport obj_name, acViewDesign, , , acHidden
  51. DoCmd.SetWarnings True
  52. Set rpt = Reports(obj_name)
  53. 'read print vars into struct
  54. If Not IsNull(rpt.PrtDevMode) Then
  55. DevModeExtra = rpt.PrtDevMode
  56. DevModeString.RGB = DevModeExtra
  57. LSet DM = DevModeString
  58. Else
  59. Set rpt = Nothing
  60. DoCmd.Close acReport, obj_name, acSaveNo
  61. Debug.Print "Warning: PrtDevMode is null"
  62. Exit Sub
  63. End If
  64. Dim OutFile As Object
  65. Set OutFile = fso.CreateTextFile(filepath, overwrite:=True, unicode:=False)
  66. 'print out print var values
  67. OutFile.WriteLine DM.intOrientation
  68. OutFile.WriteLine DM.intPaperSize
  69. OutFile.WriteLine DM.intPaperLength
  70. OutFile.WriteLine DM.intPaperWidth
  71. OutFile.WriteLine DM.intScale
  72. OutFile.Close
  73. Set rpt = Nothing
  74. DoCmd.Close acReport, obj_name, acSaveYes
  75. logger "ExportPrintVars", "DEBUG", "PrintVars of report " & obj_name & " exported to " & filepath
  76. End Sub
  77. Public Sub ImportPrintVars(ByVal obj_name As String, ByVal filepath As String)
  78. On err GoTo err
  79. Dim fso As Object
  80. Set fso = CreateObject("Scripting.FileSystemObject")
  81. Dim DevModeString As str_DEVMODE
  82. Dim DevModeExtra As String
  83. Dim DM As type_DEVMODE
  84. Dim rpt As Report
  85. 'report must be open to access Report object
  86. 'report must be opened in design view to save changes to the print vars
  87. DoCmd.OpenReport obj_name, acViewDesign
  88. Set rpt = Reports(obj_name)
  89. 'read print vars into struct
  90. If Not IsNull(rpt.PrtDevMode) Then
  91. DevModeExtra = rpt.PrtDevMode
  92. DevModeString.RGB = DevModeExtra
  93. LSet DM = DevModeString
  94. Else
  95. Set rpt = Nothing
  96. DoCmd.Close acReport, obj_name, acSaveNo
  97. Debug.Print "Warning: PrtDevMode is null"
  98. Exit Sub
  99. End If
  100. Dim InFile As Object
  101. Set InFile = fso.OpenTextFile(filepath, iomode:=ForReading, create:=False, Format:=TristateFalse)
  102. 'print out print var values
  103. DM.intOrientation = InFile.readline
  104. DM.intPaperSize = InFile.readline
  105. DM.intPaperLength = InFile.readline
  106. DM.intPaperWidth = InFile.readline
  107. DM.intScale = InFile.readline
  108. InFile.Close
  109. 'write print vars back into report
  110. LSet DevModeString = DM
  111. Mid(DevModeExtra, 1, 94) = DevModeString.RGB
  112. rpt.PrtDevMode = DevModeExtra
  113. Set rpt = Nothing
  114. DoCmd.Close acReport, obj_name, acSaveYes
  115. logger "ImportPrintVars", "DEBUG", "PrintVars of report " & obj_name & " imported from " & filepath
  116. Exit Sub
  117. err:
  118. logger "ImportPrintVars", "ERROR", "Report " & obj_name & " was not found, import print vars cancelled"
  119. End Sub