Loading Joe Sandbox Report ...

Edit tour

Windows Analysis Report
bnerad4129F.xlsm

Overview

General Information

Sample Name:bnerad4129F.xlsm
Analysis ID:734111
MD5:1bb0098ce207236e5a4819560e41a954
SHA1:5bb00ef5548bd03e1e45f9113497a22de0f95fc6
SHA256:97450cdcaa220328f6daebf774b425277103dbfe08940b1d5da07f6e2d8dbc49
Infos:

Detection

Ursnif Dropper
Score:72
Range:0 - 100
Whitelisted:false
Confidence:100%

Signatures

Detected Italy targeted Ursnif dropper document
Document contains an embedded VBA with functions possibly related to ADO stream file operations
Document contains an embedded VBA with many string operations indicating source code obfuscation
Document contains an embedded VBA macro with suspicious strings
Document contains VBA stomped code (only p-code) potentially bypassing AV detection
Document contains OLE streams with suspicious strings
Document contains an embedded VBA with functions possibly related to HTTP operations
Document contains an embedded VBA macro which executes code when the document is opened / closed
Document contains embedded VBA macros
Found URL in obfuscated visual basic script code
Document misses a certain OLE stream usually present in this Microsoft Office document type

Classification

  • System is w10x64
  • EXCEL.EXE (PID: 5800 cmdline: "C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE" /automation -Embedding MD5: 5D6638F2C8F8571C593999C58866007E)
  • cleanup
No configs have been found
No yara matches
No Sigma rule has matched
No Snort rule has matched

Click to jump to signature section

Show All Signature Results
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEFile opened: C:\Windows\SysWOW64\MSVCR100.dllJump to behavior
Source: vbaProject.binBinary string: http://www.oracle.com/bne> - obfuscation quality: 4
Source: vbaProject.binString found in binary or memory: http://www.oracle.com/bne
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML//
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML//BneUploaderService?bne:tickleSession=Truem:443/
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneApplicationService
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneComponentServiceos.lk
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneDownloadServiceeos.lk(
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneDownloadServiceeos.lk(FM51SOK4ODFJXCML07W7O8HY1PLOC
Source: vbaProject.binString found in binary or memory: https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneUploaderServiceeos.lk

E-Banking Fraud

barindex
Source: Initial sampleOLE, VBA macro line: Ursnif specific tokens

System Summary

barindex
Source: bnerad4129F.xlsmStream path 'VBA/BneVBAUploader' : found possibly 'ADODB.Stream' functions position, open, read
Source: bnerad4129F.xlsmStream path 'VBA/Sheet1' : found possibly 'ADODB.Stream' functions mode, open, read
Source: bnerad4129F.xlsmOLE, VBA macro line: Public Function UnZip( ZipFile As String, Optional TargetFolderPath As String = vbNullString, Optional OverwriteFile As Boolean = False ) As Boolean
Source: bnerad4129F.xlsmOLE, VBA macro line: If OverwriteFile Then
Source: bnerad4129F.xlsmOLE, VBA macro line: Kill Environ("Temp") & "Temporary Directory*"
Source: bnerad4129F.xlsmOLE, VBA macro line: CallByName objProperty, Me.StylePropertyVBA, VbLet, Me.StylePropertyValue
Source: bnerad4129F.xlsmOLE, VBA macro line: Set objProperty = CallByName(objProperty, Me.StylePropertyVBA, VbGet)
Source: bnerad4129F.xlsmOLE, VBA macro line: Set objProperty = CallByName(objProperty, Me.StylePropertyVBA, VbGet, Me.StylePropertyValue)
Source: bnerad4129F.xlsmStream path 'VBA/BneRibbon' : found possibly 'XMLHttpRequest' functions response, responsebody, status, open, send
Source: bnerad4129F.xlsmStream path 'VBA/BneVBAUploader' : found possibly 'XMLHttpRequest' functions readystate, response, responsexml, status, open, send, setrequestheader
Source: bnerad4129F.xlsmStream path 'VBA/Sheet1' : found possibly 'XMLHttpRequest' functions response, status, open, send
Source: bnerad4129F.xlsmOLE, VBA macro line: Private m_layoutImage As String
Source: bnerad4129F.xlsmOLE, VBA macro line: m_layoutImage = ""
Source: bnerad4129F.xlsmOLE, VBA macro line: LayoutImage = m_layoutImage
Source: bnerad4129F.xlsmOLE, VBA macro line: Public Sub Workbook_Open()
Source: bnerad4129F.xlsmOLE, VBA macro line: AddBneMsg BNE_ERROR, "Workbook_Open", "Error: " & Err.Number & " " & Err.Description
Source: bnerad4129F.xlsmOLE indicator, VBA macros: true
Source: ~DF31B384211B18428B.TMP.0.drOLE stream indicators for Word, Excel, PowerPoint, and Visio: all false
Source: bnerad4129F.xlsmOLE indicator, Workbook stream: true
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEFile created: C:\Users\user\Desktop\~$bnerad4129F.xlsmJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEFile created: C:\Users\user\AppData\Local\Temp\{E656762D-7272-4DA5-AD90-1F1FBD4D22C4} - OProcSessId.datJump to behavior
Source: classification engineClassification label: mal72.bank.expl.evad.winXLSM@1/4@0/0
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEFile read: C:\Users\desktop.iniJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEWindow found: window name: SysTabControl32Jump to behavior
Source: Window RecorderWindow detected: More than 3 window changes detected
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEWindow detected: Number of UI elements: 71
Source: bnerad4129F.xlsmInitial sample: OLE zip file path = xl/worksheets/sheet4.xml
Source: bnerad4129F.xlsmInitial sample: OLE zip file path = xl/worksheets/sheet5.xml
Source: bnerad4129F.xlsmInitial sample: OLE zip file path = xl/worksheets/_rels/sheet5.xml.rels
Source: bnerad4129F.xlsmInitial sample: OLE zip file path = docProps/custom.xml
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEKey opened: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Common\LanguageResources\EnabledEditingLanguagesJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEFile opened: C:\Windows\SysWOW64\MSVCR100.dllJump to behavior
Source: ~DF31B384211B18428B.TMP.0.drInitial sample: OLE indicators vbamacros = False

Data Obfuscation

barindex
Source: bnerad4129F.xlsmStream path 'BneBrowser' : High number of string operations
Source: bnerad4129F.xlsmStream path 'VBA/BneBrowser' : High number of string operations
Source: bnerad4129F.xlsmStream path 'VBA/BneRibbon' : High number of string operations
Source: bnerad4129F.xlsmStream path 'VBA/BneVBAUploader' : High number of string operations
Source: bnerad4129F.xlsmStream path 'VBA/Sheet1' : High number of string operations

Hooking and other Techniques for Hiding and Protection

barindex
Source: bnerad4129F.xlsmStream path 'VBA/__SRP_1' : xor key: 0x20, keywords: writefile
Source: bnerad4129F.xlsmStream path 'VBA/__SRP_1' : keywords: writefile
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: FAILCRITICALERRORS | NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior
Source: C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXEProcess information set: NOOPENFILEERRORBOXJump to behavior

HIPS / PFW / Operating System Protection Evasion

barindex
Source: bnerad4129F.xlsmOLE indicator, VBA stomping: true
Initial AccessExecutionPersistencePrivilege EscalationDefense EvasionCredential AccessDiscoveryLateral MovementCollectionExfiltrationCommand and ControlNetwork EffectsRemote Service EffectsImpact
Valid Accounts43
Scripting
Path InterceptionPath Interception1
Masquerading
OS Credential Dumping1
File and Directory Discovery
Remote ServicesData from Local SystemExfiltration Over Other Network Medium1
Application Layer Protocol
Eavesdrop on Insecure Network CommunicationRemotely Track Device Without AuthorizationModify System Partition
Default AccountsScheduled Task/JobBoot or Logon Initialization ScriptsBoot or Logon Initialization Scripts43
Scripting
LSASS Memory1
System Information Discovery
Remote Desktop ProtocolData from Removable MediaExfiltration Over BluetoothJunk DataExploit SS7 to Redirect Phone Calls/SMSRemotely Wipe Data Without AuthorizationDevice Lockout
Domain AccountsAt (Linux)Logon Script (Windows)Logon Script (Windows)1
Obfuscated Files or Information
Security Account ManagerQuery RegistrySMB/Windows Admin SharesData from Network Shared DriveAutomated ExfiltrationSteganographyExploit SS7 to Track Device LocationObtain Device Cloud BackupsDelete Device Data
Local AccountsAt (Windows)Logon Script (Mac)Logon Script (Mac)1
Obfuscated Files or Information
NTDSSystem Network Configuration DiscoveryDistributed Component Object ModelInput CaptureScheduled TransferProtocol ImpersonationSIM Card SwapCarrier Billing Fraud
Hide Legend

Legend:

  • Process
  • Signature
  • Created File
  • DNS/IP Info
  • Is Dropped
  • Is Windows Process
  • Number of created Registry Values
  • Number of created Files
  • Visual Basic
  • Delphi
  • Java
  • .Net C# or VB.NET
  • C, C++ or other language
  • Is malicious
  • Internet

This section contains all screenshots as thumbnails, including those not shown in the slideshow.


windows-stand
No Antivirus matches
No Antivirus matches
No Antivirus matches
No Antivirus matches
SourceDetectionScannerLabelLink
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML//0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML//BneUploaderService?bne:tickleSession=Truem:443/0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneUploaderServiceeos.lk0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneComponentServiceos.lk0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneDownloadServiceeos.lk(0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneDownloadServiceeos.lk(FM51SOK4ODFJXCML07W7O8HY1PLOC0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA0%Avira URL Cloudsafe
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneApplicationService0%Avira URL Cloudsafe
No contacted domains info
NameSourceMaliciousAntivirus DetectionReputation
https://ebs-prd.eos.lkqeurope.com:443/OA_HTML//BneUploaderService?bne:tickleSession=Truem:443/vbaProject.binfalse
  • Avira URL Cloud: safe
unknown
http://www.oracle.com/bnevbaProject.binfalse
    high
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML//vbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneComponentServiceos.lkvbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneUploaderServiceeos.lkvbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/vbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneDownloadServiceeos.lk(vbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneDownloadServiceeos.lk(FM51SOK4ODFJXCML07W7O8HY1PLOCvbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.vbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OAvbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/BneApplicationServicevbaProject.binfalse
    • Avira URL Cloud: safe
    unknown
    No contacted IP infos
    Joe Sandbox Version:36.0.0 Rainbow Opal
    Analysis ID:734111
    Start date and time:2022-10-31 06:37:25 +01:00
    Joe Sandbox Product:CloudBasic
    Overall analysis duration:0h 4m 28s
    Hypervisor based Inspection enabled:false
    Report type:full
    Sample file name:bnerad4129F.xlsm
    Cookbook file name:defaultwindowsofficecookbook.jbs
    Analysis system description:Windows 10 64 bit v1803 with Office Professional Plus 2016, Chrome 104, IE 11, Adobe Reader DC 19, Java 8 Update 211
    Number of analysed new started processes analysed:11
    Number of new started drivers analysed:0
    Number of existing processes analysed:0
    Number of existing drivers analysed:0
    Number of injected processes analysed:0
    Technologies:
    • HCA enabled
    • EGA enabled
    • HDC enabled
    • AMSI enabled
    Analysis Mode:default
    Analysis stop reason:Timeout
    Detection:MAL
    Classification:mal72.bank.expl.evad.winXLSM@1/4@0/0
    EGA Information:Failed
    HDC Information:Failed
    HCA Information:
    • Successful, ratio: 100%
    • Number of executed functions: 0
    • Number of non-executed functions: 0
    Cookbook Comments:
    • Found application associated with file extension: .xlsm
    • Found Word or Excel or PowerPoint or XPS Viewer
    • Attach to Office via COM
    • Scroll down
    • Close Viewer
    • Exclude process from analysis (whitelisted): MpCmdRun.exe, SgrmBroker.exe, conhost.exe, svchost.exe
    • Excluded domains from analysis (whitelisted): fs.microsoft.com
    • Not all processes where analyzed, report is missing behavior information
    • Report size getting too big, too many NtSetInformationFile calls found.
    No simulations
    No context
    No context
    No context
    No context
    No context
    Process:C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
    File Type:data
    Category:dropped
    Size (bytes):152056
    Entropy (8bit):4.414380243595853
    Encrypted:false
    SSDEEP:1536:fmmvLzolWWpFpKKHAeedydju4HTbTuo+o5aQxJudUl9yhQL3ow:fFg8WpFpKKHHedydFeo+oQLUlPow
    MD5:71707F50E67C9AFAC345A16941AF041C
    SHA1:A283A770ED389DE57E07B6EB7D26EFA77168CABE
    SHA-256:E3355AB5B7A650721018F03474622DAD41B96C435C15C624D3BF810E93D3C660
    SHA-512:765F322E1859CEF54159558E2C7E7B7FDA864613346DC9FCFCA8D7D7FCC54F147AE261E058604DEBF89808A27F73ECE1968327489805924BA9CB574C724B083F
    Malicious:false
    Reputation:low
    Preview:MSFT................Q................................$......$....... ...................d.......,...........X....... ...........L...........x.......@...........l.......4...........`.......(...........T...................H...........t.......<...........h.......0...........\.......$...........P...........|.......D...........p.......8...........d.......,...........X....... ...........L...........x.......@........ ..l ... ..4!...!...!..`"..."..(#...#...#..T$...$...%...%...%..H&...&...'..t'...'..<(...(...)..h)...)..0*...*...*..\+...+..$,...,...,..P-...-......|.......D/.../...0..p0...0..81...1...2..d2...2..,3...3...3..X4...4.. 5...5...5..L6...6...7..x7...7..@8...8...9..l9...9..4:...:...:..`;...;..(<...<...<..T=...=...>...>...>..H?...?...@..t@...@..<A...A...B..hB.......B...........^...............g...............W...............F..............<G...............g...............i...I..............T..................................................................................................
    Process:C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
    File Type:Composite Document File V2 Document, Cannot read section info
    Category:dropped
    Size (bytes):1536
    Entropy (8bit):1.1464700112623651
    Encrypted:false
    SSDEEP:3:YmsalTlLPltl2N81HRQjlORGt7RQ//W1XR9//3R9//3R9//:rl912N0xs+CFQXCB9Xh9Xh9X
    MD5:72F5C05B7EA8DD6059BF59F50B22DF33
    SHA1:D5AF52E129E15E3A34772806F6C5FBF132E7408E
    SHA-256:1DC0C8D7304C177AD0E74D3D2F1002EB773F4B180685A7DF6BBE75CCC24B0164
    SHA-512:6FF1E2E6B99BD0A4ED7CA8A9E943551BCD73A0BEFCACE6F1B1106E88595C0846C9BB76CA99A33266FFEC2440CF6A440090F803ABBF28B208A6C7BC6310BEB39E
    Malicious:false
    Reputation:high, very likely benign file
    Preview:......................>...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
    Process:C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
    File Type:data
    Category:dropped
    Size (bytes):512
    Entropy (8bit):0.0
    Encrypted:false
    SSDEEP:3::
    MD5:BF619EAC0CDF3F68D496EA9344137E8B
    SHA1:5C3EB80066420002BC3DCC7CA4AB6EFAD7ED4AE5
    SHA-256:076A27C79E5ACE2A3D47F9DD2E83E4FF6EA8872B3C2218F66C92B89B55F36560
    SHA-512:DF40D4A774E0B453A5B87C00D6F0EF5D753143454E88EE5F7B607134598294C7905CCBCF94BBC46E474DB6EB44E56A6DBB6D9A1BE9D4FB5D1B5F2D0C6ED34BFE
    Malicious:false
    Reputation:high, very likely benign file
    Preview:................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
    Process:C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
    File Type:data
    Category:dropped
    Size (bytes):165
    Entropy (8bit):1.6081032063576088
    Encrypted:false
    SSDEEP:3:RFXI6dtt:RJ1
    MD5:7AB76C81182111AC93ACF915CA8331D5
    SHA1:68B94B5D4C83A6FB415C8026AF61F3F8745E2559
    SHA-256:6A499C020C6F82C54CD991CA52F84558C518CBD310B10623D847D878983A40EF
    SHA-512:A09AB74DE8A70886C22FB628BDB6A2D773D31402D4E721F9EE2F8CCEE23A569342FEECF1B85C1A25183DD370D1DFFFF75317F628F9B3AA363BBB60694F5362C7
    Malicious:true
    Reputation:high, very likely benign file
    Preview:.pratesh ..p.r.a.t.e.s.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    File type:Microsoft Excel 2007+
    Entropy (8bit):7.9842375383469095
    TrID:
    • Excel Microsoft Office Open XML Format document with Macro (52504/1) 52.24%
    • Excel Microsoft Office Open XML Format document (40004/1) 39.80%
    • ZIP compressed archive (8000/1) 7.96%
    File name:bnerad4129F.xlsm
    File size:515884
    MD5:1bb0098ce207236e5a4819560e41a954
    SHA1:5bb00ef5548bd03e1e45f9113497a22de0f95fc6
    SHA256:97450cdcaa220328f6daebf774b425277103dbfe08940b1d5da07f6e2d8dbc49
    SHA512:08948389bb22082a2bd3132921da24d0c64003eeb43fab500a4ba6194e384cf00d48a5d8f5162b670a225c6be8135026147114ed68eb1f68784c626c76c6fa68
    SSDEEP:12288:y/gDw+PtSBZJ3TmQWw2gNiAEh9J8eDf6WbC3u5xqHvu:y/RBZ5yw2gcAEp8G6W82
    TLSH:01B413DEE1D099DDFA9F31318A6D81DC23D2F33C1491AEAA584060F9085274767BE29E
    File Content Preview:PK..........!...U.............[Content_Types].xml ...(.........................................................................................................................................................................................................
    Icon Hash:74ecd0e2f696908c
    Document Type:OpenXML
    Number of OLE Files:1
    Has Summary Info:
    Application Name:
    Encrypted Document:False
    Contains Word Document Stream:False
    Contains Workbook/Book Stream:True
    Contains PowerPoint Document Stream:False
    Contains Visio Document Stream:False
    Contains ObjectPool Stream:False
    Flash Objects Count:0
    Contains VBA Macros:True
    Author:
    Last Saved By:
    Total Edit Time:0
    Create Time:2019-05-31T15:40:49Z
    Last Saved Time:2022-10-25T12:52:43Z
    Creating Application:
    Security:0
    Thumbnail Scaling Desired:false
    Company:
    Contains Dirty Links:false
    Shared Document:false
    Changed Hyperlinks:false
    Application Version:16.0300
    General
    Stream Path:BneBrowser
    VBA File Name:BneBrowser
    Stream Size:-1
    Data ASCII:
    Data Raw:
    Attribute VB_Name = "BneBrowser"
    Attribute VB_Base = "0{E7E14E05-267E-4DF5-AB46-4EAEDFC6DBE2}{F7753E73-3A3F-4A39-83EF-62561949B23D}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Const BROWSER = 1
    Const DIALOG = 2
    Const WINDOW_STATUS_EVENT = "EVENT"
    Const WINDOW_STATUS_DONE = "Done"
    Const PROGRESS_MESSAGE = "Working "
    Dim WithEvents WebBrowser As WebBrowser
    Attribute WebBrowser.VB_VarHelpID = -1
    Dim WithEvents BneDocument As HTMLDocument
    Attribute BneDocument.VB_VarHelpID = -1
    Dim m_Document As IHTMLDocument2
    Dim m_EventCallBacks As Collection
    Dim m_Document_OnClick As String
    Dim m_Document_Complete As String
    Dim m_UploadBegin As String
    Dim m_UploadComplete As String
    Dim m_caption As String
    Dim m_URL As String
    Dim m_LookAndFeel As Integer
    Dim b_UploadBegin As Boolean
    Dim b_UploadComplete As Boolean
    Dim m_SessionName As String
    Dim m_SessionState As Boolean
    Dim m_SessionTicket As String
    Dim m_documentId As String
    Dim m_language As String
    Dim m_appsServletAgent As String
    Dim m_strMsgHeader As String
    Dim m_strMsgBody As String
    Dim m_strMsgAction1 As String
    Dim m_strMsgAction2 As String
    Dim m_SheetRef As Object
    Public Property Let sessionName(ByVal sessionName As String)
    m_SessionName = sessionName
    End Property
    Public Property Let sessionState(ByVal sessionState As Boolean)
    m_SessionState = sessionState
    End Property
    Public Property Let sessionTicket(ByVal sessionTicket As String)
    m_SessionTicket = sessionTicket
    End Property
    Public Property Let LookAndFeel(ByRef LookAndFeel As Integer)
    m_LookAndFeel = LookAndFeel
    End Property
    Public Property Let DOCUMENT_ONCLICK(ByVal value As String)
    m_Document_OnClick = value
    End Property
    Public Property Let DOCUMENT_COMPLETE(ByVal value As String)
    m_Document_Complete = value
    End Property
    Public Property Let UPLOADBEGIN(ByVal value As String)
    m_UploadBegin = value
    End Property
    Public Property Let UPLOADCOMPLETE(ByVal value As String)
    m_UploadComplete = value
    End Property
    Public Sub ErrorMessage(strMsgHeader As String, strMsgBody As String, strMsgAction1 As String, strMsgAction2 As String)
    m_strMsgHeader = strMsgHeader
    m_strMsgBody = strMsgBody
    m_strMsgAction1 = strMsgAction1
    m_strMsgAction2 = strMsgAction2
    End Sub
    Public Sub setSession(ByRef sessionName As String, ByRef sessionState As Boolean, ByRef sessionTicket As String)
    m_SessionName = sessionName
    m_SessionState = sessionState
    m_SessionTicket = sessionTicket
    End Sub
    Public Sub setDocumentId(documentId As String)
    m_documentId = documentId
    End Sub
    Public Sub setLanguage(ByRef language As String)
    m_language = language
    End Sub
    Public Sub setAppsServletAgent(appsServletAgent As String)
    m_appsServletAgent = appsServletAgent
    End Sub
    Public Sub addEventCallBack(l_sProcedure As String, l_sEventName As String, Optional l_oSheet As Object)
    If l_oSheet Is Nothing Then
    m_EventCallBacks.add l_sProcedure, l_sEventName
    Else
    If Len(l_oSheet.Parent.path) = 0 Then
    m_EventCallBacks.add "'" & l_oSheet.Parent.FullName & "'" & "!" & l_oSheet.CodeName & "." & l_sProcedure, l_sEventName
    Else
    m_EventCallBacks.add l_oSheet.CodeName & "." & l_sProcedure, l_sEventName
    End If
    End If
    End Sub
    Public Function getEventCallBack(vEvent As Variant) As String
    On Error Resume Next
    Dim tmp As Variant
    tmp = m_EventCallBacks.Item(vEvent)
    If tmp = Empty Then
    If Right(vEvent, 5) = "_uixr" Then
    Dim s As String
    s = Left(vEvent, Len(vEvent) - 5)
    tmp = m_EventCallBacks.Item(s)
    End If
    End If
    getEventCallBack = tmp
    End Function
    Public Sub removeEventCallBack(vEvent As Variant)
    On Error Resume Next
    If Right(vEvent, 5) = "_uixr" Then
    Dim s As String
    s = Left(vEvent, Len(vEvent) - 5)
    m_EventCallBacks.Remove (s)
    Else
    m_EventCallBacks.Remove (vEvent)
    End If
    End Sub
    Public Sub clearAllEventCallBacks()
    Do Until m_EventCallBacks.count = 0
    m_EventCallBacks.Remove 1
    Loop
    End Sub
    Private Sub runCallback(strCallBack As String)
    Dim strSubName As String
    strSubName = getEventCallBack(strCallBack)
    If (Not WebBrowser Is Nothing) Then
    Set m_Document = WebBrowser.Document
    Set BneDocument = m_Document
    End If
    If Len(strSubName) > 0 And (Not m_Document Is Nothing) Then
    removeEventCallBack strCallBack
    Application.Run strSubName, m_Document
    End If
    End Sub
    Public Property Get Document() As Object
    Set Document = m_Document
    End Property
    Public Sub Navigate(ByVal location As String)
    Dim clsProperties As New BneVBAProperties
    Dim clsProperty As BneVBAProperty
    On Error Resume Next
    If m_SessionTicket <> "" Then
    If InStr(location, "ICX_SESSION_ID") = 0 Then
    location = location & "&ICX_SESSION_ID=" & m_SessionTicket
    End If
    Else
    If InStr(location, "ICX_SESSION_ID") = 0 Then
    Set clsProperty = clsProperties.getProperty("ICX_SESSION_ID")
    If Not clsProperty Is Nothing Then
    location = location & "&ICX_SESSION_ID=" & clsProperty.value
    End If
    End If
    End If
    WebBrowser.Navigate location
    End Sub
    Public Sub NavigatePost(ByVal sURL As String, ByVal oPostData As BneVBAParameters)
    On Error Resume Next
    Dim vPost     As Variant
    Dim vHeader   As Variant
    Dim vFlags    As Variant
    Dim vTarget   As Variant
    Dim abyte()   As Byte
    Dim iParamCnt As Long
    Dim sPostData As String
    Dim clsProperties As New BneVBAProperties
    Dim clsProperty As BneVBAProperty
    If isEmpty(oPostData.Item("ICX_SESSION_ID")) Then
    If Len(m_SessionTicket) > 0 Then
    oPostData.add "ICX_SESSION_ID", m_SessionTicket
    Else
    Set clsProperty = clsProperties.getProperty("ICX_SESSION_ID")
    If Not clsProperty Is Nothing Then
    oPostData.add "ICX_SESSION_ID", clsProperty.value
    Else
    Set clsProperty = clsProperties.getProperty("ICX_SESSION_ID_BOOTSTRAP")
    If Not clsProperty Is Nothing Then
    oPostData.add "ICX_SESSION_ID", clsProperty.value
    clsProperties.removeProperty ("ICX_SESSION_ID_BOOTSTRAP")
    End If
    End If
    End If
    End If
    If isEmpty(oPostData.Item("tzOffset")) Then
    oPostData.add "tzOffset", getTimeZoneOffset()
    End If
    If isEmpty(oPostData.Item("bne:embedded")) Then
    oPostData.add "bne:embedded", "true"
    End If
    If isEmpty(oPostData.Item("bne:documentId")) Then
    oPostData.add "bne:documentId", m_documentId
    End If
    If isEmpty(oPostData.Item("bne:language")) Then
    oPostData.add "bne:language", m_language
    End If
    oPostData.add "bne:login_host", m_appsServletAgent
    For iParamCnt = 1 To oPostData.count
    If iParamCnt > 1 Then sPostData = sPostData & "&"
    sPostData = sPostData & oPostData.Item(iParamCnt).name & "=" & UrlEncodeUtf8(oPostData.Item(iParamCnt).value)
    Next iParamCnt
    vHeader = "Content-Type: application/x-www-form-urlencoded" & vbCrLf
    abyte = StrConv(sPostData, vbFromUnicode)
    vPost = abyte
    If InStr(1, sURL, "?") > 0 Then
    sURL = sURL & "&"
    Else
    sURL = sURL & "?"
    End If
    sURL = sURL & "bne:encoding=UTF-8"
    Call WebBrowser.Navigate(sURL, vFlags, vTarget, vPost, vHeader)
    End Sub
    Private Sub UserForm_Initialize()
    m_LookAndFeel = BROWSER
    b_UploadBegin = False
    b_UploadComplete = False
    Set WebBrowser = Me.Controls.add("Shell.Explorer.2", "WebBrowser")
    With WebBrowser
    .MenuBar = False
    .StatusBar = False
    .AddressBar = False
    .RegisterAsBrowser = True
    .Silent = False
    End With
    Set m_Document = WebBrowser.Document
    Set BneDocument = m_Document
    UserForm_Resize
    Set m_EventCallBacks = New Collection
    m_strMsgHeader = "Error"
    m_strMsgBody = "The connection to the server is unavailable."
    m_strMsgAction1 = "Please contact your support representative."
    If Application.ShowWindowsInTaskbar = True Then
    Application.ShowWindowsInTaskbar = False
    Application.ShowWindowsInTaskbar = True
    End If
    End Sub
    Private Sub UserForm_Resize()
    ResizeForm
    End Sub
    Sub ResizeForm()
    On Error Resume Next
    WebBrowser.Move 0, 0, Me.InsideWidth, Me.InsideHeight
    End Sub
    Private Sub UserForm_Terminate()
    Call runCallback("CLOSE")
    Me.Controls.Remove "WebBrowser"
    Set WebBrowser = Nothing
    Set BneDocument = Nothing
    Set m_Document = Nothing
    Set m_EventCallBacks = Nothing
    Set m_SheetRef = Nothing
    End Sub
    Private Sub WebBrowser_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
    On Error Resume Next
    Dim caption As String
    If Progress > 0 Then
    caption = Me.caption
    If Left(caption, Len(PROGRESS_MESSAGE)) <> PROGRESS_MESSAGE Then
    caption = PROGRESS_MESSAGE & " "
    End If
    Me.caption = caption & "."
    Else
    Me.caption = m_caption
    End If
    End Sub
    Private Sub WebBrowser_WindowClosing(ByVal IsChildWindow As Boolean, Cancel As Boolean)
    Unload Me
    End Sub
    Private Sub WebBrowser_WindowSetResizable(ByVal Resizable As Boolean)
    If Resizable = False Then
    borderStyle = 3
    End If
    End Sub
    Private Sub WebBrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    On Error Resume Next
    Set m_Document = WebBrowser.Document
    Set BneDocument = m_Document
    If (Not m_Document Is Nothing) Then
    m_caption = StripURLFromTitle(m_Document.Title)
    Me.caption = m_caption
    If m_LookAndFeel = DIALOG Then
    m_Document.body.Style.Border = "1"
    m_Document.body.Style.margin = "5"
    m_Document.body.Style.padding = "0"
    m_Document.body.Style.overflow = "auto"
    End If
    If m_Document_Complete <> "" Then
    Application.Run m_Document_Complete, pDisp, m_Document
    End If
    If Mid(URL, 1, 6) = "res://" Then
    m_Document.body.innerHTML = WebBrowser_DocumentComplete_ERROR_MESSAGE
    m_Document.parentWindow.execScript "window.setTimeout(""window.status='EVENT=ERROR'"", 20000);", "javascript"
    End If
    End If
    End Sub
    Public Function StripURLFromTitle(lsTitle As String) As String
    On Error Resume Next
    lsTitle = Trim(lsTitle)
    If (InStr(1, lsTitle, "http://", vbTextCompare) = 1 Or InStr(1, lsTitle, "https://", vbTextCompare) = 1) And InStr(lsTitle, " - ") > 0 Then
    lsTitle = Mid(lsTitle, InStr(lsTitle, " - ") + 3)
    End If
    StripURLFromTitle = lsTitle
    End Function
    Public Function WebBrowser_DocumentComplete_ERROR_MESSAGE() As String
    Dim sCloseText As String
    Dim sCopyrightText As String
    sCloseText = "Close"
    sCopyrightText = "Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved."
    WebBrowser_DocumentComplete_ERROR_MESSAGE = "<br>" & "<table border='0' cellpadding='0' cellspacing='0' width='100%'>" & "  <tr><td style='font-family:Arial;color:#cc0000; font-size:16pt'>" & m_strMsgHeader & "</td></tr>" & "  <tr><td style='background-color:#336699' height='1' colspan='3'></td></tr>" & "  <tr><td width='100%' align='left'><br>" & "      <span style='font-family:Arial;color:#000000; font-size:10pt'><b>" & m_strMsgBody & "</b></span></td></tr>" & "  <tr><td><span style='font-family:Arial;color:#000000; font-size:10pt'>" & m_strMsgAction1 & "</span><br><br></td></tr>" & "  <tr><td><span style='font-family:Arial;color:#000000; font-size:10pt'>" & m_strMsgAction2 & "</span><br><br></td></tr>" & "  <tr><td style='background-color:#336699' height='1' colspan='3'></td></tr>" & "  <tr><td colspan='3' align='center'><span id='bne:messages'></span></td></tr>" & "  <tr><td colspan='3' align='right'><span id=""BNE:CANCEL""><input type='button' value='" & sCloseText & "' onclick='javascript:return false;'></span></td></tr>" & "  <tr><td width='100%' align='left'><br><span style='font-family:Arial;color:#000000; font-size:9pt'>" & sCopyrightText & "</span></td></tr>" & "</table>"
    End Function
    Private Sub WebBrowser_StatusTextChange(ByVal l_sStatusText As String)
    Dim l_sCallBack As String
    l_sCallBack = getWindowStatusEvent(l_sStatusText)
    Call runCallback(l_sCallBack)
    End Sub
    Private Function getWindowStatusEvent(ByVal statusText As String)
    If statusText <> "" And statusText <> WINDOW_STATUS_DONE Then
    If InStr(1, statusText, WINDOW_STATUS_EVENT & "=") Then
    getWindowStatusEvent = UCase(Mid(statusText, 7))
    Else
    getWindowStatusEvent = ""
    End If
    End If
    End Function
    Private Function BneDocument_onclick() As Boolean
    Dim curWnd As HTMLWindow2
    Dim curElement As IHTMLElement
    Dim elementName As String
    Set curWnd = BneDocument.parentWindow
    Set curElement = curWnd.event.srcElement
    elementName = curElement.id
    If m_Document_OnClick <> "" Then
    Application.Run m_Document_OnClick
    End If
    If Application.ShowWindowsInTaskbar = True Then
    Application.ShowWindowsInTaskbar = False
    Application.ShowWindowsInTaskbar = True
    End If
    BneDocument_onclick = True
    If InStr(elementName, "SubmitButton") > 0 Then
    BneDocument_onclick = False
    ElseIf Not curElement.parentElement Is Nothing Then
    If Not IsNull(curElement.parentElement.getAttribute("onclick")) Then
    If curElement.parentElement.getAttribute("onclick") <> "" Then
    BneDocument_onclick = False
    End If
    End If
    ElseIf Not IsNull(curElement.getAttribute("onclick")) Then
    If curElement.getAttribute("onclick") <> "" Then
    BneDocument_onclick = True
    End If
    End If
    End Function
    Public Sub setSheetRef(Sheet As Object)
    Set m_SheetRef = Sheet
    End Sub
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim strCallBack As String
    If CloseMode = vbFormControlMenu Then
    strCallBack = getEventCallBack("BNE:BROWSERCLOSE")
    If Len(strCallBack) > 0 Then
    removeEventCallBack "BNE:BROWSERCLOSE"
    Application.Run strCallBack
    Cancel = 1
    Else
    Set WebBrowser = Nothing
    Set BneDocument = Nothing
    Set m_Document = Nothing
    Set m_EventCallBacks = Nothing
    Set m_SheetRef = Nothing
    End If
    End If
    End Sub
    
    

    General
    Stream Path:VBA/BNEERROR
    VBA File Name:BNEERROR
    Stream Size:2267
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . . V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p . . . . . O D G F . $ d * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . & D $ h @ S . } z . . . . . . . . . . . . . . . . . . . . . . x . . . . & D $ h @ S . } z . . O D G F . $ d . . . . M E . . . . . . . . . . . . . . . . . . . . . ( . . . . . S . . . . . S . . . . . S . . . . 6 " . . . . . . . . . . N . 0 . { . F . C . F . B . 3 . D . 2 . A . - . A . 0 . F . A . - . 1 . 0 . 6 .
    Data Raw:01 16 03 00 06 00 01 00 00 8a 05 00 00 e4 00 00 00 10 02 00 00 b8 05 00 00 c6 05 00 00 56 07 00 00 04 00 00 00 01 00 00 00 ce c1 9a e3 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 70 00 ff ff 00 00 ca ac c5 14 4f 44 ad 47 bb b7 46 06 24 e2 a4 64 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BNEERROR"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Private Const ERR_BASE                    As Integer = 32000
    Private Const ERR_SAX_CANCEL              As Integer = 32001
    Private Const ERR_SAX_DOM_ERR             As Integer = 32002
    Property Get SAX_CANCEL() As Integer
    SAX_CANCEL = SAX_CANCEL
    End Property
    Property Get SAX_DOM_ERR() As Integer
    SAX_DOM_ERR = SAX_DOM_ERR
    End Property
    Private Sub Class_Initialize()
    End Sub
    Private Sub Class_Terminate()
    End Sub
    

    General
    Stream Path:VBA/BneBrowser
    VBA File Name:BneBrowser
    Stream Size:25492
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . L . . $ . . . . . . . X . . . . . . . . . . . . . . . . . . . . 0 . . . S M J . ( . . N ~ & M F N s > u ? : 9 J b V . I = . . . . W F P R O . . . . . . . . . . . . . . . . . . . . . . . . x . . . . W F P R O . . S M J . ( . . . . . M E . . . . . . . . . . . . . . . . . . . . . p . X . ` . @ . . 0 . H . ( . 8 . P . . . . . . S P . . . . S . . . . . S . . . . . S . . . . . ` j . . . . . ` . . . . . 0 L p . . . . . 0 . . . . . . < < . . . . . . < . . . . . "
    Data Raw:01 16 03 00 06 00 01 00 00 2e 20 00 00 e4 00 00 00 d4 02 00 00 d3 20 00 00 f9 20 00 00 89 4c 00 00 24 00 00 00 01 00 00 00 ce c1 ae 58 00 00 ff ff 01 00 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 30 01 ff ff 00 00 8f 53 9f a8 93 9b 4d 4a b0 f5 1a 85 bd a6 28 04 05 4e e1 e7 7e 26 f5 4d ab 46 4e ae df c6 db e2 73 3e 75 f7 3f 3a 39 4a 83 ef 62 56 19
    Attribute VB_Name = "BneBrowser"
    Attribute VB_Base = "0{E7E14E05-267E-4DF5-AB46-4EAEDFC6DBE2}{F7753E73-3A3F-4A39-83EF-62561949B23D}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Const BROWSER = 1
    Const DIALOG = 2
    Const WINDOW_STATUS_EVENT = "EVENT"
    Const WINDOW_STATUS_DONE = "Done"
    Const PROGRESS_MESSAGE = "Working "
    Dim WithEvents WebBrowser As WebBrowser
    Attribute WebBrowser.VB_VarHelpID = -1
    Dim WithEvents BneDocument As HTMLDocument
    Attribute BneDocument.VB_VarHelpID = -1
    Dim m_Document As IHTMLDocument2
    Dim m_EventCallBacks As Collection
    Dim m_Document_OnClick As String
    Dim m_Document_Complete As String
    Dim m_UploadBegin As String
    Dim m_UploadComplete As String
    Dim m_caption As String
    Dim m_URL As String
    Dim m_LookAndFeel As Integer
    Dim b_UploadBegin As Boolean
    Dim b_UploadComplete As Boolean
    Dim m_SessionName As String
    Dim m_SessionState As Boolean
    Dim m_SessionTicket As String
    Dim m_documentId As String
    Dim m_language As String
    Dim m_appsServletAgent As String
    Dim m_strMsgHeader As String
    Dim m_strMsgBody As String
    Dim m_strMsgAction1 As String
    Dim m_strMsgAction2 As String
    Dim m_SheetRef As Object
    Public Property Let sessionName(ByVal sessionName As String)
    m_SessionName = sessionName
    End Property
    Public Property Let sessionState(ByVal sessionState As Boolean)
    m_SessionState = sessionState
    End Property
    Public Property Let sessionTicket(ByVal sessionTicket As String)
    m_SessionTicket = sessionTicket
    End Property
    Public Property Let LookAndFeel(ByRef LookAndFeel As Integer)
    m_LookAndFeel = LookAndFeel
    End Property
    Public Property Let DOCUMENT_ONCLICK(ByVal value As String)
    m_Document_OnClick = value
    End Property
    Public Property Let DOCUMENT_COMPLETE(ByVal value As String)
    m_Document_Complete = value
    End Property
    Public Property Let UPLOADBEGIN(ByVal value As String)
    m_UploadBegin = value
    End Property
    Public Property Let UPLOADCOMPLETE(ByVal value As String)
    m_UploadComplete = value
    End Property
    Public Sub ErrorMessage(strMsgHeader As String, strMsgBody As String, strMsgAction1 As String, strMsgAction2 As String)
    m_strMsgHeader = strMsgHeader
    m_strMsgBody = strMsgBody
    m_strMsgAction1 = strMsgAction1
    m_strMsgAction2 = strMsgAction2
    End Sub
    Public Sub setSession(ByRef sessionName As String, ByRef sessionState As Boolean, ByRef sessionTicket As String)
    m_SessionName = sessionName
    m_SessionState = sessionState
    m_SessionTicket = sessionTicket
    End Sub
    Public Sub setDocumentId(documentId As String)
    m_documentId = documentId
    End Sub
    Public Sub setLanguage(ByRef language As String)
    m_language = language
    End Sub
    Public Sub setAppsServletAgent(appsServletAgent As String)
    m_appsServletAgent = appsServletAgent
    End Sub
    Public Sub addEventCallBack(l_sProcedure As String, l_sEventName As String, Optional l_oSheet As Object)
    If l_oSheet Is Nothing Then
    m_EventCallBacks.add l_sProcedure, l_sEventName
    Else
    If Len(l_oSheet.Parent.path) = 0 Then
    m_EventCallBacks.add "'" & l_oSheet.Parent.FullName & "'" & "!" & l_oSheet.CodeName & "." & l_sProcedure, l_sEventName
    Else
    m_EventCallBacks.add l_oSheet.CodeName & "." & l_sProcedure, l_sEventName
    End If
    End If
    End Sub
    Public Function getEventCallBack(vEvent As Variant) As String
    On Error Resume Next
    Dim tmp As Variant
    tmp = m_EventCallBacks.Item(vEvent)
    If tmp = Empty Then
    If Right(vEvent, 5) = "_uixr" Then
    Dim s As String
    s = Left(vEvent, Len(vEvent) - 5)
    tmp = m_EventCallBacks.Item(s)
    End If
    End If
    getEventCallBack = tmp
    End Function
    Public Sub removeEventCallBack(vEvent As Variant)
    On Error Resume Next
    If Right(vEvent, 5) = "_uixr" Then
    Dim s As String
    s = Left(vEvent, Len(vEvent) - 5)
    m_EventCallBacks.Remove (s)
    Else
    m_EventCallBacks.Remove (vEvent)
    End If
    End Sub
    Public Sub clearAllEventCallBacks()
    Do Until m_EventCallBacks.count = 0
    m_EventCallBacks.Remove 1
    Loop
    End Sub
    Private Sub runCallback(strCallBack As String)
    Dim strSubName As String
    strSubName = getEventCallBack(strCallBack)
    If (Not WebBrowser Is Nothing) Then
    Set m_Document = WebBrowser.Document
    Set BneDocument = m_Document
    End If
    If Len(strSubName) > 0 And (Not m_Document Is Nothing) Then
    removeEventCallBack strCallBack
    Application.Run strSubName, m_Document
    End If
    End Sub
    Public Property Get Document() As Object
    Set Document = m_Document
    End Property
    Public Sub Navigate(ByVal location As String)
    Dim clsProperties As New BneVBAProperties
    Dim clsProperty As BneVBAProperty
    On Error Resume Next
    If m_SessionTicket <> "" Then
    If InStr(location, "ICX_SESSION_ID") = 0 Then
    location = location & "&ICX_SESSION_ID=" & m_SessionTicket
    End If
    Else
    If InStr(location, "ICX_SESSION_ID") = 0 Then
    Set clsProperty = clsProperties.getProperty("ICX_SESSION_ID")
    If Not clsProperty Is Nothing Then
    location = location & "&ICX_SESSION_ID=" & clsProperty.value
    End If
    End If
    End If
    WebBrowser.Navigate location
    End Sub
    Public Sub NavigatePost(ByVal sURL As String, ByVal oPostData As BneVBAParameters)
    On Error Resume Next
    Dim vPost     As Variant
    Dim vHeader   As Variant
    Dim vFlags    As Variant
    Dim vTarget   As Variant
    Dim abyte()   As Byte
    Dim iParamCnt As Long
    Dim sPostData As String
    Dim clsProperties As New BneVBAProperties
    Dim clsProperty As BneVBAProperty
    If isEmpty(oPostData.Item("ICX_SESSION_ID")) Then
    If Len(m_SessionTicket) > 0 Then
    oPostData.add "ICX_SESSION_ID", m_SessionTicket
    Else
    Set clsProperty = clsProperties.getProperty("ICX_SESSION_ID")
    If Not clsProperty Is Nothing Then
    oPostData.add "ICX_SESSION_ID", clsProperty.value
    Else
    Set clsProperty = clsProperties.getProperty("ICX_SESSION_ID_BOOTSTRAP")
    If Not clsProperty Is Nothing Then
    oPostData.add "ICX_SESSION_ID", clsProperty.value
    clsProperties.removeProperty ("ICX_SESSION_ID_BOOTSTRAP")
    End If
    End If
    End If
    End If
    If isEmpty(oPostData.Item("tzOffset")) Then
    oPostData.add "tzOffset", getTimeZoneOffset()
    End If
    If isEmpty(oPostData.Item("bne:embedded")) Then
    oPostData.add "bne:embedded", "true"
    End If
    If isEmpty(oPostData.Item("bne:documentId")) Then
    oPostData.add "bne:documentId", m_documentId
    End If
    If isEmpty(oPostData.Item("bne:language")) Then
    oPostData.add "bne:language", m_language
    End If
    oPostData.add "bne:login_host", m_appsServletAgent
    For iParamCnt = 1 To oPostData.count
    If iParamCnt > 1 Then sPostData = sPostData & "&"
    sPostData = sPostData & oPostData.Item(iParamCnt).name & "=" & UrlEncodeUtf8(oPostData.Item(iParamCnt).value)
    Next iParamCnt
    vHeader = "Content-Type: application/x-www-form-urlencoded" & vbCrLf
    abyte = StrConv(sPostData, vbFromUnicode)
    vPost = abyte
    If InStr(1, sURL, "?") > 0 Then
    sURL = sURL & "&"
    Else
    sURL = sURL & "?"
    End If
    sURL = sURL & "bne:encoding=UTF-8"
    Call WebBrowser.Navigate(sURL, vFlags, vTarget, vPost, vHeader)
    End Sub
    Private Sub UserForm_Initialize()
    m_LookAndFeel = BROWSER
    b_UploadBegin = False
    b_UploadComplete = False
    Set WebBrowser = Me.Controls.add("Shell.Explorer.2", "WebBrowser")
    With WebBrowser
    .MenuBar = False
    .StatusBar = False
    .AddressBar = False
    .RegisterAsBrowser = True
    .Silent = False
    End With
    Set m_Document = WebBrowser.Document
    Set BneDocument = m_Document
    UserForm_Resize
    Set m_EventCallBacks = New Collection
    m_strMsgHeader = "Error"
    m_strMsgBody = "The connection to the server is unavailable."
    m_strMsgAction1 = "Please contact your support representative."
    If Application.ShowWindowsInTaskbar = True Then
    Application.ShowWindowsInTaskbar = False
    Application.ShowWindowsInTaskbar = True
    End If
    End Sub
    Private Sub UserForm_Resize()
    ResizeForm
    End Sub
    Sub ResizeForm()
    On Error Resume Next
    WebBrowser.Move 0, 0, Me.InsideWidth, Me.InsideHeight
    End Sub
    Private Sub UserForm_Terminate()
    Call runCallback("CLOSE")
    Me.Controls.Remove "WebBrowser"
    Set WebBrowser = Nothing
    Set BneDocument = Nothing
    Set m_Document = Nothing
    Set m_EventCallBacks = Nothing
    Set m_SheetRef = Nothing
    End Sub
    Private Sub WebBrowser_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
    On Error Resume Next
    Dim caption As String
    If Progress > 0 Then
    caption = Me.caption
    If Left(caption, Len(PROGRESS_MESSAGE)) <> PROGRESS_MESSAGE Then
    caption = PROGRESS_MESSAGE & " "
    End If
    Me.caption = caption & "."
    Else
    Me.caption = m_caption
    End If
    End Sub
    Private Sub WebBrowser_WindowClosing(ByVal IsChildWindow As Boolean, Cancel As Boolean)
    Unload Me
    End Sub
    Private Sub WebBrowser_WindowSetResizable(ByVal Resizable As Boolean)
    If Resizable = False Then
    borderStyle = 3
    End If
    End Sub
    Private Sub WebBrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    On Error Resume Next
    Set m_Document = WebBrowser.Document
    Set BneDocument = m_Document
    If (Not m_Document Is Nothing) Then
    m_caption = StripURLFromTitle(m_Document.Title)
    Me.caption = m_caption
    If m_LookAndFeel = DIALOG Then
    m_Document.body.Style.Border = "1"
    m_Document.body.Style.margin = "5"
    m_Document.body.Style.padding = "0"
    m_Document.body.Style.overflow = "auto"
    End If
    If m_Document_Complete <> "" Then
    Application.Run m_Document_Complete, pDisp, m_Document
    End If
    If Mid(URL, 1, 6) = "res://" Then
    m_Document.body.innerHTML = WebBrowser_DocumentComplete_ERROR_MESSAGE
    m_Document.parentWindow.execScript "window.setTimeout(""window.status='EVENT=ERROR'"", 20000);", "javascript"
    End If
    End If
    End Sub
    Public Function StripURLFromTitle(lsTitle As String) As String
    On Error Resume Next
    lsTitle = Trim(lsTitle)
    If (InStr(1, lsTitle, "http://", vbTextCompare) = 1 Or InStr(1, lsTitle, "https://", vbTextCompare) = 1) And InStr(lsTitle, " - ") > 0 Then
    lsTitle = Mid(lsTitle, InStr(lsTitle, " - ") + 3)
    End If
    StripURLFromTitle = lsTitle
    End Function
    Public Function WebBrowser_DocumentComplete_ERROR_MESSAGE() As String
    Dim sCloseText As String
    Dim sCopyrightText As String
    sCloseText = "Close"
    sCopyrightText = "Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved."
    WebBrowser_DocumentComplete_ERROR_MESSAGE = "<br>" & "<table border='0' cellpadding='0' cellspacing='0' width='100%'>" & "  <tr><td style='font-family:Arial;color:#cc0000; font-size:16pt'>" & m_strMsgHeader & "</td></tr>" & "  <tr><td style='background-color:#336699' height='1' colspan='3'></td></tr>" & "  <tr><td width='100%' align='left'><br>" & "      <span style='font-family:Arial;color:#000000; font-size:10pt'><b>" & m_strMsgBody & "</b></span></td></tr>" & "  <tr><td><span style='font-family:Arial;color:#000000; font-size:10pt'>" & m_strMsgAction1 & "</span><br><br></td></tr>" & "  <tr><td><span style='font-family:Arial;color:#000000; font-size:10pt'>" & m_strMsgAction2 & "</span><br><br></td></tr>" & "  <tr><td style='background-color:#336699' height='1' colspan='3'></td></tr>" & "  <tr><td colspan='3' align='center'><span id='bne:messages'></span></td></tr>" & "  <tr><td colspan='3' align='right'><span id=""BNE:CANCEL""><input type='button' value='" & sCloseText & "' onclick='javascript:return false;'></span></td></tr>" & "  <tr><td width='100%' align='left'><br><span style='font-family:Arial;color:#000000; font-size:9pt'>" & sCopyrightText & "</span></td></tr>" & "</table>"
    End Function
    Private Sub WebBrowser_StatusTextChange(ByVal l_sStatusText As String)
    Dim l_sCallBack As String
    l_sCallBack = getWindowStatusEvent(l_sStatusText)
    Call runCallback(l_sCallBack)
    End Sub
    Private Function getWindowStatusEvent(ByVal statusText As String)
    If statusText <> "" And statusText <> WINDOW_STATUS_DONE Then
    If InStr(1, statusText, WINDOW_STATUS_EVENT & "=") Then
    getWindowStatusEvent = UCase(Mid(statusText, 7))
    Else
    getWindowStatusEvent = ""
    End If
    End If
    End Function
    Private Function BneDocument_onclick() As Boolean
    Dim curWnd As HTMLWindow2
    Dim curElement As IHTMLElement
    Dim elementName As String
    Set curWnd = BneDocument.parentWindow
    Set curElement = curWnd.event.srcElement
    elementName = curElement.id
    If m_Document_OnClick <> "" Then
    Application.Run m_Document_OnClick
    End If
    If Application.ShowWindowsInTaskbar = True Then
    Application.ShowWindowsInTaskbar = False
    Application.ShowWindowsInTaskbar = True
    End If
    BneDocument_onclick = True
    If InStr(elementName, "SubmitButton") > 0 Then
    BneDocument_onclick = False
    ElseIf Not curElement.parentElement Is Nothing Then
    If Not IsNull(curElement.parentElement.getAttribute("onclick")) Then
    If curElement.parentElement.getAttribute("onclick") <> "" Then
    BneDocument_onclick = False
    End If
    End If
    ElseIf Not IsNull(curElement.getAttribute("onclick")) Then
    If curElement.getAttribute("onclick") <> "" Then
    BneDocument_onclick = True
    End If
    End If
    End Function
    Public Sub setSheetRef(Sheet As Object)
    Set m_SheetRef = Sheet
    End Sub
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Dim strCallBack As String
    If CloseMode = vbFormControlMenu Then
    strCallBack = getEventCallBack("BNE:BROWSERCLOSE")
    If Len(strCallBack) > 0 Then
    removeEventCallBack "BNE:BROWSERCLOSE"
    Application.Run strCallBack
    Cancel = 1
    Else
    Set WebBrowser = Nothing
    Set BneDocument = Nothing
    Set m_Document = Nothing
    Set m_EventCallBacks = Nothing
    Set m_SheetRef = Nothing
    End If
    End If
    End Sub
    
    

    General
    Stream Path:VBA/BneDownloadXSD
    VBA File Name:BneDownloadXSD
    Stream Size:11788
    Data ASCII:. . . . . . . . z . . . . . . ( . . . . . . $ . . . . . . . . . . S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . ( . . . . P . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . < . . . . . . . < 0 . . . . . . < 8 . . . . . . <
    Data Raw:01 16 03 00 01 f0 00 00 00 7a 10 00 00 d4 00 00 00 28 02 00 00 ff ff ff ff 83 10 00 00 b3 24 00 00 00 00 00 00 01 00 00 00 ce c1 53 e6 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneDownloadXSD"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private oXSDDoc As Object
    Private oXMLDoc As Object
    Private oColElements As Collection
    Private iPointer As Integer
    Private sErrorList() As String
    Public Property Set XSDNode(oXSDSection As Object)
    Set oXSDDoc = oXSDSection
    Call ProcessXSD
    End Property
    Public Property Set XMLNode(oXMLSection As Object)
    Dim oElement As BneXSDElement
    Set oXMLDoc = oXMLSection
    If oXMLDoc.ChildNodes.Length > 0 Then
    Call ProcessDataNode(oXMLDoc)
    End If
    End Property
    Public Property Get VBADataType(sKey As String) As String
    On Error GoTo ErrorHandler
    VBADataType = oColElements(sKey).VBADataType
    Exit Property
    ErrorHandler:
    VBADataType = "string"
    End Property
    Public Property Get InterfaceName(sKey As String) As String
    On Error GoTo ErrorHandler
    InterfaceName = oColElements(sKey).InterfaceName
    Exit Property
    ErrorHandler:
    InterfaceName = ""
    End Property
    Public Property Get ColumnName(sKey As String) As String
    On Error GoTo ErrorHandler
    ColumnName = oColElements(sKey).ColumnName
    Exit Property
    ErrorHandler:
    ColumnName = ""
    End Property
    Public Property Get DataArray(sKey As String)
    Dim aEmpty() As String
    On Error GoTo ErrorHandler
    DataArray = oColElements(sKey).DataArray
    Exit Property
    ErrorHandler:
    DataArray = aEmpty
    End Property
    Public Property Get RowCount(sKey As String) As Long
    On Error GoTo ErrorHandler
    RowCount = oColElements(sKey).RowCount
    Exit Property
    ErrorHandler:
    RowCount = 0
    End Property
    Public Property Get FirstKey() As String
    On Error GoTo ErrorHandler
    iPointer = 1
    FirstKey = oColElements(iPointer).path & "/" & oColElements(iPointer).name
    Exit Property
    ErrorHandler:
    FirstKey = ""
    End Property
    Public Property Get NextKey() As String
    On Error GoTo ErrorHandler
    iPointer = iPointer + 1
    NextKey = oColElements(iPointer).path & "/" & oColElements(iPointer).name
    Exit Property
    ErrorHandler:
    NextKey = ""
    End Property
    Public Property Get ErrorCount() As Integer
    On Error GoTo ErrorHandler
    ErrorCount = UBound(sErrorList)
    Exit Property
    ErrorHandler:
    ErrorCount = 0
    End Property
    Public Property Get ErrorMessage(iNumber As Integer) As String
    On Error GoTo ErrorHandler
    ErrorMessage = sErrorList(iNumber)
    Exit Property
    ErrorHandler:
    ErrorMessage = ""
    End Property
    Public Property Get ErrorMessages() As String
    On Error GoTo ErrorHandler
    ErrorMessages = Join(sErrorList, vbCrLf)
    Exit Property
    ErrorHandler:
    ErrorMessages = ""
    End Property
    Public Sub ProcessData()
    If oXMLDoc.ChildNodes.Length > 0 Then
    Call ProcessDataNode(oXMLDoc)
    End If
    End Sub
    Private Sub AddErrorToList(sMessage As String)
    On Error GoTo ErrorHandler
    ReDim Preserve sErrorList(UBound(sErrorList) + 1)
    sErrorList(UBound(sErrorList)) = sMessage
    Exit Sub
    ErrorHandler:
    ReDim sErrorList(1)
    sErrorList(UBound(sErrorList)) = sMessage
    End Sub
    Private Sub ProcessXSD()
    Dim oNode As Object
    Dim sPath As String
    Set oColElements = New Collection
    Set oNode = oXSDDoc.SelectSingleNode("xsd:element")
    Call ProcessType(oXSDDoc, oNode.Attributes.getNamedItem("name").text, oNode.Attributes.getNamedItem("type").text, sPath & "/" & oNode.Attributes.getNamedItem("name").text)
    End Sub
    Private Sub ProcessType(oNode As Object, sName As String, sType As String, sPath As String)
    Dim oType         As Object
    Dim oSequence     As Object
    Dim oElement      As Object
    Dim oXSDItem      As Object
    Dim sVBAType      As String
    Dim sInterface    As String
    Dim sColumn       As String
    Dim aTemp         As Variant
    On Error GoTo ErrorHandler
    Set oType = oXSDDoc.SelectSingleNode("xsd:complexType[@name='" & sType & "']")
    Set oSequence = oType.SelectSingleNode("xsd:sequence")
    For Each oElement In oSequence.ChildNodes
    Set oXSDItem = New BneXSDElement
    sVBAType = ConvertXSDTypeToVBAType(oElement.Attributes.getNamedItem("type").text)
    aTemp = Split(oElement.Attributes.getNamedItem("name").text, ".")
    If IsArray(aTemp) Then
    If UBound(aTemp) = 1 Then
    sInterface = aTemp(0)
    sColumn = aTemp(1)
    oXSDItem.setAttributes oElement.Attributes.getNamedItem("name").text, sPath, oElement.Attributes.getNamedItem("type").text, sVBAType, sInterface, sColumn
    oColElements.add oXSDItem, sPath & "/" & oElement.Attributes.getNamedItem("name").text
    End If
    End If
    Call ProcessType(oType, oElement.Attributes.getNamedItem("name").text, oElement.Attributes.getNamedItem("type").text, sPath & "/" & oElement.Attributes.getNamedItem("name").text)
    Next
    ErrorHandler:
    End Sub
    Private Function ConvertXSDTypeToVBAType(sXSDType As String) As String
    Select Case sXSDType
    Case "xsd:string"
    ConvertXSDTypeToVBAType = "string"
    Case "xsd:date"
    ConvertXSDTypeToVBAType = "date"
    Case "xsd:datetime"
    ConvertXSDTypeToVBAType = "datetime"
    Case "xsd:datetimetz"
    ConvertXSDTypeToVBAType = "datetime"
    Case "xsd:double"
    ConvertXSDTypeToVBAType = "double"
    Case "xsd:integer"
    ConvertXSDTypeToVBAType = "integer"
    Case Else
    ConvertXSDTypeToVBAType = "string"
    End Select
    End Function
    Private Sub ProcessDataNode(oCurrentNode As Object)
    Dim oDataRows As Object
    Dim oRow As Object
    Dim oChild As Object
    Dim nIndex As Long
    Dim sMsg As String
    Set oDataRows = oCurrentNode.SelectNodes("DataRow")
    On Error GoTo ErrorHandle_CurrentNode
    For Each oRow In oDataRows
    nIndex = CLng(oRow.getAttribute("id"))
    For Each oChild In oRow.ChildNodes
    DoEvents
    Call oColElements("/Data/DataRow/" & oChild.nodeName).setDataItem(nIndex, oChild.nodeTypedValue)
    Next
    ErrorHandle_CurrentNode:
    If Err <> 0 Then
    sMsg = "Error &VB_ERR_NUM: &VB_ERR_DESCRIPTION while processing download for column &DATA_NODE_NAME."
    sMsg = Replace(sMsg, "&DATA_NODE_NAME", oChild.nodeName)
    sMsg = Replace(sMsg, "&VB_ERR_NUM ", Err.Number)
    sMsg = Replace(sMsg, "&VB_ERR_DESCRIPTION", Err.Description)
    AddErrorToList (sMsg)
    End If
    Next
    End Sub
    

    General
    Stream Path:VBA/BneImageProperty
    VBA File Name:BneImageProperty
    Stream Size:2529
    Data ASCII:. . . . . . . . * . . . . . . . . . . 1 . . . U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . F . C . F . B . 3 . D . 2 . A . -
    Data Raw:01 16 03 00 01 f0 00 00 00 2a 06 00 00 d4 00 00 00 00 02 00 00 ff ff ff ff 31 06 00 00 55 08 00 00 00 00 00 00 01 00 00 00 ce c1 c4 17 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneImageProperty"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Private m_strImageId As String
    Private m_strImageURL As String
    
    Private Sub Class_Initialize()
    End Sub
    Private Sub Class_Terminate()
    End Sub
    Public Property Let imageId(strImageId As String)
    On Error Resume Next
    m_strImageId = strImageId
    End Property
    Public Property Get imageId() As String
    On Error Resume Next
    imageId = m_strImageId
    End Property
    Public Property Let imageURL(strImageURL As String)
    On Error Resume Next
    m_strImageURL = strImageURL
    End Property
    Public Property Get imageURL() As String
    On Error Resume Next
    imageURL = m_strImageURL
    End Property
    

    General
    Stream Path:VBA/BneLayout
    VBA File Name:BneLayout
    Stream Size:38008
    Data ASCII:. . . . . . . . . . ! . . . . . . . . ! . . ! . . r . . & . . . . . . . _ ( . . . . . . . . . . . . . . . . . . . . . . . . . G A r r . p * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . . I . . z . M - . . . . . . . . . . . . . . . . . . . . . . x . . . . . I . . z . M - . . G A r r . p . . . . M E . . . . . . . . . . . . . . . . . . . . . X . ( . H . . . 0 . @ . 8 . . . . . . S . . . . . S . . . . . S . . . . 0 6 . . . 6 . " . . . . . " . . . . . . 0 . . . . . " . . . . . . . < . . . . . . <
    Data Raw:01 16 03 00 06 00 01 00 00 12 21 00 00 e4 00 00 00 88 02 00 00 df 21 00 00 ed 21 00 00 f9 72 00 00 26 00 00 00 01 00 00 00 ce c1 5f 28 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff a0 00 ff ff 00 00 90 1f e9 e7 0f c1 c4 47 89 e7 41 72 72 c4 89 70 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneLayout"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_objSheet As Worksheet
    Private m_clsLayout As BneLayoutBlock
    Private m_clsStyleSheet As BneStyleSheet
    Private m_blnReadOnly As Boolean
    Private m_layoutImage As String
    Private m_colAllBlocks As Collection
    Private Sub Class_Initialize_0(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_operating_unit As New BneLayoutColumn
    clsp_operating_unit.isInterfaceColumn = True
    clsp_operating_unit.ColumnName = "P_OPERATING_UNIT"
    clsp_operating_unit.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_operating_unit.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_OPERATING_UNIT"
    clsp_operating_unit.Prompt = "OPERATING_UNIT"
    clsp_operating_unit.HintText = "* Text"
    clsp_operating_unit.Order = 1
    clsp_operating_unit.DataType = 2
    clsp_operating_unit.ColumnWidth = 15
    clsp_operating_unit.DefaultValue = "IT_RHIAG_IA"
    clsp_operating_unit.DefaultType = "SQL"
    clsp_operating_unit.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_operating_unit.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_operating_unit.ReadOnly = False
    clsp_operating_unit.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_operating_unit.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_operating_unit.TotalColumn = False
    clsp_operating_unit.ColumnFormat = "@"
    clsp_operating_unit.ValType = "TABLE"
    clsp_operating_unit.PopListNamedRange = "PopCache_XXPO_MASS_CPA_UPLOAD_PRC_P_OPERATING_UNIT"
    clsBlock1.addLayoutColumn clsp_operating_unit
    End Sub
    Private Sub Class_Initialize_1(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsbne_upload As New BneLayoutColumn
    clsbne_upload.isInterfaceColumn = False
    clsbne_upload.ColumnName = "BNE_UPLOAD"
    clsbne_upload.InterfaceColName = "BNE_UPLOAD"
    clsbne_upload.Prompt = "Upl"
    clsbne_upload.Order = 1
    clsbne_upload.DataType = 0
    clsbne_upload.ColumnWidth = 3
    clsbne_upload.DefaultValue = ""
    clsbne_upload.DefaultType = ""
    clsbne_upload.PromptStyle = m_clsStyleSheet.getStyle("")
    clsbne_upload.HintStyle = m_clsStyleSheet.getStyle("")
    clsbne_upload.ReadOnly = False
    clsbne_upload.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsbne_upload.ColumnStyle = m_clsStyleSheet.getStyle("ICON_STYLE")
    clsbne_upload.TotalColumn = False
    clsbne_upload.ColumnFormat = "General"
    clsbne_upload.ValType = ""
    clsbne_upload.GroupChildColumns = True
    clsBlock2.addLayoutColumn clsbne_upload
    End Sub
    Private Sub Class_Initialize_2(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_action As New BneLayoutColumn
    clsp_action.isInterfaceColumn = True
    clsp_action.ColumnName = "P_ACTION"
    clsp_action.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_action.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_ACTION"
    clsp_action.Prompt = "Action"
    clsp_action.HintText = "* Text"
    clsp_action.Order = 2
    clsp_action.DataType = 2
    clsp_action.ColumnWidth = 15
    clsp_action.DefaultValue = ""
    clsp_action.DefaultType = ""
    clsp_action.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_action.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_action.ReadOnly = False
    clsp_action.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_action.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_action.TotalColumn = False
    clsp_action.ColumnFormat = "@"
    clsp_action.ValType = "TABLE"
    clsp_action.PopListNamedRange = "PopCache_XXPO_MASS_CPA_UPLOAD_PRC_P_ACTION"
    clsBlock2.addLayoutColumn clsp_action
    End Sub
    Private Sub Class_Initialize_3(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_cpa_number As New BneLayoutColumn
    clsp_cpa_number.isInterfaceColumn = True
    clsp_cpa_number.ColumnName = "P_CPA_NUMBER"
    clsp_cpa_number.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_cpa_number.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_CPA_NUMBER"
    clsp_cpa_number.Prompt = "CPA Number"
    clsp_cpa_number.HintText = "* Text"
    clsp_cpa_number.Order = 3
    clsp_cpa_number.DataType = 2
    clsp_cpa_number.ColumnWidth = 15
    clsp_cpa_number.DefaultValue = ""
    clsp_cpa_number.DefaultType = ""
    clsp_cpa_number.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_cpa_number.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_cpa_number.ReadOnly = False
    clsp_cpa_number.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_cpa_number.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_cpa_number.TotalColumn = False
    clsp_cpa_number.ColumnFormat = "@"
    clsp_cpa_number.ValType = ""
    clsBlock2.addLayoutColumn clsp_cpa_number
    End Sub
    Private Sub Class_Initialize_4(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_supplier_number As New BneLayoutColumn
    clsp_supplier_number.isInterfaceColumn = True
    clsp_supplier_number.ColumnName = "P_SUPPLIER_NUMBER"
    clsp_supplier_number.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_supplier_number.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_SUPPLIER_NUMBER"
    clsp_supplier_number.Prompt = "Supplier No."
    clsp_supplier_number.HintText = "Either Supplier No. OR Name is Mandatory"
    clsp_supplier_number.Order = 4
    clsp_supplier_number.DataType = 2
    clsp_supplier_number.ColumnWidth = 15
    clsp_supplier_number.DefaultValue = ""
    clsp_supplier_number.DefaultType = ""
    clsp_supplier_number.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_number.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_number.ReadOnly = False
    clsp_supplier_number.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_supplier_number.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_number.TotalColumn = False
    clsp_supplier_number.ColumnFormat = "@"
    clsp_supplier_number.ValType = ""
    clsBlock2.addLayoutColumn clsp_supplier_number
    End Sub
    Private Sub Class_Initialize_5(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_supplier_name As New BneLayoutColumn
    clsp_supplier_name.isInterfaceColumn = True
    clsp_supplier_name.ColumnName = "P_SUPPLIER_NAME"
    clsp_supplier_name.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_supplier_name.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_SUPPLIER_NAME"
    clsp_supplier_name.Prompt = "Supplier Name"
    clsp_supplier_name.HintText = "Text"
    clsp_supplier_name.Order = 5
    clsp_supplier_name.DataType = 2
    clsp_supplier_name.ColumnWidth = 15
    clsp_supplier_name.DefaultValue = ""
    clsp_supplier_name.DefaultType = ""
    clsp_supplier_name.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_name.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_name.ReadOnly = False
    clsp_supplier_name.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_supplier_name.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_name.TotalColumn = False
    clsp_supplier_name.ColumnFormat = "@"
    clsp_supplier_name.ValType = ""
    clsBlock2.addLayoutColumn clsp_supplier_name
    End Sub
    Private Sub Class_Initialize_6(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_supplier_site As New BneLayoutColumn
    clsp_supplier_site.isInterfaceColumn = True
    clsp_supplier_site.ColumnName = "P_SUPPLIER_SITE"
    clsp_supplier_site.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_supplier_site.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_SUPPLIER_SITE"
    clsp_supplier_site.Prompt = "Supplier Site"
    clsp_supplier_site.HintText = "* Text"
    clsp_supplier_site.Order = 6
    clsp_supplier_site.DataType = 2
    clsp_supplier_site.ColumnWidth = 15
    clsp_supplier_site.DefaultValue = ""
    clsp_supplier_site.DefaultType = ""
    clsp_supplier_site.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_site.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_site.ReadOnly = False
    clsp_supplier_site.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_supplier_site.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_site.TotalColumn = False
    clsp_supplier_site.ColumnFormat = "@"
    clsp_supplier_site.ValType = ""
    clsBlock2.addLayoutColumn clsp_supplier_site
    End Sub
    Private Sub Class_Initialize_7(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_cpa_line_no As New BneLayoutColumn
    clsp_cpa_line_no.isInterfaceColumn = True
    clsp_cpa_line_no.ColumnName = "P_CPA_LINE_NO"
    clsp_cpa_line_no.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_cpa_line_no.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_CPA_LINE_NO"
    clsp_cpa_line_no.Prompt = "CPA Line No."
    clsp_cpa_line_no.HintText = "Number"
    clsp_cpa_line_no.Order = 7
    clsp_cpa_line_no.DataType = 1
    clsp_cpa_line_no.ColumnWidth = 15
    clsp_cpa_line_no.DefaultValue = ""
    clsp_cpa_line_no.DefaultType = ""
    clsp_cpa_line_no.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_cpa_line_no.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_cpa_line_no.ReadOnly = False
    clsp_cpa_line_no.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_cpa_line_no.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_cpa_line_no.TotalColumn = False
    clsp_cpa_line_no.ColumnFormat = "General"
    clsp_cpa_line_no.ValType = ""
    clsBlock2.addLayoutColumn clsp_cpa_line_no
    End Sub
    Private Sub Class_Initialize_8(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_oracle_item As New BneLayoutColumn
    clsp_oracle_item.isInterfaceColumn = True
    clsp_oracle_item.ColumnName = "P_ORACLE_ITEM"
    clsp_oracle_item.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_oracle_item.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_ORACLE_ITEM"
    clsp_oracle_item.Prompt = "Oracle Item"
    clsp_oracle_item.HintText = "* Text"
    clsp_oracle_item.Order = 8
    clsp_oracle_item.DataType = 2
    clsp_oracle_item.ColumnWidth = 15
    clsp_oracle_item.DefaultValue = ""
    clsp_oracle_item.DefaultType = ""
    clsp_oracle_item.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_oracle_item.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_oracle_item.ReadOnly = False
    clsp_oracle_item.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_oracle_item.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_oracle_item.TotalColumn = False
    clsp_oracle_item.ColumnFormat = "@"
    clsp_oracle_item.ValType = ""
    clsBlock2.addLayoutColumn clsp_oracle_item
    End Sub
    Private Sub Class_Initialize_9(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_supplier_item As New BneLayoutColumn
    clsp_supplier_item.isInterfaceColumn = True
    clsp_supplier_item.ColumnName = "P_SUPPLIER_ITEM"
    clsp_supplier_item.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_supplier_item.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_SUPPLIER_ITEM"
    clsp_supplier_item.Prompt = "Supplier Item"
    clsp_supplier_item.HintText = "Text"
    clsp_supplier_item.Order = 9
    clsp_supplier_item.DataType = 2
    clsp_supplier_item.ColumnWidth = 15
    clsp_supplier_item.DefaultValue = ""
    clsp_supplier_item.DefaultType = ""
    clsp_supplier_item.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_item.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_item.ReadOnly = False
    clsp_supplier_item.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_supplier_item.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_supplier_item.TotalColumn = False
    clsp_supplier_item.ColumnFormat = "@"
    clsp_supplier_item.ValType = ""
    clsBlock2.addLayoutColumn clsp_supplier_item
    End Sub
    Private Sub Class_Initialize_10(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_valid_frm_dte As New BneLayoutColumn
    clsp_valid_frm_dte.isInterfaceColumn = True
    clsp_valid_frm_dte.ColumnName = "P_VALID_FRM_DTE"
    clsp_valid_frm_dte.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_valid_frm_dte.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_VALID_FRM_DTE"
    clsp_valid_frm_dte.Prompt = "Valid From Date"
    clsp_valid_frm_dte.HintText = "* Mandatory for Line Addition"
    clsp_valid_frm_dte.Order = 10
    clsp_valid_frm_dte.DataType = 3
    clsp_valid_frm_dte.ColumnWidth = 15
    clsp_valid_frm_dte.DefaultValue = ""
    clsp_valid_frm_dte.DefaultType = ""
    clsp_valid_frm_dte.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_valid_frm_dte.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_valid_frm_dte.ReadOnly = False
    clsp_valid_frm_dte.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_valid_frm_dte.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_valid_frm_dte.TotalColumn = False
    clsp_valid_frm_dte.ColumnFormat = "dd-MMM-yyyy"
    clsp_valid_frm_dte.ValType = ""
    clsBlock2.addLayoutColumn clsp_valid_frm_dte
    End Sub
    Private Sub Class_Initialize_11(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_valid_to_dte As New BneLayoutColumn
    clsp_valid_to_dte.isInterfaceColumn = True
    clsp_valid_to_dte.ColumnName = "P_VALID_TO_DTE"
    clsp_valid_to_dte.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_valid_to_dte.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_VALID_TO_DTE"
    clsp_valid_to_dte.Prompt = "Valid To Date"
    clsp_valid_to_dte.HintText = "Date"
    clsp_valid_to_dte.Order = 11
    clsp_valid_to_dte.DataType = 3
    clsp_valid_to_dte.ColumnWidth = 15
    clsp_valid_to_dte.DefaultValue = ""
    clsp_valid_to_dte.DefaultType = ""
    clsp_valid_to_dte.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_valid_to_dte.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_valid_to_dte.ReadOnly = False
    clsp_valid_to_dte.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_valid_to_dte.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_valid_to_dte.TotalColumn = False
    clsp_valid_to_dte.ColumnFormat = "dd-MMM-yyyy"
    clsp_valid_to_dte.ValType = ""
    clsBlock2.addLayoutColumn clsp_valid_to_dte
    End Sub
    Private Sub Class_Initialize_12(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_min_inv_level As New BneLayoutColumn
    clsp_min_inv_level.isInterfaceColumn = True
    clsp_min_inv_level.ColumnName = "P_MIN_INV_LEVEL"
    clsp_min_inv_level.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_min_inv_level.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_MIN_INV_LEVEL"
    clsp_min_inv_level.Prompt = "Min Inv Level"
    clsp_min_inv_level.HintText = "Number"
    clsp_min_inv_level.Order = 12
    clsp_min_inv_level.DataType = 1
    clsp_min_inv_level.ColumnWidth = 15
    clsp_min_inv_level.DefaultValue = ""
    clsp_min_inv_level.DefaultType = ""
    clsp_min_inv_level.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_min_inv_level.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_min_inv_level.ReadOnly = False
    clsp_min_inv_level.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_min_inv_level.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_min_inv_level.TotalColumn = False
    clsp_min_inv_level.ColumnFormat = "General"
    clsp_min_inv_level.ValType = ""
    clsBlock2.addLayoutColumn clsp_min_inv_level
    End Sub
    Private Sub Class_Initialize_13(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_max_inv_level As New BneLayoutColumn
    clsp_max_inv_level.isInterfaceColumn = True
    clsp_max_inv_level.ColumnName = "P_MAX_INV_LEVEL"
    clsp_max_inv_level.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_max_inv_level.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_MAX_INV_LEVEL"
    clsp_max_inv_level.Prompt = "Max Inv Level"
    clsp_max_inv_level.HintText = "Number"
    clsp_max_inv_level.Order = 13
    clsp_max_inv_level.DataType = 1
    clsp_max_inv_level.ColumnWidth = 15
    clsp_max_inv_level.DefaultValue = ""
    clsp_max_inv_level.DefaultType = ""
    clsp_max_inv_level.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_max_inv_level.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_max_inv_level.ReadOnly = False
    clsp_max_inv_level.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_max_inv_level.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_max_inv_level.TotalColumn = False
    clsp_max_inv_level.ColumnFormat = "General"
    clsp_max_inv_level.ValType = ""
    clsBlock2.addLayoutColumn clsp_max_inv_level
    End Sub
    Private Sub Class_Initialize_14(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_stock_level As New BneLayoutColumn
    clsp_stock_level.isInterfaceColumn = True
    clsp_stock_level.ColumnName = "P_STOCK_LEVEL"
    clsp_stock_level.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_stock_level.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_STOCK_LEVEL"
    clsp_stock_level.Prompt = "Stock Level"
    clsp_stock_level.HintText = "Number"
    clsp_stock_level.Order = 14
    clsp_stock_level.DataType = 1
    clsp_stock_level.ColumnWidth = 15
    clsp_stock_level.DefaultValue = ""
    clsp_stock_level.DefaultType = ""
    clsp_stock_level.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_stock_level.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_stock_level.ReadOnly = False
    clsp_stock_level.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_stock_level.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_stock_level.TotalColumn = False
    clsp_stock_level.ColumnFormat = "General"
    clsp_stock_level.ValType = ""
    clsBlock2.addLayoutColumn clsp_stock_level
    End Sub
    Private Sub Class_Initialize_15(clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsp_max_agreed_qty As New BneLayoutColumn
    clsp_max_agreed_qty.isInterfaceColumn = True
    clsp_max_agreed_qty.ColumnName = "P_MAX_AGREED_QTY"
    clsp_max_agreed_qty.InterfaceName = "XXPO_MASS_CPA_UPLOAD_PRC"
    clsp_max_agreed_qty.InterfaceColName = "XXPO_MASS_CPA_UPLOAD_PRC_P_MAX_AGREED_QTY"
    clsp_max_agreed_qty.Prompt = "Max Agreed QTY"
    clsp_max_agreed_qty.HintText = "Number"
    clsp_max_agreed_qty.Order = 15
    clsp_max_agreed_qty.DataType = 1
    clsp_max_agreed_qty.ColumnWidth = 15
    clsp_max_agreed_qty.DefaultValue = ""
    clsp_max_agreed_qty.DefaultType = ""
    clsp_max_agreed_qty.PromptStyle = m_clsStyleSheet.getStyle("")
    clsp_max_agreed_qty.HintStyle = m_clsStyleSheet.getStyle("")
    clsp_max_agreed_qty.ReadOnly = False
    clsp_max_agreed_qty.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsp_max_agreed_qty.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsp_max_agreed_qty.TotalColumn = False
    clsp_max_agreed_qty.ColumnFormat = "General"
    clsp_max_agreed_qty.ValType = ""
    clsBlock2.addLayoutColumn clsp_max_agreed_qty
    End Sub
    Private Sub Class_Initialize_16_0(clsmessages As BneLayoutColumn, clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsbne_messages_lamp As New BneLayoutColumn
    clsbne_messages_lamp.isInterfaceColumn = False
    clsbne_messages_lamp.ColumnName = "BNE_MESSAGES_LAMP"
    clsbne_messages_lamp.InterfaceColName = "BNE_MESSAGES_LAMP"
    clsbne_messages_lamp.Order = 1
    clsbne_messages_lamp.DataType = 0
    clsbne_messages_lamp.ColumnWidth = 3
    clsbne_messages_lamp.DefaultValue = ""
    clsbne_messages_lamp.DefaultType = ""
    clsbne_messages_lamp.PromptStyle = m_clsStyleSheet.getStyle("")
    clsbne_messages_lamp.HintStyle = m_clsStyleSheet.getStyle("")
    clsbne_messages_lamp.ReadOnly = False
    clsbne_messages_lamp.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsbne_messages_lamp.ColumnStyle = m_clsStyleSheet.getStyle("ICON_STYLE")
    clsbne_messages_lamp.TotalColumn = False
    clsbne_messages_lamp.ColumnFormat = "General"
    clsbne_messages_lamp.ValType = ""
    clsbne_messages_lamp.GroupChildColumns = True
    clsmessages.addChildColumn clsbne_messages_lamp
    End Sub
    Private Sub Class_Initialize_16_1(clsmessages As BneLayoutColumn, clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsbne_messages_hidden As New BneLayoutColumn
    clsbne_messages_hidden.isInterfaceColumn = False
    clsbne_messages_hidden.ColumnName = "BNE_MESSAGES_HIDDEN"
    clsbne_messages_hidden.InterfaceColName = "BNE_MESSAGES_HIDDEN"
    clsbne_messages_hidden.Order = 2
    clsbne_messages_hidden.DataType = 0
    clsbne_messages_hidden.ColumnWidth = 0
    clsbne_messages_hidden.DefaultValue = ""
    clsbne_messages_hidden.DefaultType = ""
    clsbne_messages_hidden.PromptStyle = m_clsStyleSheet.getStyle("")
    clsbne_messages_hidden.HintStyle = m_clsStyleSheet.getStyle("")
    clsbne_messages_hidden.ReadOnly = False
    clsbne_messages_hidden.ReadOnlyStyle = m_clsStyleSheet.getStyle("READ_ONLY")
    clsbne_messages_hidden.ColumnStyle = m_clsStyleSheet.getStyle("")
    clsbne_messages_hidden.TotalColumn = False
    clsbne_messages_hidden.ColumnFormat = "General"
    clsbne_messages_hidden.ValType = ""
    clsbne_messages_hidden.GroupChildColumns = True
    clsmessages.addChildColumn clsbne_messages_hidden
    End Sub
    Private Sub Class_Initialize_16_2(clsmessages As BneLayoutColumn, clsBlock1 As BneLayoutBlock, clsBlock2 As BneLayoutBlock)
    Dim clsbne_messages As New BneLayoutColumn
    clsbne_messages.isInterfaceColumn = False
    clsbne_messages.ColumnName = "BNE_MESSAGES"
    clsbne_messages.InterfaceColName = "

    General
    Stream Path:VBA/BneLayoutBlock
    VBA File Name:BneLayoutBlock
    Stream Size:30682
    Data ASCII:. . . . . . . . . . . . . . . . . . / . . / . . a . . @ . . . . . . . f F . . . . . . . . . . . . . . . . . . . . . . . . . f X # @ N c . . s c * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . : D q 7 - D . . ( . . . . . . . . . . . . . . . . . . . . . . x . . . . : D q 7 - D . . ( . f X # @ N c . . s c . . . . M E . . . . . . . . . . . . . . . . . . . . . P . ( . 8 . . . @ . 0 . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . 0 " . . . . . " . . . . . . " . . . . . . 0 6 . . . . . . <
    Data Raw:01 16 03 00 06 00 01 00 00 ba 2e 00 00 e4 00 00 00 88 02 00 00 86 2f 00 00 94 2f 00 00 98 61 00 00 40 00 00 00 01 00 00 00 ce c1 66 46 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 10 01 ff ff 00 00 03 66 58 23 ec e7 40 4e 8a 63 1c ca bb 73 63 90 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneLayoutBlock"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colLayoutBlocks As Collection
    Private m_colLayoutColumns As Collection
    Private m_strBlockText As String
    Private m_strBlockTitle As String
    Private m_strUserName As String
    Private m_intBlockId As Integer
    Private m_intPromptSpan As Integer
    Private m_intHintSpan As Integer
    Private m_intDataSpan As Integer
    Private m_strOrientation As String
    Private m_intStartRow As Long
    Private m_intStartCol As Integer
    Private m_intEndRow As Long
    Private m_intEndCol As Integer
    Private m_intBlockSize As Long
    Private m_clsParentBlock As BneLayoutBlock
    Private m_blnReadOnly As Boolean
    Private m_blnTotal As Boolean
    Private m_clsBlockStyle As BneStyle
    Private m_clsPromptStyle As BneStyle
    Private m_clsHintStyle As BneStyle
    Private m_clsSummaryStyle As BneStyle
    Private m_clsDataStyle As BneStyle
    Private m_clsTitleStyle As BneStyle
    Private m_strLayoutElement As String
    Private m_blnHidden As Boolean
    Private m_blnHideButton As Boolean
    Private Const SPACE As Integer = 2
    Public Sub Class_Initialize()
    Set m_colLayoutBlocks = New Collection
    Set m_colLayoutColumns = New Collection
    Set m_clsBlockStyle = New BneStyle
    Set m_clsPromptStyle = New BneStyle
    Set m_clsHintStyle = New BneStyle
    Set m_clsSummaryStyle = New BneStyle
    Set m_clsDataStyle = New BneStyle
    Set m_clsTitleStyle = New BneStyle
    m_blnReadOnly = False
    m_strOrientation = "VERTICAL"
    m_intPromptSpan = 1
    m_intDataSpan = 1
    m_intStartRow = 3
    m_intEndRow = 3
    m_intStartCol = 2
    m_intEndCol = 2
    m_intBlockId = 0
    End Sub
    Public Sub Class_Terminate()
    Set m_colLayoutBlocks = Nothing
    Set m_colLayoutColumns = Nothing
    Set m_clsParentBlock = Nothing
    Set m_clsBlockStyle = Nothing
    Set m_clsPromptStyle = Nothing
    Set m_clsHintStyle = Nothing
    Set m_clsSummaryStyle = Nothing
    Set m_clsDataStyle = Nothing
    Set m_clsTitleStyle = Nothing
    End Sub
    Public Property Let LayoutElement(strLayoutElement As String)
    m_strLayoutElement = strLayoutElement
    End Property
    Public Property Get LayoutElement() As String
    LayoutElement = m_strLayoutElement
    End Property
    Public Property Let BlockStyle(ByVal clsBlockStyle As BneStyle)
    If Not clsBlockStyle Is Nothing Then
    Set m_clsBlockStyle = clsBlockStyle
    End If
    End Property
    Public Property Get BlockStyle() As BneStyle
    Set BlockStyle = m_clsBlockStyle
    End Property
    Public Property Let PromptStyle(ByVal clsPromptStyle As BneStyle)
    If Not clsPromptStyle Is Nothing Then
    Set m_clsPromptStyle = clsPromptStyle
    End If
    End Property
    Public Property Get PromptStyle() As BneStyle
    Set PromptStyle = m_clsPromptStyle
    End Property
    Public Property Let DataStyle(ByVal clsDataStyle As BneStyle)
    If Not clsDataStyle Is Nothing Then
    Set m_clsDataStyle = clsDataStyle
    End If
    End Property
    Public Property Let TitleStyle(ByVal clsTitleStyle As BneStyle)
    If Not clsTitleStyle Is Nothing Then
    Set m_clsTitleStyle = clsTitleStyle
    End If
    End Property
    Public Property Get TitleStyle() As BneStyle
    Set TitleStyle = m_clsTitleStyle
    End Property
    Public Property Let HintStyle(ByVal clsHintStyle As BneStyle)
    If Not clsHintStyle Is Nothing Then
    Set m_clsHintStyle = clsHintStyle
    End If
    End Property
    Public Property Let SummaryStyle(ByVal clsSummaryStyle As BneStyle)
    If Not clsSummaryStyle Is Nothing Then
    Set m_clsSummaryStyle = clsSummaryStyle
    End If
    End Property
    Public Property Get SummaryStyle() As BneStyle
    Set SummaryStyle = m_clsSummaryStyle
    End Property
    Public Property Let BlockText(strLayoutText As String)
    m_strBlockText = strLayoutText
    End Property
    Public Property Let UserName(strUserName As String)
    m_strUserName = strUserName
    End Property
    Public Property Let PromptSpan(strPromptSpan As Integer)
    m_intPromptSpan = strPromptSpan
    End Property
    Public Property Let HintSpan(intHintSpan As Integer)
    m_intHintSpan = intHintSpan
    End Property
    Public Property Get HintSpan() As Integer
    HintSpan = m_intHintSpan
    End Property
    Public Property Let HideButton(blnHide As Boolean)
    m_blnHideButton = blnHide
    End Property
    Public Property Get HideButton() As Boolean
    HideButton = m_blnHideButton
    End Property
    Public Property Let DataSpan(intDataSpan As Integer)
    m_intDataSpan = intDataSpan
    End Property
    Public Property Let Orientation(strOrientation As String)
    m_strOrientation = strOrientation
    End Property
    Public Property Get Orientation() As String
    Orientation = m_strOrientation
    End Property
    Public Property Get HideHintText() As Boolean
    HideHintText = False
    If m_intHintSpan = 0 Then
    HideHintText = True
    End If
    End Property
    Public Property Get Total() As Boolean
    Total = m_blnTotal
    End Property
    Public Property Get ReadOnly() As Boolean
    ReadOnly = m_blnReadOnly
    End Property
    Public Property Get countBlocks() As Integer
    On Error Resume Next
    countBlocks = m_colLayoutBlocks.count
    End Property
    Public Property Get countDisplayedColumns() As Integer
    Dim intCount As Integer
    intCount = 0
    Dim clsLayoutColumn As BneLayoutColumn
    If m_colLayoutColumns.count > 0 Then
    For Each clsLayoutColumn In m_colLayoutColumns
    intCount = intCount + clsLayoutColumn.countDisplayedChildColumns
    If clsLayoutColumn.ColumnWidth > 0 And clsLayoutColumn.countDisplayedChildColumns = 0 Then
    intCount = intCount + 1
    End If
    Next
    End If
    countDisplayedColumns = intCount
    End Property
    Public Property Get CountColumns() As Integer
    Dim intCount As Integer
    intCount = 0
    Dim clsLayoutColumn As BneLayoutColumn
    If m_colLayoutColumns.count > 0 Then
    For Each clsLayoutColumn In m_colLayoutColumns
    If clsLayoutColumn.countChildColumns > 0 Then
    intCount = intCount + clsLayoutColumn.countChildColumns
    Else
    intCount = intCount + 1
    End If
    Next
    End If
    CountColumns = intCount
    End Property
    Public Property Get layoutColumns() As Collection
    Set layoutColumns = m_colLayoutColumns
    End Property
    Public Property Get layoutBlocks() As Collection
    Set layoutBlocks = m_colLayoutBlocks
    End Property
    Public Property Let BlockTitle(strBlockTitle As String)
    m_strBlockTitle = strBlockTitle
    End Property
    Public Property Let ParentBlock(ByVal clsParentBlock As BneLayoutBlock)
    Set m_clsParentBlock = clsParentBlock
    End Property
    Public Property Get ParentBlock() As BneLayoutBlock
    Set ParentBlock = m_clsParentBlock
    End Property
    Public Property Let BlockId(intBlockid As Integer)
    m_intBlockId = intBlockid
    End Property
    Public Property Get BlockId() As Integer
    BlockId = m_intBlockId
    End Property
    Public Property Let StartCol(intStartCol As Integer)
    m_intStartCol = intStartCol
    End Property
    Public Property Get StartCol() As Integer
    StartCol = m_intStartCol
    End Property
    Public Property Let StartRow(intStartRow As Long)
    m_intStartRow = intStartRow
    End Property
    Public Property Get StartRow() As Long
    StartRow = m_intStartRow
    End Property
    Public Property Let EndCol(intEndCol As Integer)
    m_intEndCol = intEndCol
    End Property
    Public Property Get EndCol() As Integer
    EndCol = m_intEndCol
    End Property
    Public Property Let EndRow(intEndRow As Long)
    m_intEndRow = intEndRow
    End Property
    Public Property Get EndRow() As Long
    EndRow = m_intEndRow
    End Property
    Public Property Let BLOCKSIZE(intBlockSize As Long)
    m_intBlockSize = intBlockSize
    End Property
    Public Property Get BLOCKSIZE() As Long
    BLOCKSIZE = m_intBlockSize
    End Property
    Public Property Let Hidden(blnHidden As Boolean)
    m_blnHidden = blnHidden
    End Property
    Public Sub addLayoutColumn(clsLayoutColumn As BneLayoutColumn)
    On Error Resume Next
    clsLayoutColumn.PromptSpan = m_intPromptSpan
    clsLayoutColumn.DataSpan = m_intDataSpan
    clsLayoutColumn.Orientation = m_strOrientation
    clsLayoutColumn.HintSpan = m_intHintSpan
    If m_blnReadOnly = True Then
    clsLayoutColumn.ReadOnly = True
    End If
    clsLayoutColumn.ColumnStyle.setParentStyle m_clsDataStyle
    clsLayoutColumn.PromptStyle.setParentStyle m_clsPromptStyle
    clsLayoutColumn.HintStyle.setParentStyle m_clsHintStyle
    clsLayoutColumn.SummaryStyle.setParentStyle m_clsSummaryStyle
    If clsLayoutColumn.countChildColumns > 0 Then
    Dim clsChildCol As BneLayoutColumn
    For Each clsChildCol In clsLayoutColumn.childColumns
    clsChildCol.PromptSpan = clsLayoutColumn.PromptSpan
    clsChildCol.HintSpan = clsLayoutColumn.HintSpan
    clsChildCol.DataSpan = clsLayoutColumn.DataSpan
    clsChildCol.Orientation = clsLayoutColumn.Orientation
    clsChildCol.ReadOnly = clsLayoutColumn.ReadOnly
    clsChildCol.PromptStyle.setParentStyle clsLayoutColumn.PromptStyle
    clsChildCol.HintStyle.setParentStyle clsLayoutColumn.HintStyle
    clsChildCol.ColumnStyle.setParentStyle clsLayoutColumn.ColumnStyle
    clsChildCol.SummaryStyle.setParentStyle clsLayoutColumn.SummaryStyle
    clsChildCol.Orientation = clsLayoutColumn.Orientation
    Next
    End If
    m_colLayoutColumns.add clsLayoutColumn, clsLayoutColumn.InterfaceColName
    If clsLayoutColumn.TotalColumn = True And m_strOrientation = "VERTICAL" Then
    m_blnTotal = True
    End If
    End Sub
    Public Sub applyReadOnlyStyle(blnReadOnly As Boolean)
    Dim clsBlock As BneLayoutBlock
    Dim clsColumn As BneLayoutColumn
    m_blnReadOnly = blnReadOnly
    For Each clsBlock In m_colLayoutBlocks
    For Each clsColumn In clsBlock.layoutColumns
    clsColumn.ReadOnly = m_blnReadOnly
    Next
    clsBlock.applyReadOnlyStyle m_blnReadOnly
    Next
    End Sub
    Public Function hasBlockTitle() As Boolean
    hasBlockTitle = False
    If Len(m_strBlockTitle) > 0 Then
    hasBlockTitle = True
    End If
    End Function
    Public Function hasBlockText() As Boolean
    hasBlockText = False
    If Len(m_strBlockText) > 0 Then
    hasBlockText = True
    End If
    End Function
    Public Sub addLayoutBlock(clsLayoutBlock As BneLayoutBlock)
    On Error Resume Next
    clsLayoutBlock.ParentBlock = Me
    m_colLayoutBlocks.add clsLayoutBlock, Str(clsLayoutBlock.BlockId)
    End Sub
    Private Function getLowestBlockRow(clsLayoutBlock As BneLayoutBlock)
    Dim intLastRow As Long
    Dim clsParentBlock As BneLayoutBlock
    Set clsParentBlock = clsLayoutBlock.ParentBlock
    If Not clsParentBlock Is Nothing Then
    intLastRow = clsParentBlock.EndRow
    If clsParentBlock.hasBlockText Then
    intLastRow = intLastRow + 1
    End If
    End If
    Dim clsParentParentBlock As BneLayoutBlock
    Set clsParentParentBlock = clsParentBlock.ParentBlock
    If Not clsParentParentBlock Is Nothing Then
    Dim clsChildBlock As BneLayoutBlock
    For Each clsChildBlock In clsParentParentBlock.layoutBlocks
    If clsChildBlock.EndRow > intLastRow Then
    intLastRow = clsChildBlock.EndRow
    End If
    Next
    End If
    getLowestBlockRow = intLastRow
    End Function
    Public Function getPreviousSibling() As BneLayoutBlock
    Dim clsSibling As BneLayoutBlock
    Dim clsPrevBlock As BneLayoutBlock
    Dim intSibEndCol As Integer
    intSibEndCol = m_intEndCol
    If (Not m_clsParentBlock Is Nothing) And (m_clsParentBlock.countBlocks > 1) Then
    For Each clsSibling In m_clsParentBlock.layoutBlocks
    If clsSibling.EndCol > intSibEndCol Then
    intSibEndCol = clsSibling.EndCol
    Set clsPrevBlock = clsSibling
    End If
    Next
    End If
    Set getPreviousSibling = clsPrevBlock
    End Function
    Public Sub positionBlock(intBlockid As Integer)
    If m_intBlockId = intBlockid Then
    If Not m_clsParentBlock Is Nothing Then
    If m_clsParentBlock.countBlocks > 1 Then
    Dim clsSibling As BneLayoutBlock
    Set clsSibling = getPreviousSibling()
    If Not clsSibling Is Nothing Then
    StartRow = clsSibling.StartRow
    StartCol = clsSibling.EndCol + SPACE
    Else
    StartRow = getLowestBlockRow(Me) + SPACE
    StartCol = SPACE
    End If
    Else
    StartRow = getLowestBlockRow(Me) + SPACE
    StartCol = SPACE
    End If
    End If
    If Me.Orientation = "HORIZONTAL" Then
    EndRow = StartRow + countDisplayedColumns - 1
    If hasBlockTitle Then
    EndRow = EndRow + 1
    End If
    EndCol = StartCol + m_intPromptSpan + m_intHintSpan + m_intDataSpan - 1
    Else
    EndRow = StartRow + m_intBlockSize 'prompt and block size
    If Not Me.HideHintText Then
    EndRow = EndRow + 1
    End If
    If m_blnTotal Then
    EndRow = EndRow + 1
    End If
    EndCol = StartCol + CountColumns - 1
    End If
    End If
    End Sub
    Private Sub applyBoxStyle(objSheet As Worksheet)
    Dim objBoxRange As Range
    Set objBoxRange = objSheet.Range(Cells(m_intStartRow, m_intStartCol), Cells(m_intEndRow, m_intEndCol))
    On Error Resume Next
    If Not Me.BlockStyle Is Nothing Then
    Me.BlockStyle.applyStyle objBoxRange
    End If
    End Sub
    Private Sub updateRegionRange(objSheet As Worksheet)
    Dim objRegionRange As Range
    Dim objBoxRange As Range
    On Error Resume Next
    Set objRegionRange = objSheet.Range(Me.LayoutElement)
    On Error GoTo ErrorHandler
    Set objBoxRange = objSheet.Range(Cells(m_intStartRow, m_intStartCol), Cells(m_intEndRow, m_intEndCol))
    If objRegionRange Is Nothing Then
    objSheet.Names.add Me.LayoutElement, objBoxRange, False
    If Me.LayoutElement = "CONTEXT" Or Me.LayoutElement = "HEADER" Or Me.LayoutElement = "LINE" Then
    Dim blkRange As Range
    Set blkRange = ActiveSheet.Range(Me.LayoutElement)
    If Me.LayoutElement = "LINE" Then
    Dim extLine As Range
    Dim cols As Integer
    Dim Rows As Integer
    cols = blkRange.Columns.count
    Rows = blkRange.Rows.count + 1
    Set extLine = blkRange.Resize(Rows, cols)
    extLine.Rows.Group
    Else
    blkRange.Rows.Group
    End If
    End If
    Else
    Set objRegionRange = Application.Union(objBoxRange, objRegionRange)
    objSheet.Names.add Me.LayoutElement, objRegionRange, False
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Block.updateRegionRange for " & Me.LayoutElement, "Error: " & Err.Description
    Exit Sub
    End Sub
    Private Sub renderBlockTitle(objSheet As Worksheet)
    Dim objTitleRange As Range
    If hasBlockTitle Then
    Set objTitleRange = objSheet.Range(Cells(StartRow, StartCol), Cells(StartRow, EndCol))
    If Not Me.TitleStyle Is Nothing Then
    Me.TitleStyle.applyStyle objTitleRange
    End If
    objTitleRange.value = m_strBlockTitle
    End If
    End Sub
    Private Sub renderTotal(objSheet As Worksheet)
    Dim objTotalRange As Range
    If m_blnTotal = True And m_strOrientation = "VERTICAL" And m_intStartCol <> m_intEndCol Then
    Set objTotalRange = objSheet.Range(Cells(m_intEndRow, m_intStartCol), Cells(m_intEndRow, m_intEndCol))
    objTotalRange.Columns(1).value = "Totals:"
    ActiveSheet.Names.add "TOTAL_LINE", objTotalRange, False
    If Not Me.SummaryStyle Is Nothing Then
    Me.SummaryStyle.applyStyle objTotalRange
    End If
    End If
    End Sub
    Public Sub render(objSheet As Worksheet, iBlockid As Integer)
    Dim clsBlock As BneLayoutBlock
    If m_intBlockId = iBlockid Then
    If m_blnHidden = False Then
    positionBlock iBlockid
    applyBoxStyle objSheet
    updateRegionRange objSheet
    renderBlockButton objSheet
    renderBlockTitle objSheet
    renderContent objSheet
    renderTotal objSheet
    renderBlockText objSheet
    Else
    renderContent objSheet
    End If
    For Each clsBlock In m_colLayoutBlocks
    clsBlock.render objSheet, clsBlock.BlockId
    Next
    Else
    For Each clsBlock In m_colLayoutBlocks
    clsBlock.render objSheet, iBlockid
    Next
    End If
    End Sub
    Private Sub renderBlockButton(objSheet As Worksheet)
    On Error GoTo ErrorHandler
    Dim objButton As Object
    Dim intCntButtons, intButtonWidth, intButtonOffset As Integer
    If Me.HideButton = True Then
    Exit Sub
    End If
    For Each objButton In objSheet.Buttons
    If objButton.name = Me.LayoutElement Then
    Exit Sub
    End If
    Next
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Block.renderBlockButton for " & Me.LayoutElement, "Error: " & Err.Description
    Exit Sub
    End Sub
    Private Sub renderContent(objSheet As Worksheet)
    Dim clsColumn As BneLayoutColumn
    Dim intContentStartRow As Long
    intContentStartRow = m_intStartRow
    If Me.hasBlockTitle Then
    intContentStartRow = m_intStartRow + 1
    End If
    If CountColumns > 0 Then
    For Each clsColumn In m_colLayoutColumns
    If m_strOrientation = "HORIZONTAL" Then
    clsColumn.StartCol = m_intStartCol
    clsColumn.EndCol = m_intEndCol
    clsColumn.StartRow = intContentStartRow + clsColumn.Order - 1
    clsColumn.EndRow = clsColumn.StartRow
    clsColumn.render objSheet
    Else
    clsColumn.StartCol = m_intStartCol + clsColumn.Order - 1
    clsColumn.EndCol = clsColumn.StartCol
    If clsColumn.countChildColumns > 0 Then
    clsColumn.EndCol = clsColumn.EndCol + clsColumn.countChildColumns - 1
    End If
    clsColumn.StartRow = intContentStartRow
    If m_blnTotal = True Then
    clsColumn.EndRow = m_intEndRow - 1
    Else
    clsColumn.EndRow = m_intEndRow
    End If
    clsColumn.render objSheet
    End If
    Next
    End If
    End Sub
    Public Sub renderBlockText(objSheet As Worksheet)
    Dim objContentRange As Range
    If Len(m_strBlockText) > 0 Then
    Set objContentRange = objSheet.Range(Cells(m_intEndRow + 1, m_intStartCol), Cells(m_intEndRow + 1, m_intStartCol))
    objContentRange.value = m_strBlockText
    ActiveSheet.Names.add "TIP_LINE", objContentRange, False
    Range(ActiveSheet.Names("TIP_LINE")).Font.Bold = True
    End If
    End Sub
    

    General
    Stream Path:VBA/BneLayoutColumn
    VBA File Name:BneLayoutColumn
    Stream Size:29466
    Data ASCII:. . . . . . . . . 1 . . . . . . . . 2 . . 2 . . ^ . . J . . . . . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . . v 2 b G F . d . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . p * Z P G O - C * . . . . . . . . . . . . . . . . . . . . . . . x . . . . p * Z P G O - C * . . . v 2 b G F . d . . . . . M E . . . . . . . . . . . . . . . . . . . . . X . H . . 0 . . . 8 . ( . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . " . . . . . . 0 " . . . . . 0 6 . . . . . 0 . . . . . . . <
    Data Raw:01 16 03 00 06 00 01 00 00 da 31 00 00 e4 00 00 00 88 02 00 00 95 32 00 00 a3 32 00 00 a7 5e 00 00 4a 00 00 00 01 00 00 00 ce c1 7f e1 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 40 01 ff ff 00 00 01 08 76 fd 32 a4 62 47 b0 b4 46 d2 83 64 d9 15 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneLayoutColumn"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colChildColumns As Collection
    Private m_strPrompt As String
    Private m_strHintText As String
    Private m_intOrder As Integer
    Private m_strColumnName As String
    Private m_strInterfaceColName As String
    Private m_intStartRow As Long
    Private m_intStartCol As Integer
    Private m_intEndRow As Long
    Private m_intEndCol As Integer
    Private m_intPromptSpan As Integer
    Private m_intHintSpan As Integer
    Private m_intDataSpan As Integer
    Private m_strOrientation As String
    Private m_intColumnWidth As Integer
    Private m_blnReadOnly As Boolean
    Private m_blnTotalColumn As Boolean
    Private m_varDefaultValue As Variant
    Private m_strDefaultType As String
    Private m_strColumnFormat As String
    Private m_intDataType As Integer
    Private m_blnInterfaceColumn As Boolean
    Private m_clsPromptStyle As BneStyle
    Private m_clsSummaryStyle As BneStyle
    Private m_clsHintStyle As BneStyle
    Private m_clsStyle As BneStyle
    Private m_clsReadOnlyStyle As BneStyle
    Private m_strPopListNamedRange As String
    Private m_strInterfaceName As String
    Private m_blnGroupChildCols As Boolean
    Private m_strValType As String
    Private Sub Class_Initialize()
    Set m_colChildColumns = New Collection
    Set m_clsPromptStyle = New BneStyle
    Set m_clsHintStyle = New BneStyle
    Set m_clsSummaryStyle = New BneStyle
    Set m_clsStyle = New BneStyle
    Set m_clsReadOnlyStyle = New BneStyle
    m_blnGroupChildCols = False
    End Sub
    Public Sub Class_Terminate()
    Set m_colChildColumns = Nothing
    Set m_clsPromptStyle = Nothing
    Set m_clsHintStyle = Nothing
    Set m_clsSummaryStyle = Nothing
    Set m_clsStyle = Nothing
    Set m_clsReadOnlyStyle = Nothing
    End Sub
    Public Property Let InterfaceName(strInterfaceName As String)
    m_strInterfaceName = strInterfaceName
    End Property
    Public Property Get InterfaceName() As String
    InterfaceName = m_strInterfaceName
    End Property
    Public Property Let ColumnFormat(strColumnFormat As String)
    m_strColumnFormat = strColumnFormat
    End Property
    Public Property Get ColumnFormat() As String
    ColumnFormat = m_strColumnFormat
    End Property
    Public Property Let PromptStyle(ByVal clsPromptStyle As BneStyle)
    If Not clsPromptStyle Is Nothing Then
    Set m_clsPromptStyle = clsPromptStyle
    End If
    End Property
    Public Property Get PromptStyle() As BneStyle
    Set PromptStyle = m_clsPromptStyle
    End Property
    Public Property Let HintStyle(ByVal clsHintStyle As BneStyle)
    If Not clsHintStyle Is Nothing Then
    Set m_clsHintStyle = clsHintStyle
    End If
    End Property
    Public Property Get HintStyle() As BneStyle
    Set HintStyle = m_clsHintStyle
    End Property
    Public Property Let SummaryStyle(ByVal clsSummaryStyle As BneStyle)
    If Not clsSummaryStyle Is Nothing Then
    Set m_clsSummaryStyle = clsSummaryStyle
    End If
    End Property
    Public Property Get SummaryStyle() As BneStyle
    Set SummaryStyle = m_clsSummaryStyle
    End Property
    Public Property Let ColumnStyle(ByVal clsColumnStyle As BneStyle)
    If Not clsColumnStyle Is Nothing Then
    Set m_clsStyle = clsColumnStyle
    End If
    End Property
    Public Property Get ColumnStyle() As BneStyle
    Set ColumnStyle = m_clsStyle
    End Property
    Public Property Let ReadOnlyStyle(ByVal clsReadOnlyStyle As BneStyle)
    If Not clsReadOnlyStyle Is Nothing Then
    Set m_clsReadOnlyStyle = clsReadOnlyStyle
    End If
    End Property
    Public Property Get ReadOnlyStyle() As BneStyle
    Set ReadOnlyStyle = m_clsReadOnlyStyle
    End Property
    Public Property Let GroupChildColumns(blnGrpChildCols As Boolean)
    m_blnGroupChildCols = blnGrpChildCols
    End Property
    Public Property Let ValType(strValType As String)
    m_strValType = strValType
    End Property
    Public Property Get ValType() As String
    ValType = m_strValType
    End Property
    Public Sub addChildColumn(clsLayoutColumn As BneLayoutColumn)
    On Error Resume Next
    clsLayoutColumn.PromptSpan = m_intPromptSpan
    clsLayoutColumn.HintSpan = m_intHintSpan
    clsLayoutColumn.DataSpan = m_intDataSpan
    If m_blnReadOnly = True Then
    clsLayoutColumn.ReadOnly = True
    End If
    m_colChildColumns.add clsLayoutColumn
    End Sub
    Public Property Get childColumns() As Collection
    Set childColumns = m_colChildColumns
    End Property
    Public Sub removeChildColumn(strKey As String)
    On Error Resume Next
    m_colChildColumns.Remove strKey
    End Sub
    Public Property Get countChildColumns() As Integer
    On Error Resume Next
    countChildColumns = m_colChildColumns.count
    End Property
    Public Property Get countDisplayedChildColumns() As Integer
    On Error Resume Next
    Dim intCount As Integer
    intCount = 0
    Dim clsChildCol As BneLayoutColumn
    For Each clsChildCol In m_colChildColumns
    If clsChildCol.ColumnWidth > 0 Then
    intCount = intCount + 1
    End If
    Next
    countDisplayedChildColumns = intCount
    End Property
    Public Property Let DataType(intTypeID As Integer)
    m_intDataType = intTypeID
    End Property
    Public Property Get DataType() As Integer
    DataType = m_intDataType
    End Property
    Public Property Let DefaultValue(varDefaultValue As Variant)
    m_varDefaultValue = varDefaultValue
    End Property
    Public Property Get DefaultValue() As Variant
    DefaultValue = m_varDefaultValue
    End Property
    Public Property Let DefaultType(strDefaultType As String)
    m_strDefaultType = strDefaultType
    End Property
    Public Property Get DefaultType() As String
    DefaultType = m_strDefaultType
    End Property
    Public Property Let TotalColumn(blnTotalColumn As Boolean)
    m_blnTotalColumn = blnTotalColumn
    End Property
    Public Property Get TotalColumn() As Boolean
    TotalColumn = m_blnTotalColumn
    End Property
    Public Property Let ReadOnly(blnReadOnly As Boolean)
    m_blnReadOnly = blnReadOnly
    End Property
    Public Property Get ReadOnly() As Boolean
    ReadOnly = m_blnReadOnly
    End Property
    Public Property Let isInterfaceColumn(blnIsInterfaceColumn As Boolean)
    m_blnInterfaceColumn = blnIsInterfaceColumn
    End Property
    Public Property Get isInterfaceColumn() As Boolean
    isInterfaceColumn = m_blnInterfaceColumn
    End Property
    Public Property Let ColumnWidth(intColumnWidth As Integer)
    m_intColumnWidth = intColumnWidth
    End Property
    Public Property Get ColumnWidth() As Integer
    ColumnWidth = m_intColumnWidth
    End Property
    Public Property Let Orientation(strOrientation As String)
    m_strOrientation = strOrientation
    End Property
    Public Property Get Orientation() As String
    Orientation = m_strOrientation
    End Property
    Public Property Let PromptSpan(intPromptSpan As Integer)
    m_intPromptSpan = intPromptSpan
    End Property
    Public Property Get PromptSpan() As Integer
    PromptSpan = m_intPromptSpan
    End Property
    Public Property Let HintSpan(intHintSpan As Integer)
    m_intHintSpan = intHintSpan
    End Property
    Public Property Get HintSpan() As Integer
    HintSpan = m_intHintSpan
    End Property
    Public Property Let DataSpan(intDataSpan As Integer)
    m_intDataSpan = intDataSpan
    End Property
    Public Property Get DataSpan() As Integer
    DataSpan = m_intDataSpan
    End Property
    Public Property Get HideHintText() As Boolean
    HideHintText = False
    If m_intHintSpan = 0 Then
    HideHintText = True
    End If
    End Property
    Public Property Let StartCol(intStartCol As Integer)
    m_intStartCol = intStartCol
    End Property
    Public Property Get StartCol() As Integer
    StartCol = m_intStartCol
    End Property
    Public Property Let StartRow(intStartRow As Long)
    m_intStartRow = intStartRow
    End Property
    Public Property Get StartRow() As Long
    StartRow = m_intStartRow
    End Property
    Public Property Let EndCol(intEndCol As Integer)
    m_intEndCol = intEndCol
    End Property
    Public Property Get EndCol() As Integer
    EndCol = m_intEndCol
    End Property
    Public Property Let EndRow(intEndRow As Long)
    m_intEndRow = intEndRow
    End Property
    Public Property Get EndRow() As Long
    EndRow = m_intEndRow
    End Property
    Public Property Let ColumnName(strName As String)
    m_strColumnName = strName
    End Property
    Public Property Get ColumnName() As String
    ColumnName = m_strColumnName
    End Property
    Public Property Let InterfaceColName(strName As String)
    m_strInterfaceColName = strName
    End Property
    Public Property Get InterfaceColName() As String
    InterfaceColName = m_strInterfaceColName
    End Property
    Public Property Let Prompt(strPrompt As String)
    m_strPrompt = strPrompt
    End Property
    Public Property Get Prompt() As String
    Prompt = m_strPrompt
    End Property
    Public Property Let HintText(strHintText As String)
    m_strHintText = strHintText
    End Property
    Public Property Let Order(intOrder As Integer)
    m_intOrder = intOrder
    End Property
    Public Property Get Order() As Integer
    Order = m_intOrder
    End Property
    Public Property Let PopListNamedRange(strPopListNamedRange As String)
    m_strPopListNamedRange = strPopListNamedRange
    End Property
    Public Property Get PopListNamedRange() As String
    PopListNamedRange = m_strPopListNamedRange
    End Property
    Public Sub render(objSheet As Worksheet)
    Dim clsChildCol As BneLayoutColumn
    Dim objDataRange As Range
    If countChildColumns > 0 Then
    For Each clsChildCol In m_colChildColumns
    If m_strOrientation = "HORIZONTAL" Then
    clsChildCol.StartCol = m_intStartCol
    clsChildCol.EndCol = m_intEndCol
    clsChildCol.StartRow = m_intStartRow + clsChildCol.Order - 1
    clsChildCol.EndRow = clsChildCol.StartRow
    Else
    clsChildCol.StartCol = m_intStartCol + clsChildCol.Order - 1
    clsChildCol.EndCol = clsChildCol.StartCol
    clsChildCol.StartRow = m_intStartRow
    clsChildCol.EndRow = m_intEndRow
    End If
    clsChildCol.render objSheet
    Next
    applyColumnGroupStyle objSheet
    Else
    If m_strOrientation = "HORIZONTAL" Then
    If m_intColumnWidth > 0 Then
    renderPrompt objCellRange:=objSheet.Range(Cells(Me.StartRow, Me.StartCol), Cells(Me.EndRow, Me.StartCol + m_intPromptSpan - 1))
    If HintSpan > 0 Then
    renderHint objCellRange:=objSheet.Range(Cells(Me.StartRow, Me.StartCol + m_intPromptSpan), Cells(Me.EndRow, Me.StartCol + m_intPromptSpan + m_intHintSpan - 1))
    End If
    renderData objSheet, objCellRange:=objSheet.Range(Cells(Me.StartRow, Me.StartCol + m_intPromptSpan + m_intHintSpan), Cells(Me.EndRow, Me.EndCol))
    Else
    renderHiddenHorizontalData objSheet
    End If
    Else
    renderPrompt objCellRange:=objSheet.Range(Cells(Me.StartRow, Me.StartCol), Cells(Me.StartRow, Me.StartCol))
    If HideHintText = False Then
    Set objDataRange = objSheet.Range(Cells(Me.StartRow + 2, Me.StartCol), Cells(Me.EndRow, Me.StartCol))
    renderData objSheet, objCellRange:=objDataRange
    renderHint objCellRange:=objSheet.Range(Cells(Me.StartRow + 1, Me.StartCol), Cells(Me.StartRow + 1, Me.StartCol))
    Else
    Set objDataRange = objSheet.Range(Cells(Me.StartRow + 1, Me.StartCol), Cells(Me.EndRow, Me.StartCol))
    renderData objSheet, objCellRange:=objDataRange
    End If
    renderTotal objCellRange:=objSheet.Range(Cells(Me.EndRow + 1, Me.StartCol), Cells(Me.EndRow + 1, Me.StartCol)), clsFormulaData:=objDataRange
    End If
    End If
    End Sub
    Private Sub applyColumnGroupStyle(objSheet As Worksheet)
    Dim objCellRange As Range
    Dim intRow As Integer
    On Error GoTo ErrorHandler
    If m_blnGroupChildCols And m_strOrientation = "VERTICAL" Then
    intRow = m_intStartRow
    Set objCellRange = objSheet.Range(Cells(intRow + 1, m_intStartCol), Cells(m_intEndRow, m_intEndCol))
    With objCellRange.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .LineStyle = xlLineStyleNone
    End With
    If HideHintText = False Then
    intRow = intRow + 1
    If Len(m_strHintText) > 0 Then
    Set objCellRange = objSheet.Range(Cells(intRow, m_intStartCol), Cells(intRow, m_intEndCol))
    objCellRange.clearContents
    objCellRange.MergeCells = True
    objCellRange.value = m_strHintText
    End If
    End If
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "BneLayoutColumn.applyColumnGroupStyle", "Error: " & Err.Description
    Exit Sub
    End Sub
    Private Sub renderPrompt(objCellRange As Range)
    If (m_intPromptSpan > 0 Or m_strOrientation = "VERTICAL") Then
    If Not Me.PromptStyle Is Nothing Then
    Me.PromptStyle.applyStyle objCellRange
    End If
    objCellRange.NumberFormat = "@"
    objCellRange.value = m_strPrompt
    If m_strOrientation = "VERTICAL" Then
    If m_intColumnWidth = -1 Then
    objCellRange.Columns.AutoFit
    Else
    objCellRange.Columns.ColumnWidth = m_intColumnWidth
    End If
    End If
    End If
    End Sub
    Private Sub renderHint(objCellRange As Range)
    If m_intHintSpan > 0 Then
    If Not Me.HintStyle Is Nothing Then
    Me.HintStyle.applyStyle objCellRange
    End If
    If HideHintText = False Then
    objCellRange.value = m_strHintText
    End If
    End If
    End Sub
    Private Sub renderHiddenHorizontalData(objSheet As Worksheet)
    Dim objCellRange As Range
    Dim objIsect As Range
    Dim objName As name
    Dim blnEmptyCell As Boolean
    For Each objCellRange In objSheet.Rows(2).Cells
    If isEmpty(objCellRange) Then
    If objSheet.Names.count = 0 Then
    GoTo setHiddenValue
    Else
    For Each objName In objSheet.Names
    Set objIsect = Application.Intersect(objName.RefersToRange, objCellRange)
    If objIsect Is Nothing Then
    GoTo setHiddenValue
    Else
    Exit For
    End If
    Next
    End If
    End If
    Next
    Exit Sub
    setHiddenValue:
    objCellRange.NumberFormat = m_strColumnFormat
    objCellRange.value = m_varDefaultValue
    objSheet.Names.add m_strInterfaceColName, objCellRange, False
    Exit Sub
    End Sub
    Private Sub renderData(objSheet As Worksheet, objCellRange As Range)
    Dim clsMultiCells As Range
    Dim objStyleSheet As BneStyleSheet
    Dim objStyle As BneStyle
    Dim i As Long
    objCellRange.Select
    If Not Me.ColumnStyle Is Nothing Then
    Me.ColumnStyle.applyStyle objCellRange
    End If
    objCellRange.NumberFormat = m_strColumnFormat
    objCellRange.value = m_varDefaultValue
    If Me.ReadOnly Then
    If InStr(1, Me.ColumnName, "BNE_MESSAGES") > 0 Then
    BneApplyReadOnlyStyle objCellRange
    Else
    BneAddStaticReadOnly objCellRange, objSheet
    End If
    Else
    createPopList objCellRange
    End If
    If m_strOrientation = "VERTICAL" Then
    If Len(m_strColumnName) > 0 Then
    objSheet.Names.add m_strInterfaceColName, objCellRange, False
    End If
    Else
    If Len(m_strColumnName) > 0 Then
    objSheet.Names.add m_strInterfaceColName, objCellRange(columnIndex:=1), False
    End If
    End If
    End Sub
    Private Sub createPopList(objCellRange As Range)
    If Len(Me.PopListNamedRange) > 0 Then
    objCellRange.Validation.Delete
    On Error Resume Next
    objCellRange.Validation.add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & Me.PopListNamedRange
    If Err <> 0 Then
    AddBneMsg BNE_ERROR, Me.PopListNamedRange, "Error creating poplist: " & Err.Description
    Else
    objCellRange.Validation.ShowError = False
    objCellRange.Validation.ShowInput = True
    objCellRange.Validation.InCellDropdown = True
    End If
    On Error GoTo 0
    End If
    End Sub
    Private Sub renderTotal(objCellRange As Range, clsFormulaData As Range)
    Dim iRowCount As Long
    Dim iColumnCount As Integer
    If TotalColumn = True And m_strOrientation = "VERTICAL" Then
    If Not Me.SummaryStyle Is Nothing Then
    Me.SummaryStyle.applyStyle objCellRange
    End If
    iRowCount = clsFormulaData.Rows.count
    iColumnCount = clsFormulaData.Columns.count
    objCellRange.NumberFormat = "General"
    objCellRange.FormulaR1C1 = "=SUM(R[-" & iRowCount & "]C:R[-" & iColumnCount & "]C)"
    End If
    End Sub
    

    General
    Stream Path:VBA/BneRibbon
    VBA File Name:BneRibbon
    Stream Size:21289
    Data ASCII:. . . . . . . . . r . . . . . . 8 . . . . . . . . . @ . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . 6 . " < D * 8 E . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . N \\ . ~ ) N f . . . . . . . . . . . . . . . . . . . . . . . x . . . . N \\ . ~ ) N f . 6 . " < D * 8 E . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . . ( . P . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . . < . . . . . 0 . . . . . 6 " . . . . : . . . . . . . . . . . N . 0 . { . F . C
    Data Raw:01 16 03 00 06 00 01 00 00 72 1a 00 00 e4 00 00 00 38 02 00 00 da 1a 00 00 e8 1a 00 00 f0 40 00 00 1f 00 00 00 01 00 00 00 ce c1 80 2c 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff d0 00 ff ff 00 00 36 a9 18 22 f8 3c c5 44 95 2a 38 f3 ff a1 45 19 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneRibbon"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_strCustomuixml As String
    Private m_strCustomuiresxml As String
    Private m_strCustomuirelsxml As String
    Private m_strCustomuicontentxml As String
    Private m_blnCreateCustomUI As Boolean
    Private m_customuiImages As New Collection
    Private oXMLDocOrg          As Object
    Private oXMLDocAppend       As Object
    Private oXMLNodeAppendList  As Object
    Private oXMLNodeOrgList     As Object
    Private oXMLRelsOrgList     As Object
    Private fso                 As Object
    Private Sub Class_Initialize()
    m_blnCreateCustomUI = False
    Set fso = CreateObject("scripting.filesystemobject")
    End Sub
    Private Sub Class_Terminate()
    Set m_customuiImages = Nothing
    Set fso = Nothing
    Set oXMLDocOrg = Nothing
    Set oXMLDocAppend = Nothing
    Set oXMLNodeAppendList = Nothing
    Set oXMLNodeOrgList = Nothing
    Set oXMLRelsOrgList = Nothing
    End Sub
    Public Property Get customuixml() As String
    customuixml = m_strCustomuixml
    End Property
    Public Property Get customuiresxml() As String
    customuiresxml = m_strCustomuiresxml
    End Property
    Public Property Get customuirelsxml() As String
    customuirelsxml = m_strCustomuirelsxml
    End Property
    Public Property Get customuicontentxml() As String
    customuicontentxml = m_strCustomuicontentxml
    End Property
    Public Property Get isCreateCustomUI() As Boolean
    isCreateCustomUI = m_blnCreateCustomUI
    End Property
    Public Property Get customuiImages() As Collection
    Set customuiImages = m_customuiImages
    End Property
    Public Property Let isCreateCustomUI(blnCreateCustomUI As Boolean)
    m_blnCreateCustomUI = blnCreateCustomUI
    End Property
    Public Property Let customuixml(strCustomuixml As String)
    m_strCustomuixml = strCustomuixml
    End Property
    Public Property Let customuiresxml(strCustomuiresxml As String)
    m_strCustomuiresxml = strCustomuiresxml
    End Property
    Public Property Let customuirelsxml(strCustomuirelsxml As String)
    m_strCustomuirelsxml = strCustomuirelsxml
    End Property
    Public Property Let customuicontentxml(strCustomuicontentxml As String)
    m_strCustomuicontentxml = strCustomuicontentxml
    End Property
    
    Public Function addUIImage(id As String, URL As String)
    Dim objBneImageProperty As New BneImageProperty
    objBneImageProperty.imageId = id
    objBneImageProperty.imageURL = URL
    m_customuiImages.add objBneImageProperty, id
    End Function
    Public Function Clear()
    Set m_customuiImages = Nothing
    Set m_customuiImages = New Collection
    customuixml = ""
    customuiresxml = ""
    customuirelsxml = ""
    customuicontentxml = ""
    End Function
    Public Function createMenuForWorkBook(ByVal m_objWorkBook As Workbook) As String
    Dim tmpFolderName As String
    Dim tmpWorkBookName As String
    Dim tmpXlsFileName As String
    Dim tmpZipFileName As String
    Dim resultXlsFileName As String
    Dim resultZipFileName As String
    Dim resultWorkBook As Workbook
    Dim targetFolder As String
    Dim orignalWorkbookPath As String
    Dim ZipUnZipResult As Boolean
    On Error GoTo ErrHandler
    Application.DisplayAlerts = False
    targetFolder = GetTempFolder & "\"
    createFolder targetFolder
    tmpFolderName = getTemporaryName
    tmpWorkBookName = getTemporaryName
    orignalWorkbookPath = targetFolder & tmpWorkBookName & "_o.xlsm"
    tmpXlsFileName = tmpWorkBookName & ".xlsm"
    tmpZipFileName = tmpWorkBookName & ".zip"
    resultXlsFileName = tmpWorkBookName & ".xlsm"
    resultZipFileName = tmpWorkBookName & ".zip"
    deleteFolder targetFolder & tmpFolderName
    createFolder targetFolder & tmpFolderName
    clearFolderContents targetFolder & tmpFolderName
    deleteFile targetFolder & tmpXlsFileName
    m_objWorkBook.SaveAs orignalWorkbookPath, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled
    m_objWorkBook.SaveAs targetFolder & tmpXlsFileName, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled
    tmpWorkBookName = getTemporaryName
    tmpXlsFileName = tmpWorkBookName & ".xlsm"
    tmpZipFileName = tmpWorkBookName & ".zip"
    resultXlsFileName = tmpWorkBookName & ".xlsm"
    resultZipFileName = tmpWorkBookName & ".zip"
    m_objWorkBook.SaveCopyAs targetFolder & tmpXlsFileName
    
    Name targetFolder & tmpXlsFileName As targetFolder & tmpZipFileName
    ZipUnZipResult = UnZip(targetFolder & tmpZipFileName, targetFolder & tmpFolderName, True)
    If ZipUnZipResult = False Then
    GoTo ErrHandler
    End If
    deleteFile targetFolder & tmpZipFileName
    deleteFolder targetFolder & tmpFolderName & "\customUI\"
    createFolder targetFolder & tmpFolderName & "\customUI"
    saveUIXML targetFolder & tmpFolderName & "\customUI\customUI.xml", customuixml
    appendCustomUIRelsXML targetFolder & tmpFolderName & "\_rels\.rels", customuirelsxml
    appendContentTypeXML targetFolder & tmpFolderName & "\[Content_Types].xml", customuicontentxml
    createFolder targetFolder & tmpFolderName & "\customUI\_rels"
    saveUIItemRelsXML targetFolder & tmpFolderName & "\customUI\_rels\customUI.xml.rels", customuiresxml
    createFolder targetFolder & tmpFolderName & "\customUI\images"
    saveCustomUIIcon targetFolder & tmpFolderName & "\customUI\images"
    deleteFile targetFolder & resultZipFileName
    ZipUnZipResult = Zip(targetFolder & resultZipFileName, targetFolder & tmpFolderName)
    If ZipUnZipResult = False Then
    GoTo ErrHandler
    End If
    deleteFile targetFolder & resultXlsFileName
    Name targetFolder & resultZipFileName As targetFolder & resultXlsFileName
    deleteFolder targetFolder & tmpFolderName
    deleteFile orignalWorkbookPath
    createMenuForWorkBook = targetFolder & resultXlsFileName
    Application.DisplayAlerts = True
    Exit Function
    ErrHandler:
    Application.DisplayAlerts = True
    Dim i As Integer
    i = MsgBox("To use the Oracle Ribbon Menu, recreate the document. Alternatively, use the equivalent functionality available from the AddIns > Oracle menu.", vbOKOnly, "Warning")
    createMenuForWorkBook = orignalWorkbookPath
    End Function
    Public Function saveUIXML(customUIXMLFilePath As String, uiXML As String)
    Set oXMLDocOrg = getMSXMLDOMDocument
    oXMLDocOrg.loadXML uiXML
    oXMLDocOrg.Save customUIXMLFilePath
    Set oXMLDocOrg = Nothing
    End Function
    Public Function saveUIItemRelsXML(customUIItemRelsFilePath As String, relsXML As String)
    Set oXMLDocOrg = getMSXMLDOMDocument
    oXMLDocOrg.loadXML relsXML
    oXMLDocOrg.Save customUIItemRelsFilePath
    Set oXMLDocOrg = Nothing
    End Function
    Public Function appendContentTypeXML(contenFilePath As String, contentTypeXML As String)
    Dim i As Integer
    Set oXMLDocOrg = getMSXMLDOMDocument
    Set oXMLDocAppend = getMSXMLDOMDocument
    oXMLDocOrg.Load contenFilePath
    oXMLDocAppend.loadXML contentTypeXML
    Set oXMLNodeAppendList = oXMLDocAppend.SelectNodes("//Types")
    Set oXMLNodeOrgList = oXMLDocOrg.SelectNodes("//Types")
    If oXMLNodeAppendList.Length > 0 Then
    For i = 0 To oXMLNodeAppendList.Item(0).ChildNodes.Length - 1
    Dim oXMLElement As Object
    Set oXMLElement = oXMLNodeAppendList.Item(0).ChildNodes.Item(i)
    oXMLNodeOrgList.Item(0).appendChild oXMLElement
    Next
    End If
    oXMLDocOrg.Save contenFilePath
    Set oXMLDocOrg = Nothing
    Set oXMLDocAppend = Nothing
    Set oXMLNodeAppendList = Nothing
    Set oXMLNodeOrgList = Nothing
    End Function
    Public Function appendCustomUIRelsXML(customUIRelsFilePath As String, appendXML As String)
    Dim i As Integer
    Set oXMLDocOrg = getMSXMLDOMDocument
    Set oXMLDocAppend = getMSXMLDOMDocument
    oXMLDocOrg.Load customUIRelsFilePath
    oXMLDocAppend.loadXML appendXML
    Set oXMLNodeAppendList = oXMLDocAppend.SelectNodes("//Relationships//Relationship")
    Set oXMLRelsOrgList = oXMLDocOrg.SelectNodes("//Relationships")
    For i = 0 To oXMLNodeAppendList.Length - 1
    oXMLRelsOrgList.Item(0).appendChild oXMLNodeAppendList.Item(i)
    Next
    oXMLDocOrg.Save customUIRelsFilePath
    Set oXMLDocOrg = Nothing
    Set oXMLDocAppend = Nothing
    Set oXMLNodeAppendList = Nothing
    Set oXMLRelsOrgList = Nothing
    End Function
    Public Function saveCustomUIIcon(targetFolder As String)
    Dim intCnt As Long
    For intCnt = 1 To m_customuiImages.count
    On Error Resume Next
    BneGetFile m_customuiImages.Item(intCnt).imageURL, targetFolder & "\" & m_customuiImages.Item(intCnt).imageId & ".jpg"
    Next
    End Function
    Public Function BneGetFile(sURL As String, sOutFile As String) As Boolean
    Dim oMSXML As Object
    On Error GoTo ErrorHandler
    Set oMSXML = CreateHTTPObject()
    If oMSXML Is Nothing Then
    GoTo ErrorHandler
    End If
    oMSXML.Open "GET", sURL, False
    oMSXML.send
    If oMSXML.Status = 200 Then
    Dim liFn As Integer
    Dim aBytes() As Byte
    aBytes = oMSXML.responseBody
    liFn = FreeFile
    Open sOutFile For Binary Access Write As #liFn
    Put #liFn, , aBytes
    Close #liFn
    BneGetFile = True
    Else
    BneGetFile = False
    End If
    Set oMSXML = Nothing
    Exit Function
    ErrorHandler:
    Set oMSXML = Nothing
    BneGetFile = False
    End Function
    Public Function getMSXMLDOMDocument() As Object
    On Error Resume Next
    Dim objDOMDocument As Object
    Set objDOMDocument = CreateObject("MSXML2.DOMDocument")
    If Err Then
    Set objDOMDocument = CreateObject("MSXML.DOMDocument")
    End If
    Set getMSXMLDOMDocument = objDOMDocument
    End Function
    Public Function Zip(FileNameZip As Variant, FolderName As Variant) As Boolean
    Dim oApp As Object
    Dim i As Long
    NewZip (FileNameZip)
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(FileNameZip).CopyHere oApp.Namespace(FolderName).items
    On Error Resume Next
    DoEvents
    Application.Interactive = False
    Application.ScreenUpdating = False
    i = 0
    Do
    If i < 30 Then
    Application.Wait (Now + TimeValue("0:00:02"))
    ElseIf 30 <= i And i < 60 Then
    Application.Wait (Now + TimeValue("0:00:04"))
    ElseIf 60 <= i And i <= 100 Then
    Application.Wait (Now + TimeValue("0:00:06"))
    End If
    i = i + 1
    If i > 100 Then
    Zip = False
    Application.ScreenUpdating = True
    Application.Interactive = True
    Exit Function
    End If
    Loop Until oApp.Namespace(FileNameZip).items.count = oApp.Namespace(FolderName).items.count
    Application.ScreenUpdating = True
    Application.Interactive = True
    Zip = True
    Set oApp = Nothing
    End Function
    Private Function NewZip(sPath)
    If Len(Dir(sPath)) > 0 Then Kill sPath
    Open sPath For Output As #1
    Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
    End Function
    Public Function UnZip( ZipFile As String, Optional TargetFolderPath As String = vbNullString, Optional OverwriteFile As Boolean = False ) As Boolean
    On Error GoTo ErrHandler
    Dim oApp As Object
    Dim fil As Object
    Dim DefPath As String
    Dim strDate As String
    Dim isSuccess As Boolean
    isSuccess = True
    
    If Len(TargetFolderPath) = 0 Then
    DefPath = Application.CurrentProject.path & ""
    Else
    If fso.folderExists(TargetFolderPath) Then
    DefPath = TargetFolderPath & ""
    Else
    Err.Raise 53, , "Folder not found"
    End If
    End If
    
    If fso.FileExists(ZipFile) = False Then
    isSuccess = False
    GoTo ExitProc
    Else
    Set oApp = CreateObject("Shell.Application")
    
    With oApp.Namespace(ZipFile & "")
    If OverwriteFile Then
    For Each fil In .items
    If fso.FileExists(DefPath & fil.name) Then
    Kill DefPath & fil.name
    End If
    Next
    End If
    oApp.Namespace(CVar(DefPath)).CopyHere .items
    End With
    
    On Error Resume Next
    Kill Environ("Temp") & "Temporary Directory*"
    
    End If
    
    Set oApp = Nothing
    Set fil = Nothing
    ExitProc:
    On Error Resume Next
    Set oApp = Nothing
    UnZip = isSuccess
    Exit Function
    ErrHandler:
    Select Case Err.Number
    Case Else
    isSuccess = False
    End Select
    Resume ExitProc
    Resume
    End Function
    Public Function getTemporaryName() As String
    Dim tempFilename As String
    Dim tempName As String
    tempFilename = fso.GetTempName
    tempName = "bne" & Left(tempFilename, Len(tempFilename) - 4)
    getTemporaryName = tempName
    End Function
    Sub createFolder(filePath As String)
    If fso.folderExists(filePath) = False Then
    fso.createFolder filePath
    End If
    End Sub
    Sub deleteFolder(filePath As String)
    If fso.folderExists(filePath) = True Then
    fso.deleteFolder filePath
    End If
    End Sub
    Sub deleteFile(filePath As String)
    If fso.FileExists(filePath) Then
    fso.deleteFile filePath
    End If
    End Sub
    Sub clearFolderContents(filePath As String)
    On Error Resume Next
    fso.deleteFile filePath & "\*.*", True
    fso.deleteFolder filePath & "\*.*", True
    End Sub
    
    

    General
    Stream Path:VBA/BneRowInserter
    VBA File Name:BneRowInserter
    Stream Size:28704
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . [ R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . x . . . . 8 . @ . ` . 0 . ( . P . p . @ . . . . . S . . . . . S . . . . . S . . . . . < 6 . . . . . . < . . . . . . < .
    Data Raw:01 16 03 00 01 f0 00 00 00 0a 18 00 00 d4 00 00 00 18 03 00 00 ff ff ff ff 1f 18 00 00 5b 52 00 00 00 00 00 00 01 00 00 00 ce c1 8d c9 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneRowInserter"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private Const CONTENT_WORKSHEET_LIMIT As Integer = 0
    Private m_objFirstSheet As Worksheet
    Private m_objCurrentSheet As Worksheet
    Private m_lngTotalRowCount As Long
    Private m_lngTotalSheetRowCount As Long
    Private m_lngMaxRowsAllowable As Long
    Private m_objLinesRegion As Range
    Private m_strCurrentGroupName As String
    Private m_intCurrentGroupSheetCount As Integer
    Private m_intCurrentBookSheetCount As Integer
    Private m_intGroupCount As Integer
    Private m_blnUpload As Boolean
    Private m_objLayout As New BneLayout
    Private m_colNewSheets As New Collection
    Private m_colNewBooks As New Collection
    Private m_downloadIdentifier As String
    Private m_objFirstBook As Object
    Private m_objCurrentBook As Object
    Private m_sheetCount As Integer
    Public Property Let GroupName(strGroupName As String)
    Dim objProperties As BneVBAProperties
    Dim objProperty As BneVBAProperty
    m_intGroupCount = m_intGroupCount + 1
    m_intCurrentGroupSheetCount = 1
    m_strCurrentGroupName = strGroupName
    If m_intGroupCount > 1 Then
    m_intCurrentGroupSheetCount = 1
    Set m_objCurrentSheet = BneCopySheet(m_objFirstSheet, strGroupName, m_intCurrentGroupSheetCount, m_objCurrentSheet)
    Set m_objLinesRegion = Nothing
    m_lngTotalSheetRowCount = 0
    Else
    RenameSheet m_objCurrentSheet, strGroupName
    Set objProperties = New BneVBAProperties
    objProperties.setSheet m_objCurrentSheet
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupname"
    objProperty.value = strGroupName
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupsequence"
    objProperty.value = 1
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentidentifier"
    objProperty.value = m_downloadIdentifier
    objProperties.addProperty objProperty
    objProperties.setSheet Nothing
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentidentifier"
    objProperty.value = m_downloadIdentifier
    objProperties.addProperty objProperty
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupname"
    objProperty.value = strGroupName
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "BneWorkBookSequence"
    objProperty.value = m_intCurrentBookSheetCount
    objProperties.addProperty objProperty
    End If
    End Property
    Public Property Get GroupName() As String
    GroupName = m_strCurrentGroupName
    End Property
    Public Property Let UploadFlag(blnUpload As Boolean)
    Dim objProperties As BneVBAProperties
    Dim objProperty As BneVBAProperty
    m_blnUpload = blnUpload
    Set objProperties = New BneVBAProperties
    objProperties.setSheet m_objCurrentSheet
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupupload"
    If blnUpload = True Then
    objProperty.value = "True"
    Else
    objProperty.value = "False"
    End If
    objProperties.addProperty objProperty
    End Property
    Public Property Let Sheet(objSheet As Worksheet)
    Set m_objFirstSheet = objSheet
    Set m_objCurrentSheet = objSheet
    Set m_objFirstBook = objSheet.Parent
    Set m_objCurrentBook = objSheet.Parent
    CalculateMaxRowsForLinesBlock
    End Property
    Public Function AppendData(element As BneXSDElement, lngRowsInBatch As Long) As Boolean
    Dim objColRange As Range
    Dim lngCol As Long
    Dim lngFirstRow As Long
    Dim lngCount As Long
    Dim lngIncreaseRowsCount As Long
    Dim blnLines As Boolean
    If m_objCurrentSheet Is Nothing Then
    GoTo ErrorHandler
    End If
    On Error GoTo ErrorHandler
    Set objColRange = m_objCurrentSheet.Range(element.InterfaceName & "_" & element.ColumnName)
    blnLines = False
    If objColRange.count > 1 Then
    blnLines = True
    If objColRange.count < m_lngTotalSheetRowCount + lngRowsInBatch Then
    If m_lngTotalSheetRowCount = 0 Then
    lngIncreaseRowsCount = lngRowsInBatch - objColRange.count
    Else
    lngIncreaseRowsCount = lngRowsInBatch
    End If
    BneInsertRowsIntoLinesBlock m_objCurrentSheet, lngIncreaseRowsCount
    End If
    lngCol = objColRange.Column
    lngFirstRow = m_lngTotalSheetRowCount + objColRange.Row
    With m_objCurrentSheet
    If (element.CurrentBufferSize > 0) Then
    Set objColRange = .Range(.Cells(lngFirstRow, lngCol), .Cells(lngFirstRow + element.CurrentBufferSize - 1, lngCol))
    Else
    Set objColRange = .Range(.Cells(lngFirstRow, lngCol), .Cells(lngFirstRow, lngCol))
    End If
    End With
    If element.VBADataType = "date" Then
    objColRange.NumberFormat = "dd-MMM-yyyy"
    End If
    If element.VBADataType = "datetime" Then
    objColRange.NumberFormat = "dd-MMM-yyyy HH:mm:ss"
    End If
    objColRange = element.DataArray
    Else
    If element.VBADataType = "date" Then
    objColRange.NumberFormat = "dd-MMM-yyyy"
    End If
    If element.VBADataType = "datetime" Then
    objColRange.NumberFormat = "dd-MMM-yyyy HH:mm:ss"
    End If
    If m_colNewSheets.count = 0 Then
    objColRange = element.DataArray
    End If
    End If
    If m_lngTotalSheetRowCount + lngRowsInBatch <= 200 Then
    For lngCount = 1 To lngRowsInBatch
    If element.isReadOnly(lngCount) Or element.ReadOnly Then
    If blnLines Then
    BneAddDynamicReadOnly (objColRange(lngCount)), m_objCurrentSheet
    Else
    BneAddDynamicReadOnly objColRange, m_objCurrentSheet
    End If
    End If
    Next lngCount
    End If
    AppendData = True
    GoTo DestroyObjects
    ErrorHandler:
    AddBneMsg BNE_TRACE, "BneRowInserter.AppendData", "Err.Number:" & Err.Number & " Err.Description:" & Err.Description
    AppendData = False
    DestroyObjects:
    Set objColRange = Nothing
    End Function
    Public Sub ResetSheet()
    Dim objInterfaceCols As Object
    Dim intCnt As Integer
    Dim objRange As Range
    Dim objSheet As Worksheet
    Dim objBook As Workbook
    Dim objProperties As New BneVBAProperties
    Dim objProperty As New BneVBAProperty
    Dim blnDisplayAlerts As Boolean
    Dim strContentID As String
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentsheetcount"
    objProperty.value = 1
    objProperties.addProperty objProperty
    objProperties.setSheet m_objFirstSheet
    Set objProperty = objProperties.getProperty("contentidentifier")
    strContentID = objProperty.value
    If Len(strContentID) > 0 Then
    On Error Resume Next
    For Each objBook In Workbooks
    If objBook.name <> m_objFirstBook.name Then
    objBook.Activate
    objProperties.setSheet Nothing
    Set objProperty = objProperties.getProperty("contentidentifier")
    If objProperty.value = strContentID Then
    objBook.Close False
    End If
    End If
    Next
    End If
    m_objFirstSheet.Parent.Activate
    On Error Resume Next
    For Each objSheet In m_objFirstSheet.Parent.Worksheets
    objProperties.setSheet objSheet
    If objSheet.name <> m_objFirstSheet.name And Not objProperties.getProperty("contentgroupname") Is Nothing And Not objProperties.getProperty("contentgroupsequence") Is Nothing Then
    blnDisplayAlerts = Application.DisplayAlerts
    Application.DisplayAlerts = False
    objSheet.Delete
    Application.DisplayAlerts = blnDisplayAlerts
    End If
    Next
    Set objInterfaceCols = GetBneVBAInterfaceCols(m_objFirstSheet)
    If objInterfaceCols Is Nothing Then Exit Sub
    For intCnt = 1 To objInterfaceCols.count
    Set objRange = Nothing
    On Error Resume Next
    Set objRange = m_objFirstSheet.Range(objInterfaceCols(intCnt).InterfaceName & "_" & objInterfaceCols(intCnt).ColumnName)
    On Error GoTo 0
    If Not objRange Is Nothing Then
    If objRange.count > 1000 Then
    m_objFirstSheet.Rows(objRange.Row + 999).Offset(0, 0).EntireRow.Resize(objRange.count - 1000).Delete Shift:=xlUp
    End If
    If objInterfaceCols(intCnt).DefaultValue = "" Then
    On Error Resume Next
    objRange.clearContents
    On Error GoTo 0
    Else
    objRange.value = objInterfaceCols(intCnt).DefaultValue
    End If
    End If
    Next intCnt
    On Error Resume Next
    DeleteComments m_objFirstSheet
    m_objFirstSheet.Names("BNE_MESSAGES_LAMP").RefersToRange.clearContents
    m_objFirstSheet.Names("BNE_MESSAGES").RefersToRange.clearContents
    m_objFirstSheet.Names("BNE_MESSAGES_HIDDEN").RefersToRange.clearContents
    m_objFirstSheet.Names("BNE_UPLOAD").RefersToRange.clearContents
    m_objFirstSheet.UsedRange.Select
    End Sub
    Private Sub Class_Initialize()
    m_downloadIdentifier = BneCreateRandomString(10)
    m_intCurrentBookSheetCount = 1
    End Sub
    Private Sub Class_Terminate()
    Set m_objFirstSheet = Nothing
    End Sub
    Private Sub CalculateMaxRowsForLinesBlock()
    Dim objLines As Object
    Dim cntMaxRows As Long
    Set objLines = BneRetrieveLinesBlockRange(m_objCurrentSheet, GetBneVBAInterfaceCols(m_objCurrentSheet))
    If m_objCurrentSheet.Columns.EntireRow.count > 100000 Then
    cntMaxRows = 100000
    Else
    cntMaxRows = m_objCurrentSheet.Columns.EntireRow.count
    End If
    m_lngMaxRowsAllowable = cntMaxRows - LastUsedRow(m_objCurrentSheet) + objLines.Rows.count
    End Sub
    Private Function LastUsedRow(objWorkSheet As Worksheet) As Long
    LastUsedRow = objWorkSheet.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
    End Function
    Public Sub AppendBuffer(colXSDColumns As Collection, lngRowsInBatchDownloaded As Long)
    Dim Counter As Long
    Dim elem As BneXSDElement
    Call InitializeLinesBlock
    If m_lngTotalSheetRowCount + lngRowsInBatchDownloaded >= m_objLinesRegion.Rows.count Then
    If m_lngTotalSheetRowCount + lngRowsInBatchDownloaded > m_lngMaxRowsAllowable Then
    If m_intCurrentGroupSheetCount = 1 Then
    m_objCurrentSheet.name = Me.GroupName & " " & m_intCurrentGroupSheetCount
    End If
    m_intCurrentGroupSheetCount = m_intCurrentGroupSheetCount + 1
    Set m_objCurrentSheet = BneCopySheet(m_objFirstSheet, Me.GroupName, m_intCurrentGroupSheetCount, m_objCurrentSheet)
    RenameSheet m_objCurrentSheet, Me.GroupName & " " & m_intCurrentGroupSheetCount
    Set m_objLinesRegion = Nothing
    m_lngTotalSheetRowCount = 0
    End If
    End If
    For Counter = 1 To colXSDColumns.count
    Set elem = colXSDColumns.Item(Counter)
    If elem.CurrentBufferSize > 0 Or elem.ReadOnly Then
    Me.AppendData elem, lngRowsInBatchDownloaded
    elem.ResetDataArray
    End If
    Next
    m_lngTotalSheetRowCount = m_lngTotalSheetRowCount + lngRowsInBatchDownloaded
    m_lngTotalRowCount = m_lngTotalRowCount + lngRowsInBatchDownloaded
    End Sub
    Private Sub BneInsertRowsIntoLinesBlock(objSheet As Worksheet, lngNumberOfRowsToInsert As Long)
    Dim objInsertRange As Range
    Dim objDefaultRange As Range
    Dim objName As name
    Dim objInterfaceCol As BneVBAInterfaceCol
    Dim lngInsertAtRow As Long
    Dim lngInsertEndRow As Long
    Dim lngCol As Long
    Dim b_protectSheet As Boolean
    b_protectSheet = m_objCurrentSheet.ProtectContents
    m_objCurrentSheet.Unprotect
    Call InitializeLinesBlock
    Set objInsertRange = m_objCurrentSheet.Rows(m_objLinesRegion.Row + m_objLinesRegion.Rows.count - 1)
    lngInsertAtRow = objInsertRange.Row
    objInsertRange.Offset(0, 0).EntireRow.Resize(lngNumberOfRowsToInsert).Insert
    lngInsertEndRow = objInsertRange.Row
    m_objCurrentSheet.Cells(lngInsertEndRow, 1).EntireRow.Copy
    m_objCurrentSheet.Cells(lngInsertAtRow, 1).EntireRow.PasteSpecial
    m_objCurrentSheet.Cells(lngInsertEndRow, 1).EntireRow.clearContents
    If b_protectSheet Then m_objCurrentSheet.Protect
    For Each objName In m_objCurrentSheet.Names
    If InStr(vbTextCompare, objName.name, "_READ_ONLY_REGIONS") = 0 Then
    If objName.Parent.name = Range(objName.RefersTo).Parent.name Then
    If Not Application.Intersect(objInsertRange, objName.RefersToRange) Is Nothing Then
    lngCol = objName.RefersToRange.Column
    Set objInterfaceCol = GetBneVBAInterfaceColByName(m_objFirstSheet, objName.name)
    If Not objInterfaceCol Is Nothing Then
    If objInterfaceCol.DefaultValue <> "" Then
    Set objDefaultRange = m_objCurrentSheet.Range(m_objCurrentSheet.Cells(lngInsertAtRow + 1, lngCol), m_objCurrentSheet.Cells(lngInsertEndRow, lngCol))
    objDefaultRange.value = objInterfaceCol.DefaultValue
    Set objDefaultRange = Nothing
    End If
    End If
    Set objInterfaceCol = Nothing
    End If
    End If
    End If
    Next objName
    Set objName = Nothing
    Set objInsertRange = Nothing
    Set objDefaultRange = Nothing
    Set objInterfaceCol = Nothing
    End Sub
    Private Sub InitializeLinesBlock()
    If m_objLinesRegion Is Nothing Then
    Set m_objLinesRegion = BneRetrieveLinesBlockRange(m_objCurrentSheet, GetBneVBAInterfaceCols(m_objFirstSheet))
    End If
    End Sub
    Private Function BneCopySheet(objFromSheet As Object, strGroupName As String, intSheetCount As Integer, Optional objAfterWorkSheet As Worksheet) As Object
    Dim objNewSheet As Object
    Dim objNewBook As Object
    Dim objProperty As BneVBAProperty
    Dim objProperties As New BneVBAProperties
    Dim intCnt As Integer
    Dim objLayoutBlock As BneLayoutBlock
    Dim objLayoutCol As BneLayoutColumn
    Dim intBlockCnt As Integer
    Dim intColCnt As Integer
    Dim blnDisplayAlerts As Boolean
    If CONTENT_WORKSHEET_LIMIT > 0 Then
    If m_intCurrentBookSheetCount >= CONTENT_WORKSHEET_LIMIT Then
    m_intCurrentBookSheetCount = 0
    Set m_objCurrentBook = Workbooks.add
    If Not getParentWorkBookCollection Is Nothing Then
    getParentWorkBookCollection.add m_objCurrentBook
    End If
    m_colNewBooks.add m_objCurrentBook
    m_objCurrentBook.Activate
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupname"
    objProperty.value = strGroupName
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentidentifier"
    objProperty.value = m_downloadIdentifier
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "BneWorkBookSequence"
    objProperty.value = m_intCurrentBookSheetCount
    objProperties.addProperty objProperty
    End If
    End If
    If m_intCurrentBookSheetCount = 0 Then
    Set objNewSheet = m_objCurrentBook.Worksheets.add
    For intCnt = m_objCurrentBook.Worksheets.count To 1 Step -1
    If m_objCurrentBook.Worksheets(intCnt).name <> objNewSheet.name And m_objCurrentBook.Worksheets(intCnt).name <> "BneWorkBookProperties" Then
    blnDisplayAlerts = Application.DisplayAlerts
    Application.DisplayAlerts = False
    m_objCurrentBook.Worksheets(intCnt).Delete
    Application.DisplayAlerts = blnDisplayAlerts
    End If
    Next
    Else
    Set objNewSheet = m_objCurrentBook.Worksheets.add(after:=objAfterWorkSheet)
    End If
    m_colNewSheets.add objNewSheet
    m_intCurrentBookSheetCount = m_intCurrentBookSheetCount + 1
    Set objProperty = New BneVBAProperty
    objProperties.setSheet m_objFirstBook.Worksheets("BneWorkBookProperties")
    objProperty.name = "contentsheetcount"
    objProperty.value = m_colNewSheets.count + 1
    objProperties.addProperty objProperty
    RenameSheet objNewSheet, strGroupName
    Set m_objLayout = New BneLayout
    Set objLayoutBlock = m_objLayout.Layout
    For intBlockCnt = 1 To m_objLayout.getLayoutBlocks.count
    Dim myBlocks As Collection
    Set myBlocks = m_objLayout.getLayoutBlocks
    Dim blk As BneLayoutBlock
    Set blk = myBlocks.Item(intBlockCnt)
    If blk.LayoutElement = "HEADER" Then
    For intColCnt = 1 To blk.CountColumns
    Set objLayoutCol = blk.layoutColumns(intColCnt)
    If CONTENT_WORKSHEET_LIMIT > 0 And m_intCurrentBookSheetCount >= CONTENT_WORKSHEET_LIMIT Then
    objLayoutCol.ReadOnly = m_objFirstSheet.Names(objLayoutCol.InterfaceColName).RefersToRange.Locked
    objLayoutCol.ColumnFormat = m_objFirstSheet.Names(objLayoutCol.InterfaceColName).RefersToRange.NumberFormat
    objLayoutCol.DefaultValue = m_objFirstSheet.Names(objLayoutCol.InterfaceColName).RefersToRange.value
    Else
    objLayoutCol.ReadOnly = True
    objLayoutCol.ColumnFormat = "General"
    If objLayoutCol.DataType = 3 Then
    objLayoutCol.ColumnFormat = "m/d/yyyy"
    End If
    objLayoutCol.DefaultValue = "='" & m_objFirstSheet.name & "'!" & objLayoutCol.InterfaceColName
    End If
    Next
    End If
    Next
    m_objLayout.render objNewSheet
    objNewSheet.Unprotect
    objProperties.setSheet objNewSheet
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupname"
    objProperty.value = strGroupName
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupsequence"
    objProperty.value = intSheetCount
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentgroupupload"
    objProperty.value = m_blnUpload
    objProperties.addProperty objProperty
    Set objProperty = New BneVBAProperty
    objProperty.name = "contentidentifier"
    objProperty.value = m_downloadIdentifier
    objProperties.addProperty objProperty
    Set BneCopySheet = objNewSheet
    End Function
    Private Sub RenameSheet(objSheet As Worksheet, strName As String)
    Dim strNewName As String
    Dim intCnt As Integer
    Dim blnProtection As Boolean
    strNewName = strName
    strNewName = Replace(strNewName, ":", " ")
    strNewName = Replace(strNewName, "\", " ")
    strNewName = Replace(strNewName, "/", " ")
    strNewName = Replace(strNewName, "?", " ")
    strNewName = Replace(strNewName, "*", " ")
    strNewName = Replace(strNewName, "[", " ")
    strNewName = Replace(strNewName, "]", " ")
    strNewName = Trim(Left(strNewName, 31))
    If Len(strNewName) = 0 Then
    AddBneMsg BNE_TRACE, "BneRowInserter.RenameSheet", "Sheet Name is empty. Name=" & strName
    Exit Sub
    End If
    Do While BneWorkSheetExists(strNewName)
    If objSheet.index = m_objCurrentBook.Worksheets(strNewName).index Then Exit Do
    intCnt = intCnt + 1
    strNewName = Left(strNewName, Len(strNewName) - Len(CStr(intCnt)) - 1) & "~" & intCnt
    Loop
    On Error GoTo ErrorHandler
    blnProtection = objSheet.ProtectContents
    objSheet.Unprotect
    objSheet.name = strNewName
    If blnProtection Then objSheet.Protect
    ErrorHandler:
    AddBneMsg BNE_TRACE, "BneRowInserter.RenameSheet", "Err.Number:" & Err.Number & " Err.Description:" & Err.Description
    End Sub
    Public Sub protectSheet(objSheet As Worksheet)
    Dim clsStyleSheet As BneStyleSheet
    Dim clsStyle As BneStyle
    Dim protectSheet As Boolean
    Set clsStyleSheet = m_objLayout.StyleSheet
    Set clsStyle = clsStyleSheet.getStyle("BNE_PAGE")
    objSheet.Protect
    If Not clsStyle Is Nothing Then
    On Error Resume Next
    protectSheet = clsStyle.getStylePropertyValue("protected")
    If Not protectSheet Then
    objSheet.Unprotect
    End If
    End If
    End Sub
    Public Sub Finalize()
    Dim lngLines As Long
    Dim strLines As String
    Dim strWBCode As String
    Dim strMainCode As String
    Dim objSheet As Worksheet
    Dim objBook As Workbook
    Dim intCnt As Integer
    Dim objCode As Object
    Dim objComponent As Object
    For Each objSheet In m_colNewSheets
    MoveToLinesBlock objSheet
    lngLines = m_objFirstSheet.Parent.VBProject.VBComponents(m_objFirstSheet.CodeName).CodeModule.CountOfLines
    strLines = m_objFirstSheet.Parent.VBProject.VBComponents(m_objFirstSheet.CodeName).CodeModule.Lines(1, lngLines)
    objSheet.Parent.VBProject.VBComponents(objSheet.CodeName).CodeModule.AddFromString strLines
    protectSheet objSheet
    Next
    lngLines = m_objFirstSheet.Parent.VBProject.VBComponents(ThisWorkbook.CodeName).CodeModule.CountOfLines
    strWBCode = m_objFirstSheet.Parent.VBProject.VBComponents(ThisWorkbook.CodeName).CodeModule.Lines(1, lngLines)
    For Each objBook In m_colNewBooks
    objBook.VBProject.VBComponents(ThisWorkbook.CodeName).CodeModule.AddFromString strWBCode
    For Each objComponent In m_objFirstSheet.Parent.VBProject.VBComponents
    If objComponent.Type = vbext_ct_StdModule Or objComponent.Type = vbext_ct_ClassModule Or objComponent.Type = vbext_ct_MSForm Then
    Set objCode = objBook.VBProject.VBComponents.add(objComponent.Type)
    objCode.name = objComponent.name
    lngLines = objComponent.CodeModule.CountOfLines
    strLines = objComponent.CodeModule.Lines(1, lngLines)
    objCode.CodeModule.AddFromString strLines
    End If
    Next
    Dim strName As String
    For Each objComponent In objBook.VBProject.VBComponents
    strName = objComponent.name
    Debug.Print strName
    Next
    Next
    setNewWorkBookCollection m_colNewBooks
    End Sub
    
    

    General
    Stream Path:VBA/BneSAXDownloadContentHandler
    VBA File Name:BneSAXDownloadContentHandler
    Stream Size:14499
    Data ASCII:. . . . . . . . 2 . . . . . . . . . C . . . + . . . . . . . . . . k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . h . ` . . 8 . X . . . @ . H . . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . . < 6 . . . . . . < . . . . . .
    Data Raw:01 16 03 00 01 f0 00 00 00 32 15 00 00 d4 00 00 00 90 02 00 00 ff ff ff ff 43 15 00 00 c7 2b 00 00 00 00 00 00 01 00 00 00 ce c1 fb 6b 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneSAXDownloadContentHandler"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Implements MSXML2.IVBSAXContentHandler
    Private m_Sheet               As Worksheet
    Private m_elementCol          As New Collection
    Private m_maxBufferSize       As Long
    Private m_inserter            As New BneRowInserter
    Private m_strRowInsertEvent   As String
    Private m_lngGroupRowsDown    As Long
    Private m_lngTotalRowsDown    As Long
    Private m_strGroupName        As String
    Private m_strGroupUpload      As String
    Private strCurrentElement     As String
    Private m_rowNum              As Long
    Private m_clsMessages         As BneVBAMessages
    Private m_objSaxPath          As New BneSaxPath
    Private Sub Class_Initialize()
    Set m_clsMessages = New BneVBAMessages
    End Sub
    Private Sub Class_Terminate()
    Set m_clsMessages = Nothing
    Do While m_elementCol.count > 0
    Erase m_elementCol(1).DataArray
    m_elementCol.Remove (1)
    Loop
    Set m_elementCol = Nothing
    End Sub
    Public Property Get Messages() As BneVBAMessages
    Set Messages = m_clsMessages
    End Property
    Private Sub IncrementRowsDownloaded()
    m_lngTotalRowsDown = m_lngTotalRowsDown + 1
    m_lngGroupRowsDown = m_lngGroupRowsDown + 1
    If m_lngTotalRowsDown Mod 100 = 0 Then
    If Len(RowInsertEvent) > 0 Then
    Application.Run RowInsertEvent, m_lngTotalRowsDown
    End If
    End If
    End Sub
    Public Property Get RowsDownloaded() As Long
    RowsDownloaded = m_lngTotalRowsDown
    End Property
    Public Property Let RowInsertEvent(strRowInsertEventName As String)
    m_strRowInsertEvent = strRowInsertEventName
    End Property
    Public Property Get RowInsertEvent() As String
    RowInsertEvent = m_strRowInsertEvent
    End Property
    Public Property Let BneInserter(TheInserter As BneRowInserter)
    Set m_inserter = TheInserter
    End Property
    Public Property Let Sheet(TheSheet As Worksheet)
    Set m_Sheet = TheSheet
    End Property
    Public Property Let MaxBufferSize(Max As Long)
    m_maxBufferSize = Max
    End Property
    Private Property Set IVBSAXContentHandler_documentLocator(ByVal RHS As MSXML2.IVBSAXLocator)
    End Property
    Private Sub IVBSAXContentHandler_endPrefixMapping(strPrefix As String)
    End Sub
    Private Sub IVBSAXContentHandler_ignorableWhitespace(strChars As String)
    End Sub
    Private Sub IVBSAXContentHandler_processingInstruction(strTarget As String, strData As String)
    End Sub
    Private Sub IVBSAXContentHandler_skippedEntity(strName As String)
    End Sub
    Private Sub IVBSAXContentHandler_startPrefixMapping(strPrefix As String, strURI As String)
    End Sub
    Private Sub IVBSAXContentHandler_characters(strChars As String)
    If m_objSaxPath.currentElement <> "ping" Then
    Call m_elementCol(strCurrentElement).setDataItem(m_rowNum, strChars)
    End If
    End Sub
    Private Sub IVBSAXContentHandler_startElement(strNamespaceURI As String, strLocalName As String, strQName As String, ByVal oAttributes As MSXML2.IVBSAXAttributes)
    Dim clsMessage As BneVBAMessage
    Dim objCol
    DoEvents
    If g_blnCancelOperation = True Then
    Err.Raise 32001, "IVBSAXContentHandler_startElement", "Sax ParseURL Cancelled"
    End If
    strCurrentElement = strLocalName
    m_objSaxPath.pushElement strLocalName
    Select Case strLocalName
    Case "data"
    If m_objSaxPath.path = "\document\collection\data" Then
    m_inserter.GroupName = BneGetAttributeText(oAttributes, "name")
    m_inserter.UploadFlag = BneGetBooleanValue(BneGetAttributeText(oAttributes, "upload"))
    m_lngGroupRowsDown = 0
    End If
    Case "DataRow"
    m_rowNum = (oAttributes.getValueFromName("", "id") - 1) Mod 200 + 1
    IncrementRowsDownloaded
    If existsBooleanAttribute("readonly", True, oAttributes) Then
    For Each objCol In m_elementCol
    objCol.setReadOnly m_rowNum, True
    Next objCol
    End If
    If existsBooleanAttribute("upload", False, oAttributes) Then
    m_elementCol.Item("BNE.UPLOAD").setDataItem m_rowNum, "x"
    m_elementCol.Item("BNE.UPLOAD").setReadOnly m_rowNum, True
    End If
    Case "element"
    Dim sVBAType As String
    Dim aTemp() As String
    Dim element As New BneXSDElement
    Dim sInterface As String
    Dim sColumn As String
    Dim sName As String
    Dim bReadOnly As Boolean
    sName = oAttributes.getValueFromName("", "name")
    sVBAType = ConvertXSDTypeToVBAType(oAttributes.getValueFromName("", "type"))
    bReadOnly = existsBooleanAttribute("readonly", True, oAttributes)
    aTemp = Split(sName, ".")
    If IsArray(aTemp) Then
    If UBound(aTemp) = 1 Then
    sInterface = aTemp(0)
    sColumn = aTemp(1)
    End If
    End If
    element.MaxBufferSize = m_maxBufferSize
    element.setAttributes sName, "", "", sVBAType, sInterface, sColumn, bReadOnly
    m_elementCol.add element, element.name
    Case "message"
    Set clsMessage = New BneVBAMessage
    On Error Resume Next
    clsMessage.msgAction = oAttributes.getValueFromQName("bne:action")
    clsMessage.msgCause = oAttributes.getValueFromQName("bne:cause")
    clsMessage.msgSource = oAttributes.getValueFromQName("bne:source")
    clsMessage.msgText = oAttributes.getValueFromQName("bne:text")
    clsMessage.msgType = oAttributes.getValueFromQName("bne:type")
    On Error GoTo 0
    m_clsMessages.addMessage clsMessage
    End Select
    If m_objSaxPath.path = "\document\collection\data\Data\DataRow" Then
    If existsBooleanAttribute("readonly", True, oAttributes) Then
    m_elementCol.Item(strLocalName).setReadOnly m_rowNum, True
    End If
    End If
    End Sub
    Private Sub IVBSAXContentHandler_endElement(strNamespaceURI As String, strLocalName As String, strQName As String)
    Dim success As Boolean
    m_objSaxPath.popElement strLocalName
    If strLocalName = "DataRow" Then
    If m_rowNum = 200 Then
    success = FlushArrayBuffer()
    DoEvents
    End If
    ElseIf strLocalName = "data" Then
    If m_objSaxPath.path = "\document\collection" Then
    success = FlushArrayBuffer()
    End If
    End If
    End Sub
    Public Function FlushArrayBuffer() As Boolean
    Dim Counter As Long
    Dim elem As BneXSDElement
    On Error GoTo ErrorHandler
    If m_lngGroupRowsDown > 0 Then
    m_inserter.AppendBuffer m_elementCol, ((m_lngGroupRowsDown - 1) Mod m_maxBufferSize) + 1
    End If
    FlushArrayBuffer = True
    m_lngGroupRowsDown = 0
    Exit Function
    ErrorHandler:
    FlushArrayBuffer = False
    m_lngGroupRowsDown = 0
    End Function
    Private Sub IVBSAXContentHandler_startDocument()
    Call m_inserter.ResetSheet
    Dim uploadCol As New BneXSDElement
    uploadCol.MaxBufferSize = m_maxBufferSize
    uploadCol.setAttributes "BNE.UPLOAD", "", "", "string", "BNE", "UPLOAD", False
    m_elementCol.add uploadCol, "BNE.UPLOAD"
    End Sub
    Private Sub IVBSAXContentHandler_endDocument()
    bneMain.g_nosOfRowsDownloaded = m_lngTotalRowsDown
    Dim success As Boolean
    success = FlushArrayBuffer()
    If Len(RowInsertEvent) > 0 Then
    Application.Run RowInsertEvent, m_lngTotalRowsDown
    End If
    End Sub
    Private Function ConvertXSDTypeToVBAType(sXSDType As String) As String
    Select Case sXSDType
    Case "xsd:string"
    ConvertXSDTypeToVBAType = "string"
    Case "xsd:date"
    ConvertXSDTypeToVBAType = "date"
    Case "xsd:datetime"
    ConvertXSDTypeToVBAType = "datetime"
    Case "xsd:datetimetz"
    ConvertXSDTypeToVBAType = "datetime"
    Case "xsd:double"
    ConvertXSDTypeToVBAType = "double"
    Case "xsd:integer"
    ConvertXSDTypeToVBAType = "integer"
    Case Else
    ConvertXSDTypeToVBAType = "string"
    End Select
    End Function
    Private Function existsBooleanAttribute(strAttribute As String, blnValue As Boolean, oAttributes As MSXML2.IVBSAXAttributes) As Boolean
    On Error Resume Next
    If UCase(oAttributes.getValueFromName("", strAttribute)) <> UCase(blnValue) Then
    existsBooleanAttribute = False
    Else
    existsBooleanAttribute = True
    End If
    End Function
    

    General
    Stream Path:VBA/BneSaxDownloadErrorHandler
    VBA File Name:BneSaxDownloadErrorHandler
    Stream Size:4070
    Data ASCII:. . . . . . . . . . . . . . 8 . . . . . . . . . . . . . . . . . Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . 8 . . . . 0 . ( . P . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . . < . . . . . . < . . . . . . . < . . . . .
    Data Raw:01 16 03 00 01 f0 00 00 00 a2 07 00 00 d4 00 00 00 38 02 00 00 ff ff ff ff ad 07 00 00 c5 0c 00 00 00 00 00 00 01 00 00 00 ce c1 51 94 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneSaxDownloadErrorHandler"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Implements MSXML2.IVBSAXErrorHandler
    Private m_clsMessages          As BneVBAMessages
    Private Sub Class_Initialize()
    Set m_clsMessages = New BneVBAMessages
    End Sub
    Private Sub Class_Terminate()
    Set m_clsMessages = Nothing
    End Sub
    Public Property Get Messages() As BneVBAMessages
    Set Messages = m_clsMessages
    End Property
    Private Sub IVBSAXErrorHandler_error(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
    Dim clsMessage As New BneVBAMessage
    clsMessage.msgSource = "IVBSAXErrorHandler_error"
    clsMessage.msgCause = "Error: " & nErrorCode & " SystemId:" & oLocator.systemId
    clsMessage.msgText = strErrorMessage
    clsMessage.msgType = BNE_ERROR
    m_clsMessages.addMessage clsMessage
    Call Log(clsMessage)
    End Sub
    Private Sub IVBSAXErrorHandler_fatalError(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
    Dim clsMessage As New BneVBAMessage
    clsMessage.msgSource = "IVBSAXErrorHandler_error"
    clsMessage.msgCause = "Error: " & nErrorCode & " SystemId:" & oLocator.systemId & " VBAErrNo:" & Err.Number & "VBADesc" & Err.Description
    clsMessage.msgText = strErrorMessage
    clsMessage.msgType = BNE_ERROR
    m_clsMessages.addMessage clsMessage
    Call Log(clsMessage)
    End Sub
    Private Sub IVBSAXErrorHandler_ignorableWarning(ByVal oLocator As MSXML2.IVBSAXLocator, strErrorMessage As String, ByVal nErrorCode As Long)
    Dim clsMessage As New BneVBAMessage
    clsMessage.msgSource = "IVBSAXErrorHandler_error"
    clsMessage.msgCause = "Warning: " & nErrorCode & " SystemId:" & oLocator.systemId & " Column: " & oLocator.columnNumber & " Line: " & oLocator.lineNumber
    clsMessage.msgText = strErrorMessage
    clsMessage.msgType = BNE_WARNING
    Call Log(clsMessage)
    End Sub
    

    General
    Stream Path:VBA/BneSaxPath
    VBA File Name:BneSaxPath
    Stream Size:4136
    Data ASCII:. . . . . . . . . . . . . . ( . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . ( . . P . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . < . . . . . . . . < 0 . . . . . . < 8 . . . . . . < . .
    Data Raw:01 16 03 00 01 f0 00 00 00 c2 07 00 00 d4 00 00 00 28 02 00 00 ff ff ff ff cb 07 00 00 33 0d 00 00 00 00 00 00 01 00 00 00 ce c1 bd ff 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneSaxPath"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Private m_strElements()       As String
    Private m_intElementCount     As Integer
    Private m_colPaths            As New Collection
    Public Property Get count() As Integer
    count = m_intElementCount
    End Property
    Public Property Get currentElement() As String
    If m_intElementCount > 0 Then
    currentElement = m_strElements(m_intElementCount - 1)
    End If
    End Property
    Public Sub pushElement(strElementName As String)
    m_intElementCount = m_intElementCount + 1
    ReDim Preserve m_strElements(0 To m_intElementCount - 1)
    m_strElements(m_intElementCount - 1) = strElementName
    If m_colPaths.count > 0 Then
    Dim intCnt As Integer
    For intCnt = 1 To m_colPaths.count
    m_colPaths(intCnt).pushElement strElementName
    Next
    End If
    End Sub
    Public Sub popElement(strElementName As String)
    m_intElementCount = m_intElementCount - 1
    If m_intElementCount > 0 Then
    ReDim Preserve m_strElements(0 To m_intElementCount - 1)
    Else
    m_strElements(0) = ""
    End If
    If m_colPaths.count > 0 Then
    Dim intCnt As Integer
    For intCnt = 1 To m_colPaths.count
    m_colPaths(intCnt).popElement (strElementName)
    If m_colPaths(intCnt).count = 0 Then
    m_colPaths.Remove (intCnt)
    End If
    Next
    End If
    End Sub
    Public Function path() As String
    path = "\" & Join(m_strElements, "\")
    End Function
    Public Function addPath(Optional objPath As BneSaxPath) As BneSaxPath
    If objPath Is Nothing Then
    Set objPath = New BneSaxPath
    End If
    m_colPaths.add objPath
    Set addPath = objPath
    End Function
    

    General
    Stream Path:VBA/BneStyle
    VBA File Name:BneStyle
    Stream Size:7184
    Data ASCII:. . . . . . . . . . . . . . . 8 . . . . . . . . . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . . . . . . . . p + ` 3 : G D . r . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . : < u " 1 L v h ] V . . . . . . . . . . . . . . . . . . . . . . x . . . . : < u " 1 L v h ] V p + ` 3 : G D . r . . . . . M E . . . . . . . . . . . . . . . . . . . . . . ( . . . 0 . P . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . 0 " . . . . . . . < . . . . . . 0 . . . . . . 6 " . . . . . . .
    Data Raw:01 16 03 00 06 00 01 00 00 82 0c 00 00 e4 00 00 00 38 02 00 00 00 0d 00 00 0e 0d 00 00 aa 16 00 00 0e 00 00 00 01 00 00 00 ce c1 70 00 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 90 00 ff ff 00 00 70 2b 60 b8 33 c7 3a 47 90 86 a5 a3 44 1e 72 18 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneStyle"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colStyleProperties As Collection
    Private m_strStyleCode As String
    Private m_clsStyleParent As BneStyle
    Private m_clsStyleImage As String
    Public Sub Class_Initialize()
    Set m_colStyleProperties = New Collection
    m_clsStyleImage = ""
    End Sub
    Public Sub Class_Terminate()
    Set m_colStyleProperties = Nothing
    End Sub
    Public Property Let StyleCode(strStyleCode As String)
    m_strStyleCode = strStyleCode
    End Property
    Public Property Get StyleCode() As String
    StyleCode = m_strStyleCode
    End Property
    Public Property Let StyleImage(StyleImage As String)
    m_clsStyleImage = StyleImage
    End Property
    Public Property Get StyleImage() As String
    StyleImage = m_clsStyleImage
    End Property
    Public Property Let ParentStyle(ByVal clsStyleParent As BneStyle)
    Set m_clsStyleParent = clsStyleParent
    End Property
    Public Sub setParentStyle(ByVal clsStyleParent As BneStyle)
    Dim clsExistingStyle As BneStyle
    Dim intCount As Integer
    If Not clsStyleParent Is Nothing Then
    If m_clsStyleParent Is Nothing Then
    Set m_clsStyleParent = clsStyleParent
    Else
    If Not m_clsStyleParent.StyleCode = clsStyleParent.StyleCode Then
    Set clsExistingStyle = m_clsStyleParent
    Set m_clsStyleParent = clsStyleParent
    m_clsStyleParent.ParentStyle = clsExistingStyle
    End If
    End If
    End If
    End Sub
    Public Property Get getStyleProperties() As Collection
    Set getStyleProperties = m_colStyleProperties
    End Property
    Public Sub addStyleProperties(ByVal clsStyle As BneStyle)
    Dim clsStyleProperty As BneStyleProperty
    For Each clsStyleProperty In clsStyle.getStyleProperties
    If Not ContainsItem(m_colStyleProperties, clsStyleProperty.StylePropertyName) Then
    m_colStyleProperties.add clsStyleProperty, clsStyleProperty.StylePropertyName
    End If
    Next
    End Sub
    Public Sub addStyleProperty(strPropertyName As String, varPropertyValue As Variant, Optional blnOverride As Boolean = True)
    Dim clsExistingProperty As BneStyleProperty
    If ContainsItem(m_colStyleProperties, strPropertyName) Then
    If blnOverride Then
    Set clsExistingProperty = getStyleProperties.Item(strPropertyName)
    clsExistingProperty.StylePropertyValue = varPropertyValue
    End If
    Else
    Dim clsStyleProperty As New BneStyleProperty
    clsStyleProperty.createStyleProperty strPropertyName, varPropertyValue, clsStyleProperty
    m_colStyleProperties.add clsStyleProperty, strPropertyName
    End If
    End Sub
    Public Function getStylePropertyValue(strName As String) As Variant
    On Error Resume Next
    Dim clsStyleProperty As BneStyleProperty
    Set clsStyleProperty = m_colStyleProperties.Item(strName)
    getStylePropertyValue = clsStyleProperty.StylePropertyValue
    End Function
    Public Sub applyStyle(ByVal objCellRange As Range)
    Dim clsStyleProperty As BneStyleProperty
    Dim objProperty As Object
    If CInt(Left(Application.Version, (InStr(1, Application.Version & ".", ".") - 1))) >= 9 Then
    If Not m_clsStyleParent Is Nothing Then
    m_clsStyleParent.applyStyle objCellRange
    End If
    For Each clsStyleProperty In m_colStyleProperties
    If (clsStyleProperty.StylePropertyLevel = clsStyleProperty.APPLICATION_LEVEL_CONST) Then
    Set objProperty = Application
    ElseIf (clsStyleProperty.StylePropertyLevel = clsStyleProperty.SHEET_LEVEL_CONST) Then
    Set objProperty = objCellRange.Parent
    ElseIf (clsStyleProperty.StylePropertyLevel = clsStyleProperty.WORKBOOK_LEVEL_CONST) Then
    Set objProperty = objCellRange.Parent.Parent
    Else
    Set objProperty = objCellRange
    End If
    clsStyleProperty.applyStyle objProperty
    Next
    End If
    End Sub
    Public Function isEmpty() As Boolean
    isEmpty = m_colStyleProperties.count = 0
    End Function
    

    General
    Stream Path:VBA/BneStyleProperty
    VBA File Name:BneStyleProperty
    Stream Size:12645
    Data ASCII:. . . . . . . . . . . . . . ( . . . . . . O ' . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . ( . . . . P . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . < . . . . . . . < 0 . . . . . . < 8 . . . . . . <
    Data Raw:01 16 03 00 01 f0 00 00 00 c2 10 00 00 d4 00 00 00 28 02 00 00 ff ff ff ff cb 10 00 00 4f 27 00 00 00 00 00 00 01 00 00 00 ce c1 63 a0 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneStyleProperty"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_strPropertyVBA As String
    Private m_strPropertyName As String
    Private m_varPropertyValue As Variant
    Private m_intPropertyLevel As Integer
    Private m_colChildProperties As Collection
    Private Const RANGE_LEVEL As Integer = 1
    Private Const SHEET_LEVEL As Integer = 2
    Private Const WORKBOOK_LEVEL As Integer = 3
    Private Const APPLICATION_LEVEL As Integer = 4
    Private Sub Class_Initialize()
    Set m_colChildProperties = New Collection
    m_intPropertyLevel = RANGE_LEVEL
    End Sub
    Public Sub Class_Terminate()
    Set m_colChildProperties = Nothing
    End Sub
    Public Property Get RANGE_LEVEL_CONST() As Integer
    RANGE_LEVEL_CONST = RANGE_LEVEL
    End Property
    Public Property Get APPLICATION_LEVEL_CONST() As Integer
    APPLICATION_LEVEL_CONST = APPLICATION_LEVEL
    End Property
    Public Property Get WORKBOOK_LEVEL_CONST() As Integer
    WORKBOOK_LEVEL_CONST = WORKBOOK_LEVEL
    End Property
    Public Property Get SHEET_LEVEL_CONST() As Integer
    SHEET_LEVEL_CONST = SHEET_LEVEL
    End Property
    Public Property Get StylePropertyValue() As Variant
    StylePropertyValue = m_varPropertyValue
    End Property
    Public Property Let StylePropertyValue(ByVal varPropertyValue As Variant)
    m_varPropertyValue = varPropertyValue
    End Property
    Public Property Let StylePropertyName(strPropertyName As String)
    m_strPropertyName = strPropertyName
    End Property
    Public Property Get StylePropertyName() As String
    StylePropertyName = m_strPropertyName
    End Property
    Public Property Let StylePropertyVBA(strPropertyVBA As String)
    m_strPropertyVBA = strPropertyVBA
    End Property
    Public Property Get StylePropertyVBA() As String
    StylePropertyVBA = m_strPropertyVBA
    End Property
    Public Property Let StylePropertyLevel(intPropertyLevel As Integer)
    m_intPropertyLevel = intPropertyLevel
    End Property
    Public Property Get StylePropertyLevel() As Integer
    StylePropertyLevel = m_intPropertyLevel
    End Property
    Public Sub setStyleProperty(strPropertyName As String, strPropertyVBA As String, Optional varPropertyValue As Variant, Optional intPropertyLevel As Integer)
    m_strPropertyName = strPropertyName
    m_strPropertyVBA = strPropertyVBA
    If Not IsMissing(varPropertyValue) Then
    m_varPropertyValue = varPropertyValue
    End If
    If Not IsMissing(intPropertyLevel) Then
    m_intPropertyLevel = intPropertyLevel
    End If
    End Sub
    Public Sub addChild(clsStyleProperty As BneStyleProperty)
    m_colChildProperties.add clsStyleProperty, clsStyleProperty.StylePropertyName
    End Sub
    Public Sub addChildStyleProperty(strPropertyName As String, strPropertyVBA As String, Optional varPropertyValue As Variant)
    Dim clsStyleProperty As New BneStyleProperty
    clsStyleProperty.StylePropertyName = strPropertyName
    clsStyleProperty.StylePropertyVBA = strPropertyVBA
    If Not IsMissing(varPropertyValue) Then
    clsStyleProperty.StylePropertyValue = varPropertyValue
    End If
    m_colChildProperties.add clsStyleProperty, clsStyleProperty.StylePropertyName
    End Sub
    Public Function applyStyle(ByVal objProperty As Object) As Object
    On Error GoTo ErrorHandler
    If objProperty Is Nothing Then
    Exit Function
    End If
    If Not isEmpty(Me.StylePropertyValue) And m_colChildProperties.count = 0 Then
    CallByName objProperty, Me.StylePropertyVBA, VbLet, Me.StylePropertyValue
    Else
    Dim clsChildProperty As BneStyleProperty
    If isEmpty(Me.StylePropertyValue) Then
    Set objProperty = CallByName(objProperty, Me.StylePropertyVBA, VbGet)
    Else
    Set objProperty = CallByName(objProperty, Me.StylePropertyVBA, VbGet, Me.StylePropertyValue)
    End If
    For Each clsChildProperty In m_colChildProperties
    clsChildProperty.applyStyle objProperty
    Next
    End If
    Exit Function
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Style Property Error; Name:" & Me.StylePropertyName & " ,VBA Command: " & Me.StylePropertyVBA & " ,Value: " & Me.StylePropertyValue, "Error: " & Err.Description
    Exit Function
    End Function
    Public Sub createStyleProperty(strStylePropertyName As String, varStylePropertyValue As Variant, clsStyleProperty As BneStyleProperty)
    Select Case strStylePropertyName
    Case "border-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty
    Case "border-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty
    Case "border-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty
    Case "border-left-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty, xlEdgeLeft
    Case "border-left-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty, xlEdgeLeft
    Case "border-left-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty, xlEdgeLeft
    Case "border-right-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty, xlEdgeRight
    Case "border-right-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty, xlEdgeRight
    Case "border-right-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty, xlEdgeRight
    Case "border-top-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty, xlEdgeTop
    Case "border-top-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty, xlEdgeTop
    Case "border-top-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty, xlEdgeTop
    Case "border-bottom-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty, xlEdgeBottom
    Case "border-bottom-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty, xlEdgeBottom
    Case "border-bottom-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty, xlEdgeBottom
    Case "border-insideVertical-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty, xlInsideVertical
    Case "border-insideVertical-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty, xlInsideVertical
    Case "border-insideVertical-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty, xlInsideVertical
    Case "border-insideHorizontal-weight"
    getDefaultBorder strStylePropertyName, "Weight", varStylePropertyValue, clsStyleProperty, xlInsideHorizontal
    Case "border-insideHorizontal-style"
    getDefaultBorder strStylePropertyName, "LineStyle", varStylePropertyValue, clsStyleProperty, xlInsideHorizontal
    Case "border-insideHorizontal-color"
    getDefaultBorder strStylePropertyName, "Color", varStylePropertyValue, clsStyleProperty, xlInsideHorizontal
    Case "background"
    clsStyleProperty.setStyleProperty strStylePropertyName, "Interior"
    clsStyleProperty.addChildStyleProperty strStylePropertyName, "Color", varStylePropertyValue
    Case "font-color"
    clsStyleProperty.setStyleProperty strStylePropertyName, "Font"
    clsStyleProperty.addChildStyleProperty strStylePropertyName, "Color", varStylePropertyValue
    Case "font-family"
    clsStyleProperty.setStyleProperty strStylePropertyName, "Font"
    clsStyleProperty.addChildStyleProperty strStylePropertyName, "Name", varStylePropertyValue
    Case "font-style"
    clsStyleProperty.setStyleProperty strStylePropertyName, "Font"
    clsStyleProperty.addChildStyleProperty strStylePropertyName, "FontStyle", varStylePropertyValue
    Case "font-size"
    clsStyleProperty.setStyleProperty strStylePropertyName, "Font"
    clsStyleProperty.addChildStyleProperty strStylePropertyName, "Size", varStylePropertyValue
    Case "text-align"
    clsStyleProperty.setStyleProperty strStylePropertyName, "HorizontalAlignment", varStylePropertyValue
    Case "merge-cells"
    clsStyleProperty.setStyleProperty strStylePropertyName, "MergeCells", varStylePropertyValue
    Case "protected"
    clsStyleProperty.setStyleProperty strStylePropertyName, "Locked", varStylePropertyValue
    Case "freeze-pane"
    clsStyleProperty.setStyleProperty strStylePropertyName, "ActiveWindow", , APPLICATION_LEVEL
    clsStyleProperty.addChildStyleProperty strStylePropertyName, "FreezePanes", varStylePropertyValue
    End Select
    
    End Sub
    Public Sub getDefaultBorder(strPropertyName As String, strSubPropertyVBA As String, varPropertyValue As Variant, clsStyleProperty As BneStyleProperty, Optional lngBorderEdge As Long)
    clsStyleProperty.setStyleProperty strPropertyName, "Borders"
    If IsMissing(lngBorderEdge) Then
    clsStyleProperty.addChildStyleProperty strPropertyName, strSubPropertyVBA, varPropertyValue
    Else
    Dim clsChildPropery As New BneStyleProperty
    clsChildPropery.setStyleProperty strPropertyName, "Item", lngBorderEdge
    clsChildPropery.addChildStyleProperty strPropertyName, strSubPropertyVBA, varPropertyValue
    clsStyleProperty.addChild clsChildPropery
    End If
    End Sub
    

    General
    Stream Path:VBA/BneStyleSheet
    VBA File Name:BneStyleSheet
    Stream Size:15432
    Data ASCII:. . . . . . . . . . . . . . . 8 . . . . . . . . . . / . . . . . . . . . . > . . . . . . . . . . . . . . . . . . . . x . . . @ . L I . g . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . . . M 4 . S . . . . . . . . . . . . . . . . . . . . . . x . . . . . . M 4 . S @ . L I . g . . . . . M E . . . . . . . . . . . . . . . . . . . . . 0 . . . . P . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . " . . . . . . 6 " . . . . . < 8 . . . . . . < . . . . . . . . . . N . 0 . { . F . C . F . B . 3 .
    Data Raw:01 16 03 00 06 00 01 00 00 82 07 00 00 e4 00 00 00 38 02 00 00 ea 07 00 00 f8 07 00 00 00 2f 00 00 03 00 00 00 01 00 00 00 ce c1 3e db 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 78 00 ff ff 00 00 40 e6 95 b5 f2 4c ba 49 a2 d7 80 94 a1 b3 67 09 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneStyleSheet"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colStyles As Collection
    Public Sub Class_Initialize()
    On Error GoTo ErrorHandler
    Set m_colStyles = New Collection
    Application.ActiveWorkbook.Colors(56) = RGB(214, 223, 230)
    Application.ActiveWorkbook.Colors(55) = RGB(247, 249, 252)
    Application.ActiveWorkbook.Colors(54) = RGB(79, 79, 79)
    Application.ActiveWorkbook.Colors(53) = RGB(238, 238, 238)
    Application.ActiveWorkbook.Colors(52) = RGB(0, 61, 91)
    Application.ActiveWorkbook.Colors(51) = RGB(242, 244, 247)
    Application.ActiveWorkbook.Colors(50) = RGB(163, 194, 223)
    Application.ActiveWorkbook.Colors(49) = RGB(153, 190, 220)
    Application.ActiveWorkbook.Colors(48) = RGB(0, 0, 0)
    Application.ActiveWorkbook.Colors(47) = RGB(72, 100, 140)
    Application.ActiveWorkbook.Colors(46) = RGB(51, 51, 51)
    Application.ActiveWorkbook.Colors(45) = RGB(255, 255, 255)
    Dim clsbne_lines_row As New BneStyle
    clsbne_lines_row.StyleCode = "BNE_LINES_ROW"
    m_colStyles.add clsbne_lines_row, clsbne_lines_row.StyleCode
    clsbne_lines_row.addStyleProperty "background", RGB(255, 255, 255)
    clsbne_lines_row.addStyleProperty "merge-cells", False
    clsbne_lines_row.addStyleProperty "border-bottom-weight", xlThin
    clsbne_lines_row.addStyleProperty "border-insideHorizontal-weight", xlThin
    clsbne_lines_row.addStyleProperty "border-bottom-style", xlContinuous
    clsbne_lines_row.addStyleProperty "border-insideHorizontal-style", xlContinuous
    clsbne_lines_row.addStyleProperty "font-color", RGB(51, 51, 51)
    clsbne_lines_row.addStyleProperty "border-right-style", xlContinuous
    clsbne_lines_row.addStyleProperty "border-bottom-color", RGB(238, 238, 238)
    clsbne_lines_row.addStyleProperty "border-insideHorizontal-color", RGB(238, 238, 238)
    clsbne_lines_row.addStyleProperty "border-right-weight", xlThin
    clsbne_lines_row.addStyleProperty "border-right-color", RGB(238, 238, 238)
    Dim clsbne_lines As New BneStyle
    clsbne_lines.StyleCode = "BNE_LINES"
    m_colStyles.add clsbne_lines, clsbne_lines.StyleCode
    clsbne_lines.addStyleProperty "border-top-color", RGB(238, 238, 238)
    clsbne_lines.addStyleProperty "border-bottom-weight", xlThin
    clsbne_lines.addStyleProperty "border-bottom-style", xlContinuous
    clsbne_lines.addStyleProperty "border-right-style", xlContinuous
    clsbne_lines.addStyleProperty "border-bottom-color", RGB(238, 238, 238)
    clsbne_lines.addStyleProperty "border-right-weight", xlThin
    clsbne_lines.addStyleProperty "border-left-style", xlContinuous
    clsbne_lines.addStyleProperty "border-top-weight", xlThin
    clsbne_lines.addStyleProperty "border-right-color", RGB(238, 238, 238)
    clsbne_lines.addStyleProperty "border-left-weight", xlThin
    clsbne_lines.addStyleProperty "border-top-style", xlContinuous
    clsbne_lines.addStyleProperty "border-left-color", RGB(238, 238, 238)
    Dim clsbne_header_row As New BneStyle
    clsbne_header_row.StyleCode = "BNE_HEADER_ROW"
    m_colStyles.add clsbne_header_row, clsbne_header_row.StyleCode
    clsbne_header_row.addStyleProperty "border-top-color", RGB(214, 223, 230)
    clsbne_header_row.addStyleProperty "background", RGB(247, 249, 252)
    clsbne_header_row.addStyleProperty "merge-cells", True
    clsbne_header_row.addStyleProperty "border-bottom-weight", xlThin
    clsbne_header_row.addStyleProperty "border-bottom-style", xlContinuous
    clsbne_header_row.addStyleProperty "font-color", RGB(51, 51, 51)
    clsbne_header_row.addStyleProperty "border-right-style", xlContinuous
    clsbne_header_row.addStyleProperty "border-bottom-color", RGB(214, 223, 230)
    clsbne_header_row.addStyleProperty "border-right-weight", xlThin
    clsbne_header_row.addStyleProperty "border-left-style", xlContinuous
    clsbne_header_row.addStyleProperty "border-top-weight", xlThin
    clsbne_header_row.addStyleProperty "border-right-color", RGB(214, 223, 230)
    clsbne_header_row.addStyleProperty "border-left-weight", xlThin
    clsbne_header_row.addStyleProperty "border-top-style", xlContinuous
    clsbne_header_row.addStyleProperty "border-left-color", RGB(214, 223, 230)
    Dim clsprompt As New BneStyle
    clsprompt.StyleCode = "PROMPT"
    m_colStyles.add clsprompt, clsprompt.StyleCode
    clsprompt.addStyleProperty "merge-cells", True
    clsprompt.addStyleProperty "font-style", "BOLD"
    clsprompt.addStyleProperty "protected", True
    clsprompt.addStyleProperty "font-family", "Tahoma"
    clsprompt.addStyleProperty "background", RGB(163, 194, 223)
    clsprompt.addStyleProperty "font-size", 9
    clsprompt.addStyleProperty "text-align", xlLeft
    clsprompt.addStyleProperty "font-color", RGB(72, 100, 140)
    Dim clsbne_header As New BneStyle
    clsbne_header.StyleCode = "BNE_HEADER"
    m_colStyles.add clsbne_header, clsbne_header.StyleCode
    Dim clsBlock As New BneStyle
    clsBlock.StyleCode = "BLOCK"
    m_colStyles.add clsBlock, clsBlock.StyleCode
    Dim clsbne_header_hint As New BneStyle
    clsbne_header_hint.StyleCode = "BNE_HEADER_HINT"
    m_colStyles.add clsbne_header_hint, clsbne_header_hint.StyleCode
    clsbne_header_hint.addStyleProperty "background", RGB(255, 255, 255)
    clsbne_header_hint.addStyleProperty "text-align", xlRight
    Dim clsbne_lines_header As New BneStyle
    clsbne_lines_header.StyleCode = "BNE_LINES_HEADER"
    m_colStyles.add clsbne_lines_header, clsbne_lines_header.StyleCode
    clsbne_lines_header.addStyleProperty "font-style", "BOLD"
    clsbne_lines_header.addStyleProperty "background", RGB(242, 244, 247)
    clsbne_lines_header.addStyleProperty "border-right-color", RGB(214, 223, 230)
    clsbne_lines_header.addStyleProperty "border-right-weight", xlThin
    clsbne_lines_header.addStyleProperty "border-right-style", xlContinuous
    clsbne_lines_header.addStyleProperty "font-color", RGB(0, 0, 0)
    Dim clsbne_lines_hint As New BneStyle
    clsbne_lines_hint.StyleCode = "BNE_LINES_HINT"
    m_colStyles.add clsbne_lines_hint, clsbne_lines_hint.StyleCode
    clsbne_lines_hint.addStyleProperty "border-bottom-style", xlContinuous
    clsbne_lines_hint.addStyleProperty "background", RGB(242, 244, 247)
    clsbne_lines_hint.addStyleProperty "border-right-color", RGB(214, 223, 230)
    clsbne_lines_hint.addStyleProperty "border-bottom-weight", xlThin
    clsbne_lines_hint.addStyleProperty "border-right-weight", xlThin
    clsbne_lines_hint.addStyleProperty "border-right-style", xlContinuous
    clsbne_lines_hint.addStyleProperty "text-align", xlLeft
    clsbne_lines_hint.addStyleProperty "border-bottom-color", RGB(214, 223, 230)
    Dim clsbne_lines_total As New BneStyle
    clsbne_lines_total.StyleCode = "BNE_LINES_TOTAL"
    m_colStyles.add clsbne_lines_total, clsbne_lines_total.StyleCode
    clsbne_lines_total.addStyleProperty "font-style", "REGULAR"
    clsbne_lines_total.addStyleProperty "font-family", "Tahoma"
    clsbne_lines_total.addStyleProperty "background", RGB(242, 244, 247)
    clsbne_lines_total.addStyleProperty "font-size", 9
    clsbne_lines_total.addStyleProperty "font-color", RGB(0, 0, 0)
    Dim clsread_only As New BneStyle
    clsread_only.StyleCode = "READ_ONLY"
    m_colStyles.add clsread_only, clsread_only.StyleCode
    clsread_only.addStyleProperty "protected", True
    clsread_only.addStyleProperty "background", RGB(247, 249, 252)
    Dim clsdata As New BneStyle
    clsdata.StyleCode = "DATA"
    m_colStyles.add clsdata, clsdata.StyleCode
    clsdata.addStyleProperty "font-style", "REGULAR"
    clsdata.addStyleProperty "protected", False
    clsdata.addStyleProperty "font-family", "Tahoma"
    clsdata.addStyleProperty "background", RGB(255, 255, 255)
    clsdata.addStyleProperty "font-size", 9
    clsdata.addStyleProperty "font-color", RGB(0, 0, 0)
    Dim clsbne_context_row As New BneStyle
    clsbne_context_row.StyleCode = "BNE_CONTEXT_ROW"
    m_colStyles.add clsbne_context_row, clsbne_context_row.StyleCode
    clsbne_context_row.addStyleProperty "border-top-color", RGB(214, 223, 230)
    clsbne_context_row.addStyleProperty "background", RGB(247, 249, 252)
    clsbne_context_row.addStyleProperty "merge-cells", True
    clsbne_context_row.addStyleProperty "border-bottom-weight", xlThin
    clsbne_context_row.addStyleProperty "border-bottom-style", xlContinuous
    clsbne_context_row.addStyleProperty "font-color", RGB(51, 51, 51)
    clsbne_context_row.addStyleProperty "border-right-style", xlContinuous
    clsbne_context_row.addStyleProperty "border-bottom-color", RGB(214, 223, 230)
    clsbne_context_row.addStyleProperty "border-right-weight", xlThin
    clsbne_context_row.addStyleProperty "border-left-style", xlContinuous
    clsbne_context_row.addStyleProperty "border-top-weight", xlThin
    clsbne_context_row.addStyleProperty "border-right-color", RGB(214, 223, 230)
    clsbne_context_row.addStyleProperty "border-left-weight", xlThin
    clsbne_context_row.addStyleProperty "border-top-style", xlContinuous
    clsbne_context_row.addStyleProperty "border-left-color", RGB(214, 223, 230)
    Dim clshint As New BneStyle
    clshint.StyleCode = "HINT"
    m_colStyles.add clshint, clshint.StyleCode
    clshint.addStyleProperty "merge-cells", True
    clshint.addStyleProperty "font-style", "REGULAR"
    clshint.addStyleProperty "protected", True
    clshint.addStyleProperty "font-family", "Tahoma"
    clshint.addStyleProperty "background", RGB(163, 194, 223)
    clshint.addStyleProperty "font-size", 7
    clshint.addStyleProperty "font-color", RGB(79, 79, 79)
    Dim clstitle As New BneStyle
    clstitle.StyleCode = "TITLE"
    m_colStyles.add clstitle, clstitle.StyleCode
    clstitle.addStyleProperty "font-style", "BOLD"
    clstitle.addStyleProperty "border-bottom-style", xlContinuous
    clstitle.addStyleProperty "background", RGB(255, 255, 255)
    clstitle.addStyleProperty "border-bottom-weight", xlThin
    clstitle.addStyleProperty "font-color", RGB(0, 61, 91)
    clstitle.addStyleProperty "border-bottom-color", RGB(153, 190, 220)
    Dim clsbne_context_header As New BneStyle
    clsbne_context_header.StyleCode = "BNE_CONTEXT_HEADER"
    m_colStyles.add clsbne_context_header, clsbne_context_header.StyleCode
    clsbne_context_header.addStyleProperty "font-style", "BOLD"
    clsbne_context_header.addStyleProperty "background", RGB(255, 255, 255)
    clsbne_context_header.addStyleProperty "font-color", RGB(79, 79, 79)
    Dim clsbne_page As New BneStyle
    clsbne_page.StyleCode = "BNE_PAGE"
    m_colStyles.add clsbne_page, clsbne_page.StyleCode
    clsbne_page.addStyleProperty "font-style", "REGULAR"
    clsbne_page.addStyleProperty "protected", True
    clsbne_page.addStyleProperty "font-family", "Tahoma"
    clsbne_page.addStyleProperty "background", RGB(255, 255, 255)
    clsbne_page.addStyleProperty "font-size", 9
    clsbne_page.addStyleProperty "font-color", RGB(0, 0, 0)
    Dim clsbne_context As New BneStyle
    clsbne_context.StyleCode = "BNE_CONTEXT"
    m_colStyles.add clsbne_context, clsbne_context.StyleCode
    Dim clsbne_header_header As New BneStyle
    clsbne_header_header.StyleCode = "BNE_HEADER_HEADER"
    m_colStyles.add clsbne_header_header, clsbne_header_header.StyleCode
    clsbne_header_header.addStyleProperty "font-style", "BOLD"
    clsbne_header_header.addStyleProperty "background", RGB(255, 255, 255)
    clsbne_header_header.addStyleProperty "font-color", RGB(79, 79, 79)
    Dim clsicon_style As New BneStyle
    clsicon_style.StyleCode = "ICON_STYLE"
    m_colStyles.add clsicon_style, clsicon_style.StyleCode
    clsicon_style.addStyleProperty "font-family", "WingDings"
    clsbne_lines_row.addStyleProperties getStyle("DATA")
    clsbne_lines.addStyleProperties getStyle("BLOCK")
    clsbne_header_row.addStyleProperties getStyle("DATA")
    clsbne_header.addStyleProperties getStyle("BLOCK")
    clsbne_header_hint.addStyleProperties getStyle("HINT")
    clsbne_lines_header.addStyleProperties getStyle("PROMPT")
    clsbne_lines_hint.addStyleProperties getStyle("HINT")
    clsbne_lines_total.addStyleProperties getStyle("DATA")
    clsbne_context_row.addStyleProperties getStyle("DATA")
    clstitle.addStyleProperties getStyle("PROMPT")
    clsbne_context_header.addStyleProperties getStyle("PROMPT")
    clsbne_header_header.addStyleProperties getStyle("PROMPT")
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "BneStyleSheet.Class_Initialize", "Error: " & Err.Description
    Resume Next
    End Sub
    Public Sub Class_Terminate()
    Set m_colStyles = Nothing
    End Sub
    Public Function getStyle(strStyleName As String) As BneStyle
    If ContainsItem(m_colStyles, strStyleName) Then
    Set getStyle = m_colStyles.Item(strStyleName)
    End If
    End Function
    

    General
    Stream Path:VBA/BneSummarySheet
    VBA File Name:BneSummarySheet
    Stream Size:16238
    Data ASCII:. . . . . . . . . . . . . . . x . . . . . . . . / . . . . . . . . . . t T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . h . ( . 8 . X . . . @ . H . ` . P . 0 . . . . . . S . . . . . S . . . . . S . . . . . < 6 . . . . . . < . . . . . . <
    Data Raw:01 16 03 00 01 f0 00 00 00 02 0b 00 00 d4 00 00 00 78 02 00 00 ff ff ff ff 13 0b 00 00 7f 2f 00 00 00 00 00 00 01 00 00 00 ce c1 74 54 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneSummarySheet"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Public Function getSummarySheet() As Worksheet
    Dim objSummarySheet As Worksheet
    Dim strSummarySheet As String
    Dim objActiveSheet As Worksheet
    strSummarySheet = "Message Summary"
    On Error Resume Next
    Set objSummarySheet = Worksheets(strSummarySheet)
    On Error GoTo 0
    If objSummarySheet Is Nothing Then
    Set objActiveSheet = ActiveSheet
    Set objSummarySheet = Worksheets.add(, Worksheets(Worksheets.count))
    FormatSummary objSummarySheet
    AddSheetCode objSummarySheet
    objActiveSheet.Activate
    End If
    Set getSummarySheet = objSummarySheet
    End Function
    Public Sub Show()
    Dim objSummarySheet As Worksheet
    Set objSummarySheet = getSummarySheet
    objSummarySheet.Activate
    End Sub
    Public Sub FormatSummary(objSummarySheet As Worksheet)
    Dim clsMain As New BneLayoutBlock
    Dim clsBlock As New BneLayoutBlock
    Dim objSheet As Worksheet
    Dim clsStyleSheet As New BneStyleSheet
    Dim clsCol As BneLayoutColumn
    Dim strText As String
    Dim strYesNO As String
    Dim clsSheetStyle As BneStyle
    Dim blnProtect As Boolean
    Set objSheet = objSummarySheet
    objSheet.name = "Message Summary"
    objSheet.Cells.Select
    Set clsSheetStyle = clsStyleSheet.getStyle("BNE_PAGE")
    If Not clsSheetStyle Is Nothing Then
    clsSheetStyle.applyStyle objSheet.Cells
    End If
    objSheet.Cells(1, 1).Select
    ActiveWindow.RangeSelection.Columns(1).ColumnWidth = 2
    Selection.EntireRow.Hidden = True
    strText = "Message Summary"
    objSheet.Cells(4, 2).Select
    Selection.value = strText
    Selection.Font.ColorIndex = 47
    Selection.Font.FontStyle = "bold"
    Selection.Font.name = "Arial"
    Selection.Font.size = 12
    objSheet.Range(objSheet.Cells(4, 2), objSheet.Cells(4, 6)).Select
    With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = 40
    End With
    strText = "Clear messages on upload"
    objSheet.Cells(6, 2).Select
    Selection.value = strText
    objSheet.Cells(6, 4).Select
    objSheet.Names.add name:="CLEAR_MESSAGES", RefersTo:=Selection
    strText = "Yes"
    strYesNO = strText
    strText = "No"
    strYesNO = strYesNO & "," & strText
    With Selection.Validation
    .add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="Yes,No"
    End With
    strText = "Yes"
    Selection.value = strText
    clsBlock.StartCol = 2
    clsBlock.StartRow = 8
    clsBlock.BLOCKSIZE = 10
    clsBlock.LayoutElement = "LINE"
    clsBlock.BlockId = 1
    clsBlock.Orientation = "VERTICAL"
    clsBlock.PromptSpan = 0
    clsBlock.HintSpan = 0
    clsBlock.DataSpan = 1
    clsBlock.UserName = "Line"
    clsBlock.BlockStyle = clsStyleSheet.getStyle("BNE_LINES")
    clsBlock.PromptStyle = clsStyleSheet.getStyle("BNE_LINES_HEADER")
    clsBlock.HintStyle = clsStyleSheet.getStyle("BNE_LINES_HINT")
    clsBlock.DataStyle = clsStyleSheet.getStyle("BNE_LINES_ROW")
    clsBlock.SummaryStyle = clsStyleSheet.getStyle("BNE_LINES_TOTAL")
    clsBlock.TitleStyle = clsStyleSheet.getStyle("TITLE")
    clsBlock.Hidden = False
    strText = "Sheet"
    Set clsCol = New BneLayoutColumn
    clsCol.isInterfaceColumn = True
    clsCol.ColumnName = "Sheet"
    clsCol.InterfaceColName = "Sheet"
    clsCol.Prompt = strText
    clsCol.Order = 1
    clsCol.DataType = 1
    clsCol.ColumnWidth = 10
    clsCol.DefaultValue = ""
    clsCol.PromptStyle = clsStyleSheet.getStyle("")
    clsCol.HintStyle = clsStyleSheet.getStyle("")
    clsCol.ReadOnly = False
    clsCol.ReadOnlyStyle = clsStyleSheet.getStyle("READ_ONLY")
    clsCol.ColumnStyle = clsStyleSheet.getStyle("")
    clsCol.TotalColumn = False
    clsCol.ColumnFormat = "General"
    clsBlock.addLayoutColumn clsCol
    strText = "Message Type"
    Set clsCol = New BneLayoutColumn
    clsCol.isInterfaceColumn = True
    clsCol.ColumnName = "Message_Type"
    clsCol.InterfaceColName = "Message_Type"
    clsCol.Prompt = strText
    clsCol.Order = 2
    clsCol.DataType = 1
    clsCol.ColumnWidth = 15
    clsCol.DefaultValue = ""
    clsCol.PromptStyle = clsStyleSheet.getStyle("")
    clsCol.HintStyle = clsStyleSheet.getStyle("")
    clsCol.ReadOnly = False
    clsCol.ReadOnlyStyle = clsStyleSheet.getStyle("READ_ONLY")
    clsCol.ColumnStyle = clsStyleSheet.getStyle("")
    clsCol.TotalColumn = False
    clsCol.ColumnFormat = "General"
    clsBlock.addLayoutColumn clsCol
    strText = "Message"
    Set clsCol = New BneLayoutColumn
    clsCol.isInterfaceColumn = True
    clsCol.ColumnName = "Message"
    clsCol.InterfaceColName = "Message"
    clsCol.Prompt = strText
    clsCol.Order = 3
    clsCol.DataType = 1
    clsCol.ColumnWidth = 30
    clsCol.DefaultValue = ""
    clsCol.PromptStyle = clsStyleSheet.getStyle("")
    clsCol.HintStyle = clsStyleSheet.getStyle("")
    clsCol.ReadOnly = False
    clsCol.ReadOnlyStyle = clsStyleSheet.getStyle("READ_ONLY")
    clsCol.ColumnStyle = clsStyleSheet.getStyle("")
    clsCol.TotalColumn = False
    clsCol.ColumnFormat = "General"
    clsBlock.addLayoutColumn clsCol
    strText = "Date"
    Set clsCol = New BneLayoutColumn
    clsCol.isInterfaceColumn = True
    clsCol.ColumnName = "Date"
    clsCol.InterfaceColName = "Date"
    clsCol.Prompt = strText
    clsCol.Order = 4
    clsCol.DataType = 1
    clsCol.ColumnWidth = 15
    clsCol.DefaultValue = ""
    clsCol.PromptStyle = clsStyleSheet.getStyle("")
    clsCol.HintStyle = clsStyleSheet.getStyle("")
    clsCol.ReadOnly = False
    clsCol.ReadOnlyStyle = clsStyleSheet.getStyle("READ_ONLY")
    clsCol.ColumnStyle = clsStyleSheet.getStyle("")
    clsCol.TotalColumn = False
    clsCol.ColumnFormat = "General"
    clsBlock.addLayoutColumn clsCol
    strText = "Time"
    Set clsCol = New BneLayoutColumn
    clsCol.isInterfaceColumn = True
    clsCol.ColumnName = "Time"
    clsCol.InterfaceColName = "Time"
    clsCol.Prompt = strText
    clsCol.Order = 5
    clsCol.DataType = 1
    clsCol.ColumnWidth = 15
    clsCol.DefaultValue = ""
    clsCol.PromptStyle = clsStyleSheet.getStyle("")
    clsCol.HintStyle = clsStyleSheet.getStyle("")
    clsCol.ReadOnly = False
    clsCol.ReadOnlyStyle = clsStyleSheet.getStyle("READ_ONLY")
    clsCol.ColumnStyle = clsStyleSheet.getStyle("")
    clsCol.TotalColumn = False
    clsCol.ColumnFormat = "General"
    clsBlock.addLayoutColumn clsCol
    clsBlock.HideButton = True
    clsBlock.render objSheet, clsBlock.BlockId
    objSheet.Range( Cells(objSheet.Range("Line").Row, objSheet.Range("Line").Column), Cells(objSheet.Range("Line").Row + objSheet.Range("Line").Rows.count - 2, objSheet.Range("Line").Column + objSheet.Range("Line").Columns.count - 1) ).Select
    Selection.AutoFilter
    objSheet.Range("CLEAR_MESSAGES").Select
    End Sub
    Public Sub Clear()
    Dim objSheet As Worksheet
    Dim blnProtection As Boolean
    Dim objActiveSheet As Object
    Dim strYes As String
    Set objSheet = getSummarySheet
    strYes = "Yes"
    If objSheet.Range("CLEAR_MESSAGES").value <> strYes Then
    Exit Sub
    End If
    Set objActiveSheet = ActiveSheet
    objSheet.Activate
    blnProtection = objSheet.ProtectionMode
    objSheet.Unprotect
    objSheet.Range("Sheet").EntireRow.Select
    Selection.clearContents
    If Selection.Rows.count > 10 Then
    objSheet.Range( Cells(objSheet.Range("Sheet").Row + 1, objSheet.Range("Sheet").Column), Cells(objSheet.Range("Sheet").Row + objSheet.Range("Sheet").Rows.count - 10, objSheet.Range("Sheet").Column) ).EntireRow.Select
    Selection.Delete
    End If
    objSheet.Range("CLEAR_MESSAGES").Select
    If blnProtection = True Then
    objSheet.Protect
    End If
    objActiveSheet.Activate
    End Sub
    Public Sub AddMessages(objSheet As Worksheet, clsmessages As BneVBAMessages)
    Dim clsMsg As BneVBAMessage
    Dim objSummarySheet As Worksheet
    For Each clsMsg In clsmessages.Messages
    addMessage objSheet, clsMsg
    Next
    End Sub
    Public Sub addMessage(objSheet As Worksheet, clsMsg As BneVBAMessage)
    Dim lngNextRow As Long
    Dim objSummarySheet As Worksheet
    Dim strCellRef As String
    If clsMsg.msgType = "DATA" Then
    Exit Sub
    End If
    Set objSummarySheet = getSummarySheet
    lngNextRow = NextEnterableRow(objSummarySheet)
    If Not objSheet Is Nothing And clsMsg.msgType = "ERROR" And Len(clsMsg.msgRange) > 0 Then
    If clsMsg.msgIdx > 0 Then
    strCellRef = objSheet.Cells(objSheet.Range(clsMsg.msgRange).Cells(clsMsg.msgIdx).Row, objSheet.Range(clsMsg.msgRange).Column).Address
    ActiveSheet.Hyperlinks.add objSummarySheet.Cells(lngNextRow, 2), Address:="", SubAddress:="'" & objSheet.name & "'!" & strCellRef, TextToDisplay:=objSheet.name
    Else
    ActiveSheet.Hyperlinks.add objSummarySheet.Cells(lngNextRow, 2), Address:="", SubAddress:="'" & objSheet.name & "'!" & clsMsg.msgRange, TextToDisplay:=objSheet.name
    End If
    End If
    objSummarySheet.Cells(lngNextRow, 3).value = clsMsg.msgTypeUserName
    objSummarySheet.Cells(lngNextRow, 4).value = clsMsg.msgText
    objSummarySheet.Cells(lngNextRow, 5).value = Date
    objSummarySheet.Cells(lngNextRow, 6).value = Time
    End Sub
    Private Function NextEnterableRow(objSummarySheet As Worksheet) As Long
    Dim lngLastRow As Long
    Dim objType As Range
    Dim objInsertRange As Range
    Dim blnProtection As Boolean
    Set objType = objSummarySheet.Range("Message_Type")
    On Error Resume Next
    lngLastRow = objType.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    On Error GoTo 0
    If lngLastRow = 0 Then
    lngLastRow = objType.Row
    End If
    If (lngLastRow + 1) >= (objType.Row + objType.Rows.count) Then
    blnProtection = objSummarySheet.ProtectionMode
    objSummarySheet.Unprotect
    Set objInsertRange = objSummarySheet.Range(objSummarySheet.Cells(objType.Rows.count + objType.Row - 1, 1), objSummarySheet.Cells(objType.Rows.count + objType.Row - 1, 1))
    objInsertRange.Offset(0, 0).EntireRow.Resize(1).Insert
    If blnProtection = True Then
    objSummarySheet.Protect
    End If
    End If
    NextEnterableRow = lngLastRow
    End Function
    Private Sub AddSheetCode(objSummarySheet As Worksheet)
    Dim objCodeModule As CodeModule
    Dim strCode As String
    Dim strComponentName As String
    Dim objComponent As VBComponent
    For Each objComponent In Application.VBE.ActiveVBProject.VBComponents
    strComponentName = objComponent.name
    Next
    Set objCodeModule = Application.VBE.ActiveVBProject.VBComponents(objSummarySheet.CodeName).CodeModule
    strCode = "Public Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)" & vbCrLf & "    Dim strSheet As String" & vbCrLf & "    On Error Resume Next" & vbCrLf & "    strSheet = Left(Target.SubAddress, InStr(Target.SubAddress, ""!"") - 1)" & vbCrLf & "    strSheet = Replace(strSheet, ""'"", """")" & vbCrLf & "    Application.Run Worksheets(strSheet).CodeName & "".BneSheetActivate""" & vbCrLf & "End Sub"
    objCodeModule.AddFromString strCode
    End Sub
    
    

    General
    Stream Path:VBA/BneUploadBlock
    VBA File Name:BneUploadBlock
    Stream Size:15999
    Data ASCII:. . . . . . . . . Z . . . . . . . . . O . . . ] . . . 0 . . . . . . . . . . E . . . . . . . . . . . . . . . . . . . . . . . + ! I T P 3 * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . . v . . I @ m F O D . . . . . . . . . . . . . . . . . . . . . . x . . . . . v . . I @ m F O D + ! I T P 3 . . . . M E . . . . . . . . . . . . . . . . . . . . . h . . P . 8 . H . X . . . @ . 0 . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . 0 6 . . . . . " . . . . . " ( . . . . . . . < ~ . . . . . . < .
    Data Raw:01 16 03 00 06 00 01 00 00 5a 13 00 00 e4 00 00 00 88 02 00 00 4f 14 00 00 5d 14 00 00 81 30 00 00 14 00 00 00 01 00 00 00 ce c1 45 d1 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 90 00 ff ff 00 00 cd e2 ca 2b 95 ed 21 49 bd fa ab 54 50 33 b2 87 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneUploadBlock"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colColumns As Collection
    Private m_colUploadableRows As Collection
    Private m_lngBlockSize As Long
    Private m_strLayoutElement As String
    Public Property Get LayoutElement() As String
    LayoutElement = m_strLayoutElement
    End Property
    Public Property Let LayoutElement(strLayoutElement As String)
    m_strLayoutElement = strLayoutElement
    End Property
    Public Property Get BLOCKSIZE() As Long
    BLOCKSIZE = m_lngBlockSize
    End Property
    Public Property Let BLOCKSIZE(lngBlockSize As Long)
    m_lngBlockSize = lngBlockSize
    End Property
    Private Sub Class_Initialize()
    Set m_colColumns = New Collection
    Set m_colUploadableRows = New Collection
    End Sub
    Public Sub Class_Terminate()
    Set m_colColumns = Nothing
    Set m_colUploadableRows = Nothing
    End Sub
    Public Property Get Columns() As Collection
    Set Columns = m_colColumns
    End Property
    Public Property Let Columns(colColumns As Collection)
    Set m_colColumns = colColumns
    End Property
    Public Property Get UploadableRows() As Collection
    Set UploadableRows = m_colUploadableRows
    End Property
    Public Property Let UploadableRows(colUplRows As Collection)
    Set m_colUploadableRows = colUplRows
    End Property
    Public Property Get CountColumns() As Integer
    CountColumns = m_colColumns.count
    End Property
    Public Sub addColumns(objSheet As Worksheet, objLayoutBlock As BneLayoutBlock)
    Dim objLayoutColumn As BneLayoutColumn
    For Each objLayoutColumn In objLayoutBlock.layoutColumns
    addColumn objSheet, objLayoutColumn
    Next
    End Sub
    Private Sub addColumn(objSheet As Worksheet, objLayoutColumn As BneLayoutColumn)
    Dim objUploadColumn As BneUploadColumn
    Dim objColRange As Range
    Dim blnExists As Boolean
    On Error Resume Next
    Set objUploadColumn = m_colColumns(objLayoutColumn.InterfaceColName)
    Set objColRange = objSheet.Names(objLayoutColumn.InterfaceColName).RefersToRange
    On Error GoTo 0
    If objUploadColumn Is Nothing And Not objColRange Is Nothing And objLayoutColumn.isInterfaceColumn Then
    Set objUploadColumn = New BneUploadColumn
    objUploadColumn.initUploadColumn objColRange, objLayoutColumn, m_colUploadableRows
    m_colColumns.add objUploadColumn, objUploadColumn.InterfaceColName
    End If
    Dim objChildColumn As BneLayoutColumn
    For Each objChildColumn In objLayoutColumn.childColumns
    addColumn objSheet, objChildColumn
    Next
    End Sub
    Public Sub setUploadableRows(objSheet As Worksheet, objLayoutBlock As BneLayoutBlock, blnFlagRowsOnly As Boolean)
    Dim objUplRange As Range
    Dim objMessagesRange As Range
    Dim objRowRange As Range
    Dim objUplRow As Range
    Dim lngRowStart As Long
    Dim intUplColStart As Integer
    Dim intMsgColStart As Integer
    If objLayoutBlock.Orientation = "VERTICAL" Then
    Set objUplRange = objSheet.Names("BNE_UPLOAD").RefersToRange
    Set objMessagesRange = objSheet.Names("BNE_MESSAGES_LAMP").RefersToRange
    m_lngBlockSize = objUplRange.Rows.count
    intUplColStart = objUplRange.Column
    intMsgColStart = objMessagesRange.Column
    lngRowStart = objUplRange.Row
    For Each objUplRow In objUplRange
    Set objRowRange = objSheet.Range(objSheet.Cells(objUplRow.Row, intUplColStart), objSheet.Cells(objUplRow.Row, intMsgColStart))
    Dim blnRowIsEmpty As Boolean
    Dim varRowIndex As Variant
    blnRowIsEmpty = IsRangeEmpty(objSheet, objSheet.Range(objSheet.Cells(objUplRow.Row, intUplColStart + 1), objSheet.Cells(objUplRow.Row, intMsgColStart)))
    If blnFlagRowsOnly And Not blnRowIsEmpty And Not IsRangeEmpty(objSheet, objRowRange(1)) And objRowRange.Columns(1) <> "x" Then
    varRowIndex = (objRowRange.Row - lngRowStart) + 1
    m_colUploadableRows.add varRowIndex, "" & varRowIndex
    ElseIf Not blnFlagRowsOnly And Not blnRowIsEmpty And objRowRange.Columns(1) <> "x" Then
    varRowIndex = (objRowRange.Row - lngRowStart) + 1
    m_colUploadableRows.add varRowIndex, "" & varRowIndex
    End If
    Next
    Else
    m_colUploadableRows.add 1, "1"
    End If
    End Sub
    Public Function getRow(intRowIndex) As Collection
    Dim objColumn As BneUploadColumn
    Dim objColumnRow As BneUploadColumnRow
    Dim colColumnsInRow As New Collection
    For Each objColumn In Me.Columns
    colColumnsInRow.add objColumn.ColumnRows("" & intRowIndex) 'use the key
    Next
    Set getRow = colColumnsInRow
    End Function
    Public Sub appendBlock(objBlock2 As BneUploadBlock)
    Dim objColumn As BneUploadColumn
    Dim objBlock2Column As BneUploadColumn
    Dim objRow As BneUploadColumnRow
    Dim varNewIdx As Variant
    For Each objColumn In Me.Columns
    On Error Resume Next
    Set objBlock2Column = objBlock2.Columns(objColumn.InterfaceColName)
    On Error GoTo 0
    If Not objBlock2Column Is Nothing Then
    For Each objRow In objBlock2Column.ColumnRows
    varNewIdx = m_lngBlockSize + objRow.rowIdx
    objColumn.addRow objRow, varNewIdx
    addUploadableRow varNewIdx
    Next
    End If
    Next
    Me.BLOCKSIZE = Me.BLOCKSIZE + objBlock2.BLOCKSIZE
    End Sub
    Private Sub addUploadableRow(varRowIdx As Variant)
    If Not ContainsItem(m_colUploadableRows, "" & varRowIdx) Then
    m_colUploadableRows.add varRowIdx, "" & varRowIdx
    End If
    End Sub
    Public Sub processMessage(objSheet As Worksheet, objMessage As BneVBAMessage, Optional lngIdx As Long)
    Dim objMsgIcoRange As Range
    Dim objMsgRange As Range
    Dim objMsgHiddenRange As Range
    If Not lngIdx = 0 Then
    Set objMsgIcoRange = objSheet.Names("BNE_MESSAGES_LAMP").RefersToRange
    Set objMsgRange = objSheet.Names("BNE_MESSAGES").RefersToRange
    If objMessage.msgType = "ERROR" Then
    objMsgIcoRange(lngIdx).value = ActiveWorkbook.CustomDocumentProperties("LB_ERROR")
    GoTo addMessage
    ElseIf objMessage.msgType = "WARNING" Then
    If objMsgIcoRange(lngIdx).value <> ActiveWorkbook.CustomDocumentProperties("LB_ERROR") Then
    objMsgIcoRange(lngIdx).value = ActiveWorkbook.CustomDocumentProperties("LB_WARNING")
    End If
    GoTo addMessage
    End If
    End If
    Exit Sub
    addMessage:
    Set objMsgHiddenRange = objSheet.Names("BNE_MESSAGES_HIDDEN").RefersToRange
    objMsgHiddenRange.Font.Color = objMsgHiddenRange.Interior.Color
    If Len(objMsgHiddenRange(lngIdx).value) = 0 Then
    objMsgHiddenRange(lngIdx).value = objMessage.xml
    Else
    objMsgHiddenRange(lngIdx).value = objMsgHiddenRange(lngIdx).value & objMessage.xml
    End If
    If Len(objMsgRange(lngIdx).value) = 0 Then
    objMsgRange(lngIdx).value = objMessage.msgText
    Else
    objMsgRange(lngIdx).value = objMsgRange(lngIdx).value & ";" & objMessage.msgText
    End If
    End Sub
    Public Sub processUploadSuccess(objSheet As Worksheet, blnHasWarnings As Boolean)
    Dim varRow As Variant
    Dim objMsgIcoRange As Range
    Dim objUplRange As Range
    On Error GoTo ErrorHandler
    Set objMsgIcoRange = objSheet.Names("BNE_MESSAGES_LAMP").RefersToRange
    Set objUplRange = objSheet.Names("BNE_UPLOAD").RefersToRange
    If (m_colUploadableRows.count >= objMsgIcoRange.Rows.count) And bneMain.g_commitEachRow = False Then
    objMsgIcoRange = ActiveWorkbook.CustomDocumentProperties("LB_SUCCESS")
    objUplRange.clearContents
    Else
    For Each varRow In m_colUploadableRows
    On Error GoTo ErrorHandler
    If (varRow <= objMsgIcoRange.Rows.count) And (objMsgIcoRange(varRow).value <> ActiveWorkbook.CustomDocumentProperties("LB_ERROR")) Then
    If objMsgIcoRange(varRow).value <> ActiveWorkbook.CustomDocumentProperties("LB_WARNING") Then
    objMsgIcoRange(varRow) = ""
    objMsgIcoRange(varRow) = ActiveWorkbook.CustomDocumentProperties("LB_SUCCESS")
    End If
    objUplRange(varRow).clearContents
    End If
    Next
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "BneUploadBlock.processUploadSuccess", "Error: " & Err.Description
    Resume Next
    End Sub
    Public Sub clearContents(objSheet As Worksheet)
    Dim objMsgIcoRange As Range
    Dim objMsgRange As Range
    Dim objMsgHiddenRange As Range
    On Error GoTo ErrorHandler
    Set objMsgIcoRange = objSheet.Names("BNE_MESSAGES_LAMP").RefersToRange
    Set objMsgRange = objSheet.Names("BNE_MESSAGES").RefersToRange
    Set objMsgHiddenRange = objSheet.Names("BNE_MESSAGES_HIDDEN").RefersToRange
    objMsgIcoRange.clearContents
    objMsgRange.clearContents
    objMsgHiddenRange.clearContents
    If objMsgIcoRange.FormatConditions.count = 0 Then
    objMsgIcoRange.FormatConditions.add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""" & ActiveWorkbook.CustomDocumentProperties("LB_ERROR") & """"
    objMsgIcoRange.FormatConditions(objMsgIcoRange.FormatConditions.count).SetFirstPriority
    With objMsgIcoRange.FormatConditions(1)
    .Font.Bold = True
    .Font.Italic = False
    .Font.ColorIndex = 1
    .Font.TintAndShade = 0
    .Interior.PatternColorIndex = xlAutomatic
    .Interior.ColorIndex = 3
    .Interior.TintAndShade = 0
    .StopIfTrue = False
    End With
    objMsgIcoRange.FormatConditions.add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""" & ActiveWorkbook.CustomDocumentProperties("LB_WARNING") & """"
    With objMsgIcoRange.FormatConditions(2)
    .Font.Bold = True
    .Font.Italic = False
    .Font.ColorIndex = 1
    .Font.TintAndShade = 0
    .Interior.PatternColorIndex = xlAutomatic
    .Interior.ColorIndex = 6
    .Interior.TintAndShade = 0
    .StopIfTrue = False
    End With
    objMsgIcoRange.FormatConditions.add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""" & ActiveWorkbook.CustomDocumentProperties("LB_SUCCESS") & """"
    With objMsgIcoRange.FormatConditions(3)
    .Font.Bold = True
    .Font.Italic = False
    .Font.ColorIndex = 1
    .Font.TintAndShade = 0
    .Interior.PatternColorIndex = xlAutomatic
    .Interior.ColorIndex = 4
    .Interior.TintAndShade = 0
    .StopIfTrue = False
    End With
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "BneUploadBlock.clearContents", "Error: " & Err.Description
    End Sub
    
    

    General
    Stream Path:VBA/BneUploadColumn
    VBA File Name:BneUploadColumn
    Stream Size:3957
    Data ASCII:. . . . . . . . . . . . . . . ( . . . . . . . 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . 8 . 0 . . . . ( . P . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . < . . . . . . < . . . . . . < . . . .
    Data Raw:01 16 03 00 01 f0 00 00 00 12 08 00 00 d4 00 00 00 28 02 00 00 ff ff ff ff 1d 08 00 00 35 0c 00 00 00 00 00 00 01 00 00 00 ce c1 7f 93 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneUploadColumn"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colColumnRows As Collection
    Private m_strInterfaceColName As String 'INTERFACE_NAME.INTERFACE_COL_NAME
    Private Sub Class_Initialize()
    Set m_colColumnRows = New Collection
    End Sub
    Public Sub Class_Terminate()
    Set m_colColumnRows = Nothing
    End Sub
    Public Property Get ColumnRows() As Collection
    Set ColumnRows = m_colColumnRows
    End Property
    Public Property Get InterfaceColName() As String
    InterfaceColName = m_strInterfaceColName
    End Property
    Public Sub initUploadColumn(objColumnRng As Range, objLayoutColumn As BneLayoutColumn, colUploadableRows As Collection)
    m_strInterfaceColName = objLayoutColumn.InterfaceName & "." & objLayoutColumn.ColumnName
    populateRows objColumnRng, objLayoutColumn, colUploadableRows
    End Sub
    Private Sub populateRows(objColRange As Range, objLayoutColumn As BneLayoutColumn, colUploadableRows As Collection)
    Dim varColRow As Variant
    Dim objCellRng As Range
    Dim objUploadRow As BneUploadColumnRow
    On Error Resume Next
    If Not objColRange Is Nothing And Not colUploadableRows Is Nothing Then
    For Each varColRow In colUploadableRows
    Set objUploadRow = New BneUploadColumnRow
    Set objCellRng = objColRange(varColRow)
    objUploadRow.addRowValues objCellRng, objLayoutColumn, varColRow
    m_colColumnRows.add objUploadRow, "" & varColRow
    Next
    End If
    End Sub
    Public Sub addRow(ByVal objRow As BneUploadColumnRow, varIDX As Variant)
    objRow.rowIdx = varIDX
    m_colColumnRows.add objRow, "" & varIDX
    End Sub
    

    General
    Stream Path:VBA/BneUploadColumnRow
    VBA File Name:BneUploadColumnRow
    Stream Size:13411
    Data ASCII:. . . . . . . . . . . . . . . . . . 8 . . . F . . . ( . . . . . . . . . . 3 - . . . . . . . . . . . . . . . . . . . . . . . H . . M ] [ K * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . 8 . ^ L l L T P 5 m . p . . . . . . . . . . . . . . . . . . . . . . x . . . . 8 . ^ L l L T P 5 m . p H . . M ] [ K . . . . M E . . . . . . . . . . . . . . . . . . . . . P . 0 . . ( . . . 8 . @ . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . " . . . . . . < . . . . . . < . . . . . 0 . . . . . . " . .
    Data Raw:01 16 03 00 06 00 01 00 00 92 0e 00 00 e4 00 00 00 88 02 00 00 38 0f 00 00 46 0f 00 00 b2 28 00 00 0e 00 00 00 01 00 00 00 ce c1 33 2d 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 98 00 ff ff 00 00 94 d4 48 9b 05 07 c2 4d ac d9 e2 5d b8 5b a5 4b 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneUploadColumnRow"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colColumnRowVals As Collection
    Private m_varRow As Variant
    Private m_clsErrorRowMsgs As BneVBAMessages
    Private Sub Class_Initialize()
    Set m_colColumnRowVals = New Collection
    Set m_clsErrorRowMsgs = New BneVBAMessages
    End Sub
    Public Sub Class_Terminate()
    Set m_colColumnRowVals = Nothing
    Set m_clsErrorRowMsgs = Nothing
    End Sub
    Public Property Get isError() As Boolean
    isError = m_clsErrorRowMsgs.count > 0
    End Property
    Public Property Get ErrorMessages() As BneVBAMessages
    Set ErrorMessages = m_clsErrorRowMsgs
    End Property
    Public Property Get ColumnRowValues() As Collection
    Set ColumnRowValues = m_colColumnRowVals
    End Property
    Public Property Let rowIdx(varRowIdx As Variant)
    m_varRow = varRowIdx
    End Property
    Public Property Get rowIdx() As Variant
    rowIdx = m_varRow
    End Property
    Public Sub addValueToColumnRow(strName As String, varValue As Variant, strUserName As String)
    Dim clsMessage As New BneVBAMessage
    If VarType(varValue) = VarType(vbError) Then
    clsMessage.msgText = "UPL_ER_COLUMN_INVALID"
    clsMessage.msgType = "ERROR"
    clsMessage.msgCause = "UPL_ER_DOC_REF_ERR"
    clsMessage.msgSource = strUserName
    clsMessage.msgIdx = CLng(m_varRow)
    clsMessage.msgRange = strName
    m_clsErrorRowMsgs.addMessage clsMessage
    Else
    Dim rowColValue As New BneVBAParameter
    rowColValue.name = strName
    rowColValue.value = varValue
    m_colColumnRowVals.add rowColValue
    End If
    End Sub
    Public Sub addRowValues(objCellRange As Range, objLayoutColumn As BneLayoutColumn, Optional varIDX As Variant)
    If Not isEmpty(varIDX) Then
    m_varRow = varIDX
    End If
    addEditableValues objCellRange, objLayoutColumn
    End Sub
    Private Sub addEditableValues(objCellRange As Range, objLayoutColumn As BneLayoutColumn)
    Dim varColumnValue As Variant
    Dim strUplInterfaceColName As String
    Dim clsMessage As New BneVBAMessage
    strUplInterfaceColName = objLayoutColumn.InterfaceName & "." & objLayoutColumn.ColumnName
    If Not objCellRange Is Nothing Then
    Dim sDTValue As String
    Select Case objLayoutColumn.DataType
    Case 3
    On Error GoTo dateError
    Dim sValue As String
    sValue = objCellRange.value
    If (sValue = Null Or sValue = "") Then
    addValueToColumnRow strUplInterfaceColName, Nothing, objLayoutColumn.Prompt
    Else
    addValueToColumnRow strUplInterfaceColName, getDateValue(objCellRange), objLayoutColumn.Prompt
    End If
    Case 5
    On Error GoTo dateError
    sDTValue = objCellRange.value
    If (sDTValue = Null Or sDTValue = "") Then
    addValueToColumnRow strUplInterfaceColName, Nothing, objLayoutColumn.Prompt
    Else
    addValueToColumnRow strUplInterfaceColName, getDateTimeValue(objCellRange), objLayoutColumn.Prompt
    End If
    Case 6
    On Error GoTo dateError
    sDTValue = objCellRange.value
    If (sDTValue = Null Or sDTValue = "") Then
    addValueToColumnRow strUplInterfaceColName, Nothing, objLayoutColumn.Prompt
    Else
    addValueToColumnRow strUplInterfaceColName, getDateTimeValue(objCellRange), objLayoutColumn.Prompt
    End If
    Case 1
    varColumnValue = getNumericValue(objCellRange, objLayoutColumn)
    If VarType(varColumnValue) = VarType(vbError) Then
    varColumnValue = ""
    clsMessage.msgType = "ERROR"
    clsMessage.msgCause = "UPL_ER_INVALID_NUM_LINES"
    clsMessage.msgSource = objLayoutColumn.Prompt
    clsMessage.msgText = "UPL_ER_INVALID_NUMBER"
    clsMessage.msgIdx = CLng(m_varRow)
    clsMessage.msgRange = strUplInterfaceColName
    m_clsErrorRowMsgs.addMessage clsMessage
    Else
    addValueToColumnRow strUplInterfaceColName, varColumnValue, objLayoutColumn.Prompt
    End If
    Case 4
    Dim varNumValue As Variant
    addValueToColumnRow strUplInterfaceColName & "_DATE", getDateValue(objCellRange), objLayoutColumn.Prompt
    varNumValue = getNumericValue(objCellRange, objLayoutColumn)
    If VarType(varNumValue) = VarType(vbError) Then
    varNumValue = ""
    End If
    addValueToColumnRow strUplInterfaceColName & "_NUMBER", varNumValue, objLayoutColumn.Prompt
    addValueToColumnRow strUplInterfaceColName & "_VARCHAR2", getStringValue(objCellRange, objLayoutColumn), objLayoutColumn.Prompt
    Case Else
    addValueToColumnRow strUplInterfaceColName, getStringValue(objCellRange, objLayoutColumn), objLayoutColumn.Prompt
    End Select
    Else
    addValueToColumnRow strUplInterfaceColName, objLayoutColumn.DefaultValue, objLayoutColumn.Prompt
    End If
    Exit Sub
    dateError:
    clsMessage.msgType = "ERROR"
    clsMessage.msgCause = "UPL_ER_COLUMN_INVALID"
    clsMessage.msgSource = objLayoutColumn.Prompt
    clsMessage.msgText = "UPL_ER_COLUMN_INVALID"
    clsMessage.msgIdx = CLng(m_varRow)
    clsMessage.msgRange = strUplInterfaceColName
    m_clsErrorRowMsgs.addMessage clsMessage
    End Sub
    Private Function getDateValue(objCellRange As Range) As String
    On Error GoTo ErrBlk
    Dim theDate As Date
    theDate = objCellRange.value
    Dim sDate As String
    Dim sDateTB As String
    If Application.WorksheetFunction.isError(objCellRange.Cells) Then
    getDateValue = ""
    Exit Function
    End If
    sDate = objCellRange.value
    If (sDate = "") Then
    getDateValue = Format(objCellRange.value, "yyyy-MM-dd")
    Else
    If (theDate >= "1900-01-01" And theDate <= "1900-02-28") Then
    If (theDate = "1900-02-28") Then
    On Error GoTo dateError
    Err.Raise 32001
    On Error GoTo ErrBlk
    End If
    theDate = theDate + 1
    End If
    If (theDate = "1899-12-31") Then
    If Application.WorksheetFunction.IsText(objCellRange) Then
    theDate = "1899-12-31"
    Else
    theDate = "1900-01-01"
    End If
    End If
    getDateValue = Format(theDate, "yyyy-MM-dd")
    End If
    Exit Function
    ErrBlk:
    getDateValue = Format(objCellRange.value, "yyyy-MM-dd")
    Exit Function
    dateError:
    Err.Raise 32001
    End Function
    Private Function getDateTimeValue(objCellRange As Range) As String
    On Error GoTo ErrBlk
    Dim theDate As Date
    theDate = objCellRange.value
    Dim sDate As String
    Dim sDateWithoutTime As String
    Dim sDateTB As String
    Dim theDateWithoutTime As Date
    If Application.WorksheetFunction.isError(objCellRange.Cells) Then
    getDateTimeValue = ""
    Exit Function
    End If
    sDate = objCellRange.value
    If (sDate = "") Then
    getDateTimeValue = Format(objCellRange.value, "yyyy-MM-dd HH:mm:ss")
    Else
    sDateWithoutTime = Format(theDate, "yyyy-MM-dd")
    theDateWithoutTime = sDateWithoutTime
    If (theDateWithoutTime >= "1900-01-01" And theDateWithoutTime <= "1900-02-28") Then
    If (theDateWithoutTime = "1900-02-28") Then
    On Error GoTo dateError
    Err.Raise 32001
    On Error GoTo ErrBlk
    End If
    theDate = theDate + 1
    End If
    If (theDateWithoutTime = "1899-12-31") Then
    If Application.WorksheetFunction.IsText(objCellRange) Then
    theDate = theDate
    Else
    theDate = theDate + 1
    End If
    End If
    getDateTimeValue = Format(theDate, "yyyy-MM-dd HH:mm:ss")
    End If
    Exit Function
    ErrBlk:
    getDateTimeValue = Format(objCellRange.value, "yyyy-MM-dd HH:mm:ss")
    Exit Function
    dateError:
    Err.Raise 32001
    End Function
    Private Function getStringValue(objCellRange As Range, objLayoutColumn As BneLayoutColumn) As String
    Dim strNumberFormat As String
    Dim strCellPrefixCharacter As String
    On Error GoTo getString_Err
    strNumberFormat = objLayoutColumn.ColumnFormat
    strCellPrefixCharacter = objCellRange.PrefixCharacter
    If Application.WorksheetFunction.IsText(objCellRange.value) Or strNumberFormat = "" Or strNumberFormat = "@" Or Left(strNumberFormat, 1) = "#" Or strNumberFormat = "General" Or strCellPrefixCharacter = "'" Then
    getStringValue = objCellRange.value
    Else
    getStringValue = Format(objCellRange.value, strNumberFormat)
    End If
    Exit Function
    getString_Err:
    getStringValue = ""
    End Function
    Private Function getNumericValue(objCellRange As Range, objLayoutColumn As BneLayoutColumn) As Variant
    If Application.WorksheetFunction.isError(objCellRange.Cells) Then
    getNumericValue = ""
    Else
    If (objLayoutColumn.DefaultType <> "" And objLayoutColumn.DefaultType <> "JAVA") Or objLayoutColumn.ValType = "TABLE" Then
    getNumericValue = objCellRange.value
    ElseIf isEmpty(objCellRange) Or Len(Trim(objCellRange.value)) = 0 Then
    getNumericValue = objCellRange.value
    ElseIf Not (isEmpty(objCellRange)) And (IsNumericCell(objCellRange.value)) Then
    getNumericValue = NormalizeNumStr(objCellRange)
    Else
    getNumericValue = vbError
    End If
    End If
    End Function
    

    General
    Stream Path:VBA/BneUploadLayout
    VBA File Name:BneUploadLayout
    Stream Size:15400
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J 4 C H . Y . . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . J i . @ F q x & . . . . . . . . . . . . . . . . . . . . . . x . . . . J i . @ F q x & J 4 C H . Y . . . . . . M E . . . . . . . . . . . . . . . . . . . . . x . h . ( . 8 . H . P . ` . . X . . . 0 . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . " . . . . . " D . . . . . " . . . . . " P . . . . . . < 6 . . .
    Data Raw:01 16 03 00 06 00 01 00 00 ba 0f 00 00 e4 00 00 00 88 02 00 00 e9 10 00 00 f7 10 00 00 8f 2c 00 00 0a 00 00 00 01 00 00 00 ce c1 91 c5 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 90 00 ff ff 00 00 fe b4 c7 4a 34 e2 43 48 ab 18 ca 59 1f ac 04 c6 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneUploadLayout"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colUploadBlocks As Collection 'contains max 3 blocks with data from all workbooks&sheets
    Private m_colUplSheets As Collection
    Private m_objUplMessages As BneVBAMessages
    Private m_lineFeedFound  As Boolean
    Private Sub Class_Initialize()
    Set m_colUploadBlocks = New Collection
    Set m_colUplSheets = New Collection
    Set m_objUplMessages = New BneVBAMessages
    End Sub
    Private Sub Class_Terminate()
    Set m_colUploadBlocks = Nothing
    Set m_colUplSheets = Nothing
    Set m_objUplMessages = Nothing
    End Sub
    Private Sub addToUploadBlocks(ByVal objBlock As BneUploadBlock)
    Dim objNewUplBlock As New BneUploadBlock
    objNewUplBlock.Columns = objBlock.Columns
    objNewUplBlock.LayoutElement = objBlock.LayoutElement
    objNewUplBlock.BLOCKSIZE = objBlock.BLOCKSIZE
    objNewUplBlock.UploadableRows = objBlock.UploadableRows
    m_colUploadBlocks.add objNewUplBlock, objNewUplBlock.LayoutElement
    End Sub
    Public Function createUploadXML(objSheets As Collection, objLayout As BneLayout, objDocument As Object, Optional blnFlagRowsOnly As Boolean = False) As Long
    Dim objUplSheet As BneUploadSheet
    Dim objUploadBlock As BneUploadBlock
    Dim blnErrorInDoc As Boolean
    Dim objErrDocument As Object
    Dim objErrDocumentNode As Object
    Dim objErrMessageNode As Object
    Dim lngUploadRowCnt As Long
    Dim lngAllRowCnt As Long
    Dim objSheet As Worksheet
    For Each objSheet In objSheets
    If (objSheet.name <> "BneWorkBookProperties" And objSheet.name <> "BneLog") Then
    Set objUplSheet = New BneUploadSheet
    Dim colSheetBlocks As New Collection
    Set colSheetBlocks = objUplSheet.createUploadStructure(objSheet, objLayout, blnFlagRowsOnly)
    If colSheetBlocks.count > 0 Then
    m_colUplSheets.add objUplSheet, objSheet.CodeName
    Dim objSheetBlock As BneUploadBlock
    Dim objExistingBlock As BneUploadBlock
    For Each objSheetBlock In colSheetBlocks
    On Error Resume Next
    Set objExistingBlock = m_colUploadBlocks(objSheetBlock.LayoutElement)
    On Error GoTo 0
    If objExistingBlock Is Nothing Then
    If objSheetBlock.LayoutElement = "LINE" Then
    objUplSheet.LinesRowStart = 1
    lngAllRowCnt = objSheetBlock.BLOCKSIZE
    End If
    addToUploadBlocks objSheetBlock
    ElseIf Not objExistingBlock Is Nothing And objExistingBlock.LayoutElement = "LINE" Then
    objUplSheet.LinesRowStart = lngAllRowCnt + 1
    objExistingBlock.appendBlock objSheetBlock
    lngAllRowCnt = objExistingBlock.BLOCKSIZE
    End If
    Next
    End If
    End If
    Next
    BneTickleSession
    Set objLayout = Nothing
    Set objErrDocument = createDOMDocument()
    Set objErrDocumentNode = objErrDocument.appendChild(objDocument.createElement("bne:document"))
    objErrDocumentNode.setAttribute "xmlns:bne", "http://www.oracle.com/bne"
    Set objErrMessageNode = objErrDocumentNode.appendChild(objErrDocumentNode.OwnerDocument.createElement("bne:message"))
    objErrMessageNode.setAttribute "bne:type", "ERROR"
    objErrMessageNode.setAttribute "bne:text", "UPL_ER_NO_ROWS_UPLOADED"
    Dim objDocumentNode As Object
    Dim objWorkSpaceNode As Object
    Dim objLayoutNode As Object
    Dim objCollectionNode As Object
    Dim objDataNode As Object
    Set objDocumentNode = objDocument.appendChild(objDocument.createElement("bne:document"))
    objDocumentNode.setAttribute "xmlns:bne", "http://www.oracle.com/bne"
    objDocumentNode.setAttribute "bne:apiVersion", "1.1"
    Set objWorkSpaceNode = objDocumentNode.appendChild(objDocumentNode.OwnerDocument.createElement("bne:workspace"))
    Set objCollectionNode = objDocumentNode.appendChild(objDocumentNode.OwnerDocument.createElement("bne:collection"))
    objCollectionNode.setAttribute "id", "collection_1"
    Set objDataNode = objCollectionNode.appendChild(objCollectionNode.OwnerDocument.createElement("bne:data"))
    objDataNode.setAttribute "bne:id", "data_1"
    objDataNode.setAttribute "bne:integrator", "20068:XXPO_CPAUPL_XINTG"
    objDataNode.setAttribute "bne:date_format", "yyyy-MM-dd"
    objDataNode.setAttribute "bne:nls_numeric_characters", ".,"
    Set objLayoutNode = objWorkSpaceNode.appendChild(objWorkSpaceNode.OwnerDocument.createElement("bne:layout"))
    objLayoutNode.setAttribute "id", "20068:LKQCPAMASSUPLOADLAYOUT"
    Dim objPreviousBlock As Object
    Set objPreviousBlock = objDataNode
    For Each objUploadBlock In m_colUploadBlocks
    Dim objBlockNode As Object
    Dim objColumn As BneUploadColumn
    Set objLayoutNode = objLayoutNode.appendChild(objLayoutNode.OwnerDocument.createElement(LCase(objUploadBlock.LayoutElement)))
    If objUploadBlock.LayoutElement <> "LINE" Then
    Set objBlockNode = objPreviousBlock.appendChild(objPreviousBlock.OwnerDocument.createElement(LCase(objUploadBlock.LayoutElement)))
    For Each objColumn In objUploadBlock.Columns
    Dim objColumnRow As BneUploadColumnRow
    For Each objColumnRow In objColumn.ColumnRows
    If Not addAttributeColumnValue(objColumnRow, objBlockNode, objErrDocumentNode, False) Then
    blnErrorInDoc = True
    End If
    Next
    Next
    Else
    Dim objCell As BneUploadColumnRow
    Dim varRowId As Variant
    For Each varRowId In objUploadBlock.UploadableRows
    Set objBlockNode = objPreviousBlock.appendChild(objPreviousBlock.OwnerDocument.createElement(LCase(objUploadBlock.LayoutElement)))
    objBlockNode.setAttribute "bne:IDX", varRowId
    Dim colColumnsInRow As Collection
    Set colColumnsInRow = objUploadBlock.getRow(varRowId)
    For Each objCell In colColumnsInRow
    If Not addAttributeColumnValue(objCell, objBlockNode, objErrDocumentNode, True) Then
    blnErrorInDoc = True
    End If
    Next
    lngUploadRowCnt = lngUploadRowCnt + 1
    If (lngUploadRowCnt Mod 1000 = 0) Then
    BneTickleSession
    End If
    Next
    End If
    m_colUploadBlocks.Remove objUploadBlock.LayoutElement
    Set objPreviousBlock = objBlockNode
    BneTickleSession
    Next
    If blnErrorInDoc Then
    Set objDocument = objErrDocument
    createUploadXML = -1
    Else
    createUploadXML = lngUploadRowCnt
    End If
    BneTickleSession
    End Function
    Private Function addAttributeColumnValue(objUplColRow As BneUploadColumnRow, objBlockNode As Object, objErrDocumentNode As Object, blnInLines As Boolean) As Boolean
    Dim blnOK As Boolean
    blnOK = True
    If objUplColRow.isError Then
    blnOK = False
    Dim objMessage As BneVBAMessage
    For Each objMessage In objUplColRow.ErrorMessages.Messages
    Dim objErrMessageNode As Object
    If blnInLines Then
    objMessage.msgIdx = objUplColRow.rowIdx
    Else
    objMessage.msgIdx = 0
    End If
    Set objErrMessageNode = objMessage.getMessageXMLNode(objErrDocumentNode)
    Next
    Else
    Dim colCellValues As Collection
    Set colCellValues = objUplColRow.ColumnRowValues
    Dim objNameValue As BneVBAParameter
    For Each objNameValue In colCellValues
    If blnInLines And (InStr(objNameValue.value, Chr(10)) > 0) Then
    IsLineFeedFound = True
    objBlockNode.setAttribute objNameValue.name, Replace(objNameValue.value, Chr(10), "&#10;")
    Else
    objBlockNode.setAttribute objNameValue.name, objNameValue.value
    End If
    Next
    End If
    addAttributeColumnValue = blnOK
    End Function
    Public Sub processMessages(objReturnDoc As Object, Optional blnUploadCancelled As Boolean = False)
    Dim objMessage As BneVBAMessage
    Dim objReturnMessages As BneVBAMessages
    Dim objMessageList, objMessageNode As Object
    Dim objUplSheet As BneUploadSheet
    Dim blnUploadFailed As Boolean
    Dim blnUploadWarning As Boolean
    Set objMessageList = objReturnDoc.DocumentElement.SelectNodes("/bne:document/bne:message")
    For Each objUplSheet In m_colUplSheets
    objUplSheet.unProtectSheet
    objUplSheet.clearContents
    Next
    For Each objMessageNode In objMessageList
    Set objMessage = New BneVBAMessage
    objMessage.createMessage objMessageNode
    
    If objMessage.msgType = "ERROR" And (bneMain.g_commitEachRow = False Or objMessage.msgElement = "header") Then
    blnUploadFailed = True
    ElseIf objMessage.msgType = "WARNING" And objMessage.msgIdx > 0 Then
    blnUploadWarning = True
    End If
    processMessage objMessage
    Next
    If Not blnUploadCancelled And Not blnUploadFailed Then
    For Each objUplSheet In m_colUplSheets
    objUplSheet.processUploadSuccess blnUploadWarning
    Next
    End If
    If m_colUplSheets.count > 1 Then
    Dim objSummarySheet As New BneSummarySheet
    objSummarySheet.Clear
    objSummarySheet.AddMessages Nothing, m_objUplMessages
    For Each objUplSheet In m_colUplSheets
    objSummarySheet.AddMessages objUplSheet.Sheet, objUplSheet.UploadMessages
    Next
    End If
    For Each objUplSheet In m_colUplSheets
    Dim isNowUnProtected As Boolean
    isNowUnProtected = Not objUplSheet.Sheet.ProtectContents
    objUplSheet.protectOrUnprotect isNowUnProtected
    Next
    End Sub
    Private Sub processMessage(objMessage As BneVBAMessage)
    Dim lngIdx As Long
    Dim strColumnRngName As String
    Dim objUplSheet As BneUploadSheet
    If objMessage.msgIdx = 0 And objMessage.msgType = "ERROR" Then
    On Error Resume Next
    Set objUplSheet = m_colUplSheets.Item(1)
    On Error GoTo 0
    If Not objUplSheet Is Nothing Then
    objUplSheet.processMessage objMessage
    End If
    ElseIf objMessage.msgIdx > 0 Then
    Set objUplSheet = findSheetForLine(objMessage.msgIdx)
    If Not objUplSheet Is Nothing Then
    objUplSheet.processMessage objMessage
    End If
    Else
    m_objUplMessages.addMessage objMessage
    End If
    End Sub
    Private Function findSheetForLine(lngIdx As Long) As BneUploadSheet
    Dim objUplSheet As BneUploadSheet
    For Each objUplSheet In m_colUplSheets
    If objUplSheet.LinesRowStart <= lngIdx And lngIdx <= objUplSheet.LinesRowEnd Then
    Set findSheetForLine = objUplSheet
    Exit For
    End If
    Next
    Set findSheetForLine = objUplSheet
    End Function
    Public Property Let IsLineFeedFound(ByVal lineFeedFound As Boolean)
    m_lineFeedFound = lineFeedFound
    End Property
    
    Public Property Get IsLineFeedFound() As Boolean
    IsLineFeedFound = m_lineFeedFound
    End Property
    

    General
    Stream Path:VBA/BneUploadSheet
    VBA File Name:BneUploadSheet
    Stream Size:10219
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . W . t i + @ w . Z 2 * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . j . A t d E 9 k A . . . . . . . . . . . . . . . . . . . . . . x . . . . j . A t d E 9 k A W . t i + @ w . Z 2 . . . . M E . . . . . . . . . . . . . . . . . . . . . h . . 0 . H . ( . P . . . 8 . X . @ . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . 0 6 . . . . . " . . . . . " D . . . . . " . . . . .
    Data Raw:01 16 03 00 06 00 01 00 00 ba 10 00 00 e4 00 00 00 88 02 00 00 d5 11 00 00 e3 11 00 00 13 20 00 00 12 00 00 00 01 00 00 00 ce c1 74 d2 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff a8 00 ff ff 00 00 98 57 13 74 69 2b ce 40 b6 77 f1 b3 81 a7 5a 32 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneUploadSheet"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colSheetBlocks As Collection
    Private m_objSheet As Worksheet
    Private m_lngIdxStart As Long
    Private m_objUplMessages As BneVBAMessages
    Private m_uploadFailed As Boolean
    Private m_objLinesBlock As BneUploadBlock
    Private m_blnSheetProtected As Boolean
    Private Sub Class_Initialize()
    Set m_colSheetBlocks = New Collection
    Set m_objUplMessages = New BneVBAMessages
    m_lngIdxStart = 1
    m_uploadFailed = False
    End Sub
    Private Sub Class_Terminate()
    Set m_colSheetBlocks = Nothing
    Set m_objUplMessages = Nothing
    Set m_objSheet = Nothing
    Set m_objLinesBlock = Nothing
    m_lngIdxStart = 1
    End Sub
    Public Property Get UploadFailed() As Boolean
    UploadFailed = m_uploadFailed
    End Property
    Public Property Get LinesRowStart() As Long
    LinesRowStart = m_lngIdxStart
    End Property
    Public Property Let LinesRowStart(lngIdxStart As Long)
    m_lngIdxStart = lngIdxStart
    End Property
    Public Property Get Sheet() As Worksheet
    Set Sheet = m_objSheet
    End Property
    Public Property Let Sheet(objSheet As Worksheet)
    Set m_objSheet = objSheet
    m_blnSheetProtected = objSheet.ProtectContents
    End Property
    Public Property Get UploadMessages() As BneVBAMessages
    Set UploadMessages = m_objUplMessages
    End Property
    Public Property Get LinesRowEnd() As Long
    Dim objLinesBlock As BneUploadBlock
    LinesRowEnd = LinesRowStart
    Set objLinesBlock = Me.LinesBlock
    If Not objLinesBlock Is Nothing Then
    LinesRowEnd = (m_lngIdxStart + objLinesBlock.BLOCKSIZE) - 1
    End If
    End Property
    Public Property Get LinesBlock() As BneUploadBlock
    If m_objLinesBlock Is Nothing Then
    Dim objLinesBlock As BneUploadBlock
    On Error Resume Next
    Set m_objLinesBlock = m_colSheetBlocks("LINE")
    On Error GoTo 0
    End If
    Set LinesBlock = m_objLinesBlock
    End Property
    Public Function createUploadStructure(objSheet As Worksheet, objLayout As BneLayout, Optional blnFlagRowsOnly As Boolean = False) As Collection
    Dim objLayoutBlock As BneLayoutBlock
    Dim objUploadBlock As BneUploadBlock
    Dim objUplColumn As BneUploadColumn
    Me.Sheet = objSheet
    For Each objLayoutBlock In objLayout.getLayoutBlocks
    If objLayoutBlock.CountColumns > 0 Then
    Set objUploadBlock = getUploadBlock(objSheet, objLayoutBlock, blnFlagRowsOnly)
    objUploadBlock.addColumns objSheet, objLayoutBlock
    End If
    Next
    Set createUploadStructure = m_colSheetBlocks
    End Function
    Private Function getUploadBlock(objSheet As Worksheet, objLayoutBlock As BneLayoutBlock, blnFlagRowsOnly As Boolean) As BneUploadBlock
    Dim objUplBlock As BneUploadBlock
    On Error Resume Next
    Set objUplBlock = m_colSheetBlocks(objLayoutBlock.LayoutElement)
    On Error GoTo 0
    If objUplBlock Is Nothing Then
    Set objUplBlock = New BneUploadBlock
    objUplBlock.LayoutElement = objLayoutBlock.LayoutElement
    objUplBlock.setUploadableRows objSheet, objLayoutBlock, blnFlagRowsOnly
    m_colSheetBlocks.add objUplBlock, objUplBlock.LayoutElement
    End If
    Set getUploadBlock = objUplBlock
    End Function
    Public Function findUploadBlock(strLayoutElement) As BneUploadBlock
    Dim objUplBlock As BneUploadBlock
    On Error Resume Next
    Set objUplBlock = m_colSheetBlocks(strLayoutElement)
    On Error GoTo 0
    Set findUploadBlock = objUplBlock
    End Function
    Public Sub processMessage(objMessage As BneVBAMessage)
    m_objUplMessages.addMessage objMessage
    If Not objMessage.msgIdx = 0 Then
    Dim objLinesBlock As BneUploadBlock
    Set objLinesBlock = Me.LinesBlock
    If Not objLinesBlock Is Nothing Then
    Dim lngSheetIdx As Long
    lngSheetIdx = (objMessage.msgIdx - m_lngIdxStart) + 1
    objMessage.msgIdx = lngSheetIdx
    objLinesBlock.processMessage Me.Sheet, objMessage, lngSheetIdx
    End If
    On Error Resume Next
    AddComment m_objSheet.Names(objMessage.msgRange).RefersToRange(lngSheetIdx), objMessage.msgText, objMessage.msgCause
    On Error GoTo 0
    ElseIf objMessage.msgIdx = 0 And Not isEmpty(objMessage.msgRange) And Not "" = objMessage.msgRange Then
    On Error Resume Next
    AddComment m_objSheet.Names(objMessage.msgRange).RefersToRange, objMessage.msgText, objMessage.msgCause
    On Error GoTo 0
    End If
    End Sub
    Public Sub processUploadSuccess(blnHasWarnings As Boolean)
    Dim objLinesBlock As BneUploadBlock
    Set objLinesBlock = Me.LinesBlock
    If Not objLinesBlock Is Nothing Then
    objLinesBlock.processUploadSuccess m_objSheet, blnHasWarnings
    End If
    End Sub
    Public Sub clearContents()
    Dim objLinesBlock As BneUploadBlock
    DeleteComments m_objSheet
    Set objLinesBlock = Me.LinesBlock
    If Not objLinesBlock Is Nothing Then
    objLinesBlock.clearContents m_objSheet
    End If
    End Sub
    Public Sub protectOrUnprotect(isNowUnProtected As Boolean)
    If m_blnSheetProtected Then
    If isNowUnProtected Then
    m_objSheet.Protect
    End If
    Else
    If Not isNowUnProtected Then
    m_objSheet.Unprotect
    End If
    End If
    End Sub
    Public Sub unProtectSheet()
    Dim objMsgRange As Range
    Set objMsgRange = Me.Sheet.Names("BNE_MESSAGES").RefersToRange
    If objMsgRange.Locked Then
    Me.Sheet.Unprotect
    End If
    End Sub
    

    General
    Stream Path:VBA/BneVBAInterfaceCol
    VBA File Name:BneVBAInterfaceCol
    Stream Size:9822
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . . ! . . " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . } . 9 q ~ A . . d . . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . Q * J P C , b : . U . . . . . . . . . . . . . . . . . . . . . . x . . . . Q * J P C , b : . U } . 9 q ~ A . . d . . . . . . M E . . . . . . . . . . . . . . . . . . . . . ( . . . . . S . . . . . S . . . . . S . . . . 6 " . . . . . . . . . . N . 0 . { . F . C . F . B . 3 . D . 2 . A . - . A . 0 . F . A . - . 1
    Data Raw:01 16 03 00 06 00 01 00 00 aa 17 00 00 e4 00 00 00 10 02 00 00 d8 17 00 00 e6 17 00 00 ce 21 00 00 22 00 00 00 01 00 00 00 ce c1 e4 eb 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 00 01 ff ff 00 00 7d 13 d6 39 71 7e ed 41 86 d9 ca 96 07 64 03 1b 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAInterfaceCol"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private lRowCount As Long
    Private m_lApplicationId As Long
    Private m_sInterfaceCode As String
    Private m_lSequenceNumber As Long
    Private m_sInterfaceName As String
    Private m_sColumnName As String
    Private m_iDataType As Integer
    Private m_bReadOnly As Boolean
    Private m_sEditType As String
    Private m_sValType As String
    Private m_sValComponent As String
    Private m_bPopListLOV As Boolean
    Private m_sPromptLeft As String
    Private m_sPromptAbove As String
    Private m_sDefaultValue As Variant
    Private m_sDynamicCol As String
    Private m_bHintDisplayed As Boolean
    Private m_sOrientation As String
    Public Property Let ApplicationId(appId As Long)
    m_lApplicationId = appId
    End Property
    Public Property Get ApplicationId() As Long
    ApplicationId = m_lApplicationId
    End Property
    Public Property Let InterfaceCode(ifaceCode As String)
    m_sInterfaceCode = ifaceCode
    End Property
    Public Property Get InterfaceCode() As String
    InterfaceCode = m_sInterfaceCode
    End Property
    Public Property Let SequenceNumber(seqNum As Long)
    m_lSequenceNumber = seqNum
    End Property
    Public Property Get SequenceNumber() As Long
    SequenceNumber = m_lSequenceNumber
    End Property
    Public Property Let InterfaceName(name As String)
    m_sInterfaceName = name
    End Property
    Public Property Get InterfaceName() As String
    InterfaceName = m_sInterfaceName
    End Property
    Public Property Let ColumnName(name As String)
    m_sColumnName = name
    End Property
    Public Property Get ColumnName() As String
    ColumnName = m_sColumnName
    End Property
    Public Property Let DataType(typeID As Integer)
    m_iDataType = typeID
    End Property
    Public Property Get DataType() As Integer
    DataType = m_iDataType
    End Property
    Public Property Let ReadOnly(ReadOnly As Boolean)
    m_bReadOnly = ReadOnly
    End Property
    Public Property Get ReadOnly() As Boolean
    ReadOnly = m_bReadOnly
    End Property
    Public Property Let EditType(EditType As String)
    m_sEditType = EditType
    End Property
    Public Property Get EditType() As String
    EditType = m_sEditType
    End Property
    Public Property Let ValType(ValType As String)
    m_sValType = ValType
    End Property
    Public Property Get ValType() As String
    ValType = m_sValType
    End Property
    Public Property Let ValComponent(ValComponent As String)
    m_sValComponent = ValComponent
    End Property
    Public Property Get ValComponent() As String
    ValComponent = m_sValComponent
    End Property
    Public Property Let PopListLOV(PopListLOV As Boolean)
    m_bPopListLOV = PopListLOV
    End Property
    Public Property Get PopListLOV() As Boolean
    PopListLOV = m_bPopListLOV
    End Property
    Public Property Let PromptAbove(PromptAbove As String)
    m_sPromptAbove = PromptAbove
    End Property
    Public Property Get PromptAbove() As String
    PromptAbove = m_sPromptAbove
    End Property
    Public Property Let PromptLeft(PromptLeft As String)
    m_sPromptLeft = PromptLeft
    End Property
    Public Property Get PromptLeft() As String
    PromptLeft = m_sPromptLeft
    End Property
    Public Property Let DefaultValue(DefaultValue As Variant)
    m_sDefaultValue = DefaultValue
    End Property
    Public Property Get DefaultValue() As Variant
    DefaultValue = m_sDefaultValue
    End Property
    Public Property Let DynamicDataType(DynamicDataType As Boolean)
    m_sDynamicCol = DynamicDataType
    End Property
    Public Property Get DynamicDataType() As Boolean
    DynamicDataType = m_sDynamicCol
    End Property
    Public Property Let HintDisplayed(HintDisplayed As Boolean)
    m_bHintDisplayed = HintDisplayed
    End Property
    Public Property Get HintDisplayed() As Boolean
    HintDisplayed = m_bHintDisplayed
    End Property
    Public Property Let Orientation(Orientation As String)
    m_sOrientation = Orientation
    End Property
    Public Property Get Orientation() As String
    Orientation = m_sOrientation
    End Property
    

    General
    Stream Path:VBA/BneVBAMessage
    VBA File Name:BneVBAMessage
    Stream Size:10242
    Data ASCII:. . . . . . . . . B . . . . . . . . . . p . . . ~ . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . 1 K ' . G E . * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . . . | I c b 2 U . . . . . . . . . . . . . . . . . . . . . . x . . . . . . | I c b 2 U 1 K ' . G E . . . . . M E . . . . . . . . . . . . . . . . . . . . . ( . . . . . S . . . . . S . . . . . S . . . . 6 " . . . . . . . . . . N . 0 . { . F . C . F . B . 3 . D . 2 . A . - . A . 0 . F . A . - . 1 . 0 . 6 . 8 . - .
    Data Raw:01 16 03 00 06 00 01 00 00 42 11 00 00 e4 00 00 00 10 02 00 00 70 11 00 00 7e 11 00 00 da 20 00 00 18 00 00 00 01 00 00 00 ce c1 ce 33 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff b8 00 ff ff 00 00 b0 b2 31 4b 27 e6 01 47 93 d3 45 f0 18 8c ba dd 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAMessage"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Private m_strType   As String
    Private m_strText   As String
    Private m_strSource As String
    Private m_strCause  As String
    Private m_strAction As String
    Private m_intLevel  As Integer
    Private m_strRange  As String
    Private m_lngIdx    As Long
    Private m_strElement  As String
    Public Property Let msgType(strType As String)
    On Error Resume Next
    m_strType = strType
    End Property
    Public Property Let msgText(strText As String)
    On Error Resume Next
    m_strText = strText
    End Property
    Public Property Let msgSource(strSource As String)
    On Error Resume Next
    m_strSource = strSource
    End Property
    Public Property Let msgCause(strCause As String)
    On Error Resume Next
    m_strCause = strCause
    End Property
    Public Property Let msgAction(strAction As String)
    On Error Resume Next
    m_strAction = strAction
    End Property
    Public Property Let msgLevel(intlevel As Integer)
    On Error Resume Next
    m_intLevel = intlevel
    End Property
    Public Property Let msgIdx(lngIdx As Long)
    On Error Resume Next
    m_lngIdx = lngIdx
    End Property
    Public Property Let msgRange(strRange As String)
    On Error Resume Next
    m_strRange = strRange
    End Property
    Public Property Let msgElement(strElement As String)
    On Error Resume Next
    m_strElement = strElement
    End Property
    Public Property Get msgType() As String
    msgType = m_strType
    End Property
    Public Property Get msgText() As String
    msgText = m_strText
    End Property
    Public Property Get msgSource() As String
    msgSource = m_strSource
    End Property
    Public Property Get msgCause() As String
    msgCause = m_strCause
    End Property
    Public Property Get msgAction() As String
    msgAction = m_strAction
    End Property
    Public Property Get msgLevel() As Integer
    msgLevel = m_intLevel
    End Property
    Public Property Get msgIdx() As Long
    msgIdx = m_lngIdx
    End Property
    Public Property Get msgRange() As String
    msgRange = m_strRange
    End Property
    Public Property Get msgElement() As String
    msgElement = m_strElement
    End Property
    Public Property Get msgTypeUserName() As String
    Dim strUserName As String
    Select Case Me.msgType
    Case "ERROR"
    strUserName = "Error"
    Case "WARNING"
    strUserName = "Warning"
    Case "STATUS"
    strUserName = "Status"
    Case "DATA"
    strUserName = "Data"
    Case "TRACE"
    strUserName = "Trace"
    End Select
    msgTypeUserName = strUserName
    End Property
    Public Property Get xml() As String
    xml = "<bne:message xmlns:bne=""http://www.oracle.com/bne""" & " bne:type=""" & BneEscapeXML(Me.msgType) & """" & " bne:text=""" & BneEscapeXML(Me.msgText) & """" & " bne:cause=""" & BneEscapeXML(Me.msgCause) & """" & " bne:source=""" & BneEscapeXML(Me.msgSource) & """" & " bne:action=""" & BneEscapeXML(Me.msgAction) & """" & "/>"
    End Property
    Public Function getMessageXMLNode(objParentNode As Object) As Object
    Dim objMessageNode As Object
    Dim objContextNode As Object
    Set objMessageNode = objParentNode.appendChild(objParentNode.OwnerDocument.createElement("bne:message"))
    objMessageNode.setAttribute "bne:type", Me.msgType
    objMessageNode.setAttribute "bne:text", Me.msgText
    objMessageNode.setAttribute "bne:cause", Me.msgCause
    objMessageNode.setAttribute "bne:action", Me.msgAction
    objMessageNode.setAttribute "bne:source", Me.msgSource
    If Me.msgIdx > 0 Then
    Set objContextNode = objMessageNode.appendChild(objMessageNode.OwnerDocument.createElement("bne:context"))
    objContextNode.setAttribute "bne:idx", Me.msgIdx
    objContextNode.setAttribute "bne:attribute", Me.msgRange
    objContextNode.setAttribute "bne:element", Me.msgElement
    End If
    Set getMessageXMLNode = objMessageNode
    End Function
    Public Sub createMessage(ByVal objMessageXMLNode As Object)
    Dim objContextNode As Object
    On Error Resume Next
    Me.msgText = objMessageXMLNode.Attributes.getNamedItem("bne:text").text
    Me.msgType = objMessageXMLNode.Attributes.getNamedItem("bne:type").text
    Me.msgCause = objMessageXMLNode.Attributes.getNamedItem("bne:cause").text
    Me.msgAction = objMessageXMLNode.Attributes.getNamedItem("bne:action").text
    Me.msgSource = objMessageXMLNode.Attributes.getNamedItem("bne:source").text
    Set objContextNode = objMessageXMLNode.SelectSingleNode("bne:context")
    If Not objContextNode Is Nothing Then
    Me.msgIdx = CLng(objContextNode.Attributes.getNamedItem("bne:idx").text)
    Me.msgRange = Replace(objContextNode.Attributes.getNamedItem("bne:attribute").text, ".", "_")
    Me.msgElement = objContextNode.Attributes.getNamedItem("bne:element").text
    End If
    End Sub
    Public Function toString() As String
    toString = "bne:type=" & Me.msgType & " bne:text=" & Me.msgText & " bne:cause=" & Me.msgCause & " bne:source=" & Me.msgSource & " bne:action=" & Me.msgAction
    End Function
    Private Sub Class_Initialize()
    m_intLevel = BNE_TRACE
    End Sub
    
    

    General
    Stream Path:VBA/BneVBAMessages
    VBA File Name:BneVBAMessages
    Stream Size:3928
    Data ASCII:. . . . . . . . . . . . . . . 8 . . . . . . . . . . . x . . . . . . . . . . . h A . . . . . . . . . . . . . . . . . . . . x . . . . ; Y I S . E w ^ 5 * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . E . O a c h F 7 F . % . y . . . . . . . . . . . . . . . . . . . . . . x . . . . E . O a c h F 7 F . % . y . ; Y I S . E w ^ 5 . . . . M E . . . . . . . . . . . . . . . . . . . . . 0 . . . . P . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . " . . . . . 6 " . . . . . < 8 . . . . . . < . . . .
    Data Raw:01 16 03 00 06 00 01 00 00 9a 07 00 00 e4 00 00 00 38 02 00 00 02 08 00 00 10 08 00 00 78 0c 00 00 08 00 00 00 01 00 00 00 ce c1 68 41 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 78 00 ff ff 00 00 17 b7 f3 ce e6 3b 59 49 bd 53 08 45 77 5e b2 35 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAMessages"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Private m_clsMessages As Collection
    Private Sub Class_Initialize()
    Set m_clsMessages = New Collection
    End Sub
    Private Sub Class_Terminate()
    Set m_clsMessages = Nothing
    End Sub
    Public Sub addMessage(objMessage As BneVBAMessage)
    On Error Resume Next
    m_clsMessages.add objMessage
    End Sub
    Public Sub clearMessages()
    On Error GoTo ErrorHandler
    Do While m_clsMessages.count > 0
    m_clsMessages.Remove (1)
    Loop
    ErrorHandler:
    End Sub
    Public Property Get Messages() As Collection
    Set Messages = m_clsMessages
    End Sub
    Public Property Get message(intIndex As Integer) As BneVBAMessage
    On Error Resume Next
    Set message = m_clsMessages(intIndex)
    End Property
    Public Property Get count() As Integer
    On Error Resume Next
    count = m_clsMessages.count
    End Property
    Public Property Get xml() As String
    Dim strXML As String
    Dim intCnt As Integer
    If Me.count > 0 Then
    strXML = "<bne:messages xmlns:bne=""http://www.oracle.com/bne"">"
    For intCnt = 1 To Me.count
    strXML = strXML & Me.message(intCnt).xml()
    Next intCnt
    strXML = strXML & "</bne:messages>"
    End If
    xml = strXML
    End Property
    

    General
    Stream Path:VBA/BneVBAParameter
    VBA File Name:BneVBAParameter
    Stream Size:2186
    Data ASCII:. . . . . . . . B . . . . . . . . . . I . . . . . . . . . . . . . . . ! ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . F . C . F . B . 3 . D . 2 . A .
    Data Raw:01 16 03 00 01 f0 00 00 00 42 05 00 00 d4 00 00 00 00 02 00 00 ff ff ff ff 49 05 00 00 11 07 00 00 00 00 00 00 01 00 00 00 ce c1 21 21 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAParameter"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private msName As String
    Private mvValue As Variant
    Public Property Let name(sName As String)
    On Error Resume Next
    msName = sName
    End Property
    Public Property Let value(vValue As Variant)
    On Error Resume Next
    mvValue = vValue
    End Property
    Public Property Get name() As String
    name = msName
    End Property
    Public Property Get value() As Variant
    value = mvValue
    End Property
    

    General
    Stream Path:VBA/BneVBAParameters
    VBA File Name:BneVBAParameters
    Stream Size:3541
    Data ASCII:. . . . . . . . . . . . . . . 8 . . . . . . . * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . - 3 * O P O e y 7 { * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . m k : C . 0 N . . . . . . . . . . . . . . . . . . . . . . x . . . . m k : C . 0 N - 3 * O P O e y 7 { . . . . M E . . . . . . . . . . . . . . . . . . . . . 0 . . . . P . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . . < . . . . . 6 " . . . . . < 8 . . . . . . < . . . . . . . . . . N . 0 . { .
    Data Raw:01 16 03 00 06 00 01 00 00 da 06 00 00 e4 00 00 00 38 02 00 00 1c 07 00 00 2a 07 00 00 2e 0b 00 00 06 00 00 00 01 00 00 00 ce c1 b5 01 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 78 00 ff ff 00 00 2d a5 33 2a 4f b0 50 4f a1 a0 65 79 f0 ed 37 7b 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAParameters"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private mcParameters As Collection
    Private Sub Class_Initialize()
    Set mcParameters = New Collection
    End Sub
    Private Sub Class_Terminate()
    Set mcParameters = Nothing
    End Sub
    Public Property Get Item(vIndex As Variant)
    On Error Resume Next
    Set Item = mcParameters.Item(vIndex)
    End Property
    Public Property Get count()
    On Error Resume Next
    count = mcParameters.count
    End Property
    Public Sub add(sName As String, vValue As Variant)
    Dim oParam As New BneVBAParameter
    On Error Resume Next
    oParam.name = sName
    oParam.value = vValue
    mcParameters.add oParam, sName
    If Err <> 0 Then
    mcParameters.Remove sName
    mcParameters.add oParam, sName
    End If
    End Sub
    Public Function toString() As String
    Dim iParamCnt As Integer
    Dim sString As String
    For iParamCnt = 1 To mcParameters.count
    If iParamCnt > 1 Then sString = sString & "&"
    sString = sString & mcParameters.Item(iParamCnt).name & "=" & mcParameters.Item(iParamCnt).value
    Next iParamCnt
    toString = sString
    End Function
    

    General
    Stream Path:VBA/BneVBAProperties
    VBA File Name:BneVBAProperties
    Stream Size:12486
    Data ASCII:. . . . . . . . . B . . . . . . ( . . . . . . . . . ( . . . . . . . . . . } . . . . . . . . . . . . . . . . . . . . . . . t f = : L * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . g N ' A M v . j . . . . . . . . . . . . . . . . . . . . . . x . . . . g N ' A M v . j t f = : L . . . . M E . . . . . . . . . . . . . . . . . . . . . 8 . . . ( . . @ . . . . . S . . . . . S . . . . . S . . . . 0 6 . . . . . 8 . . . . . " . . . . . > " . . . . . < . . . . . . L . . . . . . . . . . . . . . . . . L . .
    Data Raw:01 16 03 00 06 00 01 00 00 42 18 00 00 e4 00 00 00 28 03 00 00 9d 19 00 00 ab 19 00 00 f3 28 00 00 05 00 00 00 01 00 00 00 ce c1 96 7d 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 88 00 ff ff 00 00 74 66 cb e7 3d 3a a8 4c 83 bd 9e 82 84 e3 a4 df 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAProperties"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Const WORKBOOK_PROPERTY_SHEET = "BneWorkBookProperties"
    Private m_objSheet As Worksheet
    Private m_colProperties As Collection
    Private m_objDOM As Object
    Private Sub Class_Initialize()
    Set m_objDOM = createDOMDocument
    Set m_colProperties = New Collection
    Set m_objSheet = getWorkBookPropertySheet()
    loadXML
    End Sub
    Private Sub Class_Terminate()
    Set m_objDOM = Nothing
    Set m_colProperties = Nothing
    Set m_objSheet = Nothing
    End Sub
    Public Sub setSheet(objWorkSheet As Worksheet)
    Set m_objSheet = objWorkSheet
    If m_objSheet Is Nothing Then
    Set m_objSheet = getWorkBookPropertySheet()
    End If
    loadXML
    End Sub
    Public Sub addProperty(objProperty As BneVBAProperty)
    On Error Resume Next
    objProperty.Controller = Me
    m_colProperties.Remove objProperty.name
    m_colProperties.add objProperty, objProperty.name
    On Error GoTo 0
    saveXML
    End Sub
    Public Sub removeProperty(strPropertyName As String)
    On Error Resume Next
    m_colProperties.Remove strPropertyName
    On Error GoTo 0
    saveXML
    End Sub
    Public Function getProperty(strPropertyName As String) As BneVBAProperty
    On Error Resume Next
    Set getProperty = m_colProperties(strPropertyName)
    End Function
    Public Function hasProperties() As Boolean
    hasProperties = m_colProperties.count > 0
    End Function
    Private Sub loadXML()
    Dim intColIndex As Integer
    Dim strCellData As String
    Dim strXML As String
    intColIndex = 1
    strCellData = m_objSheet.Cells(1, intColIndex).value
    Do Until Len(strCellData) = 0
    strXML = strXML & strCellData
    intColIndex = intColIndex + 1
    strCellData = m_objSheet.Cells(1, intColIndex).value
    Loop
    m_objDOM.loadXML strXML
    parseXMLToObjects
    End Sub
    Private Sub parseXMLToObjects()
    Dim objProperty As BneVBAProperty
    Dim objNodes As Object
    Dim lngCnt As Long
    Set m_colProperties = New Collection
    If Not m_objDOM.DocumentElement Is Nothing Then
    Set objNodes = m_objDOM.DocumentElement.SelectNodes("item")
    If Not objNodes Is Nothing Then
    For lngCnt = 0 To objNodes.Length - 1
    Set objProperty = New BneVBAProperty
    objProperty.name = BneGetNodeText(objNodes(lngCnt), "name")
    objProperty.value = ParseXMLItemToObjects(objNodes(lngCnt))
    m_colProperties.add objProperty, objProperty.name
    Next
    End If
    End If
    End Sub
    Private Function ParseXMLItemToObjects(objItemNode As Object)
    Dim objProperty As BneVBAProperty
    Dim colProperties As Collection
    Dim objNode As Object
    Dim objNodes As Object
    Dim lngCnt As Long
    Set objNode = objItemNode.SelectSingleNode("value")
    If Not objNode Is Nothing Then
    Set objNodes = objNode.SelectNodes("item")
    If objNodes.Length > 0 Then
    Set colProperties = New Collection
    For lngCnt = 0 To objNodes.Length - 1
    Set objProperty = New BneVBAProperty
    objProperty.name = BneGetNodeText(objNodes(lngCnt), "name")
    objProperty.value = ParseXMLItemToObjects(objNodes(lngCnt))
    colProperties.add objProperty, objProperty.name
    Next
    Else
    ParseXMLItemToObjects = objNode.nodeTypedValue
    Exit Function
    End If
    Set ParseXMLItemToObjects = colProperties
    End If
    End Function
    Private Function getWorkBookPropertySheet() As Worksheet
    Dim objSheet As Worksheet
    On Error Resume Next
    Set objSheet = Worksheets(WORKBOOK_PROPERTY_SHEET)
    If objSheet Is Nothing Then
    Set objSheet = Worksheets.add
    objSheet.name = WORKBOOK_PROPERTY_SHEET
    objSheet.Visible = xlSheetVeryHidden
    End If
    Set getWorkBookPropertySheet = objSheet
    End Function
    Public Sub saveXML()
    Dim strXML As String
    Dim lngStartPos As Long
    Dim intCol As Integer
    Dim intLength As Integer
    Dim blnProtect As Boolean
    blnProtect = m_objSheet.ProtectContents
    m_objSheet.Unprotect
    strXML = Me.xml
    intCol = 1
    lngStartPos = 1
    intLength = 32767
    Do Until lngStartPos > Len(strXML)
    m_objSheet.Cells(1, intCol).value = Mid(strXML, lngStartPos, intLength)
    lngStartPos = lngStartPos + intLength
    intCol = intCol + 1
    Loop
    Do Until Len(m_objSheet.Cells(1, intCol)) = 0
    m_objSheet.Cells(1, intCol) = ""
    intCol = intCol + 1
    Loop
    If blnProtect Then
    m_objSheet.Protect
    End If
    End Sub
    Public Property Get xml() As String
    Dim strXML As String
    Dim intCnt As Integer
    If m_colProperties.count > 0 Then
    strXML = "<bne:properties xmlns:bne=""http://www.oracle.com/bne"">"
    For intCnt = 1 To m_colProperties.count
    strXML = strXML & m_colProperties(intCnt).xml()
    Next intCnt
    strXML = strXML & "</bne:properties>"
    End If
    xml = strXML
    End Property
    

    General
    Stream Path:VBA/BneVBAProperty
    VBA File Name:BneVBAProperty
    Stream Size:5385
    Data ASCII:. . . . . . . . . . . . . . . . . . / . . . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > Y r ( D Y w * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . & | . n B . P * t . . . . . . . . . . . . . . . . . . . . . . x . . . . & | . n B . P * t > Y r ( D Y w . . . . M E . . . . . . . . . . . . . . . . . . . . . @ . . . . ( . . . . . . S . . . . . S . . . . . S . . . . " < . . . . . 8 " . . . . . . < . . . . . 6 " . . . . . < H . . . . . . < 8 . . . . . . < P . . . .
    Data Raw:01 16 03 00 06 00 01 00 00 b2 0b 00 00 e4 00 00 00 88 02 00 00 2f 0c 00 00 3d 0c 00 00 d5 11 00 00 06 00 00 00 01 00 00 00 ce c1 c8 ea 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 98 00 ff ff 00 00 3e 9f 59 ad fb 72 28 44 a4 ed fd 59 83 99 77 de 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAProperty"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_strName As String
    Private m_varValue As Variant
    Private m_objProperties As BneVBAProperties
    Public Property Let name(strName As String)
    On Error Resume Next
    m_strName = strName
    End Property
    Public Property Let value(varValue As Variant)
    On Error Resume Next
    m_varValue = varValue
    End Property
    Public Property Let Controller(objProperties As BneVBAProperties)
    Set m_objProperties = objProperties
    End Property
    Public Property Get name() As String
    name = m_strName
    End Property
    Public Property Get value() As Variant
    value = m_varValue
    End Property
    Public Sub addProperty(objProperty As BneVBAProperty)
    On Error Resume Next
    If Not TypeOf m_varValue Is Collection Then Set m_varValue = New Collection
    objProperty.Controller = m_objProperties
    m_varValue.add objProperty, objProperty.name
    m_objProperties.saveXML
    End Sub
    Public Sub removeProperty(strPropertyName As String)
    On Error Resume Next
    m_varValue.Remove strPropertyName
    m_objProperties.saveXML
    End Sub
    Public Function getProperty(strPropertyName As String) As BneVBAProperty
    On Error Resume Next
    Set getProperty = m_varValue(strPropertyName)
    End Function
    Public Property Get xml() As String
    Dim strXML As String
    Dim lngCnt As Long
    strXML = "<item>" & "<name>" & BneEscapeXML(Me.name) & "</name>"
    If TypeOf m_varValue Is Collection Then
    strXML = strXML & "<value>"
    For lngCnt = 1 To m_varValue.count
    strXML = strXML & m_varValue(lngCnt).xml
    Next
    Else
    strXML = strXML & "<value>" & BneEscapeXML(CStr(m_varValue)) & "</value>"
    End If
    strXML = strXML & "</item>"
    xml = strXML
    End Property
    
    

    General
    Stream Path:VBA/BneVBAUploader
    VBA File Name:BneVBAUploader
    Stream Size:19735
    Data ASCII:. . . . . . . . . . . . . . . . . . L . . . Z . . . J : . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . | . A N ` r | * = h . 8 . . + 3 q . . . . . . . . . . . . . . . . . . . . 3 . 7 J ^ 4 W . V . . . . . . . . . . . . . . . . . . . . . . x . . . . 3 . 7 J ^ 4 W . V | . A N ` r | . . . . M E . . . . . . . . . . . . . . . . . . . . . P . @ . ( . 8 . . . 0 . . . . . . . S . . . . . S . . . . . S . . . . 0 . . . . . " . . . . . " X . . . . . . < . . . . . . < . . . . . . < 6 . . . . . 6
    Data Raw:01 16 03 00 06 00 01 00 00 ba 12 00 00 e4 00 00 00 88 02 00 00 4c 13 00 00 5a 13 00 00 4a 3a 00 00 12 00 00 00 01 00 00 00 ce c1 b5 2c 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff b8 00 ff ff 00 00 fb 96 7c 18 41 f2 80 4e ad 60 c9 72 8b a4 7c b5 2a 3d fb fc fa a0 68 10 a7 38 08 00 2b 33 71 b5 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneVBAUploader"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private m_colSheets As New Collection
    Private m_lngJobID As Long
    Private m_blnFlaggedRows As Boolean
    Private m_lngUploadedRows() As Long
    Private m_intStatus As Integer
    Private m_text As String
    Private m_cause As String
    Private m_action As String
    Private m_objCommonParams As BneVBAParameters
    Private m_objUplStructure As New BneUploadLayout
    Private Const BNE_UPL_OK = 1
    Private Const BNE_UPL_ERROR = 2
    Property Get UPL_OK() As Integer
    UPL_OK = BNE_UPL_OK
    End Property
    Property Get UPL_ERROR() As Integer
    UPL_ERROR = BNE_UPL_ERROR
    End Property
    Property Set Sheets(colSheets As Collection)
    Set m_colSheets = colSheets
    End Property
    Property Set CommonUploadParams(oParams As BneVBAParameters)
    Set m_objCommonParams = oParams
    End Property
    Property Let FlaggedRowsOnly(FlaggedRows As Boolean)
    m_blnFlaggedRows = FlaggedRows
    End Property
    Property Get JobID() As Long
    JobID = m_lngJobID
    End Property
    Property Get Status() As Integer
    Status = m_intStatus
    End Property
    Property Get text() As String
    text = m_text
    End Property
    Property Get cause() As String
    cause = m_cause
    End Property
    Property Get action() As String
    action = m_action
    End Property
    Private Sub Class_Initialize()
    m_lngJobID = -1
    m_intStatus = BNE_UPL_OK
    ReDim m_lngUploadedRows(1)
    End Sub
    Private Sub Class_Terminate()
    Set m_colSheets = Nothing
    Set m_objCommonParams = Nothing
    Set m_objUplStructure = Nothing
    End Sub
    Public Sub BneUploadBegin()
    Dim objXMLDom As Object
    Dim lngUploadRowCount As Long
    On Error GoTo ErrorHandler
    BneTickleSession
    Set objXMLDom = createDOMDocument()
    If Not objXMLDom Is Nothing Then
    Dim objUplStructure As New BneUploadLayout
    lngUploadRowCount = m_objUplStructure.createUploadXML(m_colSheets, New BneLayout, objXMLDom, m_blnFlaggedRows)
    Else
    AddBneMsg BNE_ERROR, "BneUploadBegin", "Couldn't Create a DOM Document"
    GoTo ErrorHandler
    End If
    If Not SetupIsValid() Then
    AddBneMsg BNE_ERROR, "BneUploadBegin", "The Configuration for the upload is invalid.  Aborting."
    GoTo ErrorHandler
    End If
    If lngUploadRowCount = -1 Then
    m_objCommonParams.add "bne:uploadCancelled", "true"
    Else
    m_objCommonParams.add "bne:uploadRowCount", CStr(lngUploadRowCount)
    End If
    m_lngJobID = UploadData(objXMLDom, m_objCommonParams)
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "BneUploadBegin", "Hit the ErrorHandler: " & Err.Description
    m_intStatus = BNE_UPL_ERROR
    End Sub
    Private Function UploadData(ByRef Document As Object, commonParams As BneVBAParameters) As Long
    Dim oXMLhttp As Object
    Dim sServerPath As String
    Dim sUploadServlet As String
    Dim sIcxId As String
    Dim sDocumentId As String
    Dim sContent As String
    Dim iParam As Integer
    Dim lJobId As Long
    lJobId = -1
    Dim sBoundary As String
    BneTickleSession
    sBoundary = "---------------------------7d06f1de0452"
    On Error GoTo CreateHTTPErrorHandler
    Set oXMLhttp = CreateHTTPObject
    On Error GoTo CreateFormErrorHandler
    sServerPath = commonParams.Item("bne:servicePath").value
    sUploadServlet = "BneUploaderService"
    sIcxId = commonParams.Item("bne:icxId").value
    sDocumentId = commonParams.Item("bne:documentId").value
    oXMLhttp.Open "POST", sServerPath & sUploadServlet & "?ICX_SESSION_ID=" & sIcxId & "&bne:documentId=" & sDocumentId & "&bne:encoding=UTF-8", False
    oXMLhttp.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & sBoundary
    sContent = "--" & sBoundary & vbCrLf
    sContent = sContent & "Content-Disposition: form-data; name=""uploadfilename""; filename=""bne_data_" & "vXgNwAoX" & ".xml""" & vbCrLf
    sContent = sContent & "Content-Type: application/octet-stream" & vbCrLf & vbCrLf
    If m_objUplStructure.IsLineFeedFound Then
    sContent = sContent & Replace(Document.xml, "&amp;#10;", "&#10;")
    m_objUplStructure.IsLineFeedFound = False
    Else
    sContent = sContent & Document.xml
    End If
    Dim oParam As BneVBAParameter
    For iParam = 1 To commonParams.count
    Set oParam = commonParams.Item(iParam)
    sContent = sContent & "--" & sBoundary & vbCrLf
    sContent = sContent & "Content-Disposition: form-data; name=""" & oParam.name & """" & vbCrLf & vbCrLf
    sContent = sContent & oParam.value & vbCrLf
    Next iParam
    sContent = sContent & "--" & sBoundary & "--"
    AddBneMsg BNE_TRACE, "UploadData", "Form Contents: " & sContent
    On Error GoTo SendErrorHandler
    oXMLhttp.send (sContent)
    AddBneMsg BNE_TRACE, "UploadData", "HTTP Response Status: " & CStr(oXMLhttp.Status)
    On Error GoTo ResponseErrorHandler
    If oXMLhttp.readyState = 4 Then 'The upload has finished
    If oXMLhttp.Status = 200 Then 'HTTP Status 200 returned
    Dim oResponse As Object
    Set oResponse = oXMLhttp.responseXML
    If oResponse Is Nothing Then
    AddBneMsg BNE_ERROR, "UploadData", "The HTTP response was nothing.  No Job ID returned"
    ElseIf oResponse.xml = "" Then
    AddBneMsg BNE_ERROR, "UploadData", "The HTTP response contained no XML.  No Job ID returned"
    Else
    lJobId = GetUploadResponseMsgs(oResponse, commonParams)
    AddBneMsg BNE_TRACE, "UploadData", "Returned JobID: " & lJobId
    End If
    Else 'Nasty error
    AddBneMsg BNE_ERROR, "UploadData", "The HTTP response status was not 200.  The status was: " & CStr(oXMLhttp.Status)
    End If
    Else 'Should never get to here as POST was Synchronous, therefore, once completed, returns to readyState = 4.
    AddBneMsg BNE_ERROR, "UploadData", "MSXML returned readyState = " & oXMLhttp.readyState
    End If
    UploadData = lJobId
    Exit Function
    CreateHTTPErrorHandler:
    AddBneMsg BNE_ERROR, "UploadData", "Unable to Create HTTP Object"
    UploadData = lJobId
    Exit Function
    CreateFormErrorHandler:
    AddBneMsg BNE_ERROR, "UploadData", "Error Creating Form "
    UploadData = lJobId
    Exit Function
    SendErrorHandler:
    AddBneMsg BNE_ERROR, "UploadData", "Error Posting the HTTP Request"
    UploadData = lJobId
    Exit Function
    ResponseErrorHandler:
    AddBneMsg BNE_ERROR, "UploadData", "Error with the HTTP Response"
    UploadData = lJobId
    Exit Function
    End Function
    Public Sub BneUploadComplete()
    Dim objXMLDom As Object
    Dim objSheet As Worksheet
    Dim sUploadCancelled As String
    On Error Resume Next
    sUploadCancelled = m_objCommonParams.Item("bne:uploadCancelled").value
    On Error GoTo ErrorHandler
    Set objXMLDom = createDOMDocument
    DownloadMessages objXMLDom, m_objCommonParams
    If Not objXMLDom Is Nothing Then
    m_objUplStructure.processMessages objXMLDom, IIf(sUploadCancelled = "true", True, False)
    Else
    AddBneMsg BNE_ERROR, "BneUploadComplete", "Couldn't Create a DOM Document"
    GoTo ErrorHandler
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "BneUploadComplete", "Hit the ErrorHandler: " & Err.Description
    m_intStatus = BNE_UPL_ERROR
    End Sub
    Private Function SetupIsValid() As Boolean
    If m_objCommonParams Is Nothing Or m_colSheets.count = 0 Then
    SetupIsValid = False
    Exit Function
    End If
    SetupIsValid = True
    End Function
    Private Sub DownloadMessages(Document As Object, params As BneVBAParameters)
    Dim oXMLhttp As Object
    Dim sServerPath As String
    Dim sUploadServlet As String
    Dim sIcxId As String
    Dim sDocumentId As String
    Dim sContent As String
    On Error GoTo CreateHTTPErrorHandler
    Set oXMLhttp = CreateHTTPObject
    On Error GoTo CreateFormErrorHandler
    sServerPath = params.Item("bne:servicePath").value
    sUploadServlet = "BneUploaderService"
    sIcxId = params.Item("bne:icxId").value
    sDocumentId = params.Item("bne:documentId").value
    oXMLhttp.Open "POST", sServerPath & sUploadServlet & "?ICX_SESSION_ID=" & sIcxId & "&bne:documentId=" & sDocumentId & "&bne:encoding=UTF-8", False
    oXMLhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    sContent = "bne:requestType=downloadMessages&bne:deleteMessages=true&bne:uploadJobNumber=" & m_lngJobID & "&bne:language=" & params.Item("bne:language").value
    AddBneMsg BNE_TRACE, "DownloadMessages", "Form Contents: " & sContent
    On Error GoTo SendErrorHandler
    oXMLhttp.send (sContent)
    AddBneMsg BNE_TRACE, "DownloadMessages", "HTTP Response Status: " & CStr(oXMLhttp.Status)
    On Error GoTo ResponseErrorHandler
    If oXMLhttp.readyState = 4 Then 'The upload has finished
    If oXMLhttp.Status = 200 Then 'HTTP Status 200 returned
    Set Document = oXMLhttp.responseXML
    If Document Is Nothing Then
    AddBneMsg BNE_ERROR, "DownloadMessages", "The HTTP response was nothing.  Response was Nothing"
    ElseIf Document.xml = "" Then
    AddBneMsg BNE_ERROR, "DownloadMessages", "The HTTP response was nothing.  No messages returned"
    End If
    Else 'Nasty error
    AddBneMsg BNE_ERROR, "DownloadMessages", "The HTTP response status was not 200.  The status was: " & CStr(oXMLhttp.Status)
    End If
    Else 'Should never get to here as POST was Synchronous, therefore, once completed, returns to readyState = 4.
    AddBneMsg BNE_ERROR, "UploadData", "MSXML returned readyState = " & oXMLhttp.readyState
    End If
    Exit Sub
    CreateHTTPErrorHandler:
    AddBneMsg BNE_ERROR, "DownloadMessages", "Unable to Create HTTP Object"
    Exit Sub
    CreateFormErrorHandler:
    AddBneMsg BNE_ERROR, "DownloadMessages", "Error Creating Form "
    Exit Sub
    SendErrorHandler:
    AddBneMsg BNE_ERROR, "DownloadMessages", "Error Posting the HTTP Request"
    Exit Sub
    ResponseErrorHandler:
    AddBneMsg BNE_ERROR, "DownloadMessages", "Error with the HTTP Response"
    Exit Sub
    End Sub
    Private Function GetUploadResponseMsgs(response As Variant, params As BneVBAParameters) As Long
    Dim oDocument As Object
    Dim iCounter As Integer
    Dim oNode As Object
    Dim oAtts As Object
    Dim oAtt As Object
    If Not response Is Nothing Then
    Set oDocument = response.DocumentElement
    If oDocument Is Nothing Then
    GetUploadResponseMsgs = -1
    Exit Function
    End If
    Else
    GetUploadResponseMsgs = -1
    Exit Function
    End If
    Set oNode = response.DocumentElement.SelectSingleNode("/bne:document/bne:message[@bne:type='STATUS'&&@bne:id='BNE-000002']")
    If Not oNode Is Nothing Then
    Set oAtts = oNode.Attributes()
    If Not oAtts Is Nothing Then
    Set oAtt = oAtts.getNamedItem("bne:value")
    If Not oAtt Is Nothing Then
    GetUploadResponseMsgs = CLng(oAtt.value)
    Exit Function
    End If
    End If
    Else
    For iCounter = 0 To oDocument.ChildNodes.Length
    Set oNode = oDocument.ChildNodes(iCounter)
    If Not oNode Is Nothing Then
    If oNode.nodeName = "bne:message" Then
    Set oAtts = oNode.Attributes()
    If Not oAtts Is Nothing Then
    Set oAtt = oAtts.getNamedItem("bne:type")
    If Not oAtt Is Nothing Then
    If oAtt.value = "ERROR" Then
    On Error Resume Next
    m_text = oAtts.getNamedItem("bne:text").value
    m_cause = oAtts.getNamedItem("bne:cause").value
    m_action = oAtts.getNamedItem("bne:action").value
    AddBneMsg BNE_ERROR, m_text, m_cause, m_action
    On Error GoTo 0
    End If
    End If
    End If
    End If
    End If
    Next iCounter
    End If
    GetUploadResponseMsgs = -1
    End Function
    
    

    General
    Stream Path:VBA/BneXSDElement
    VBA File Name:BneXSDElement
    Stream Size:9059
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S . . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . F . C . F . B . 3 . D . 2 . A . - . A
    Data Raw:01 16 03 00 01 f0 00 00 00 ea 10 00 00 d4 00 00 00 00 02 00 00 ff ff ff ff f1 10 00 00 8d 1d 00 00 00 00 00 00 01 00 00 00 ce c1 31 19 00 00 ff ff 01 00 00 00 80 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "BneXSDElement"
    Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = False
    
    Option Explicit
    Option Base 1
    Private msName As String
    Private msPath As String
    Private msDataType As String
    Private msVBADataType As String
    Private msInterfaceName As String
    Private msColumnName As String
    Private mnRowCount As Long
    Private mnBufferCount As Long
    Private maData() As Variant
    Private mnMaxBufferSize As Long
    Private mbReadOnly As Boolean
    Private Sub Class_Initialize()
    ReDim maData(200, 2) 'Give it max elements for now. The second dimension is to store read-only values.
    mnMaxBufferSize = -1   'DOM parser doesn?t require buffer.  This is our flag!
    mnBufferCount = 0   'DOM parser doesn?t require buffer.  This is our flag!
    End Sub
    Public Sub setAttributes(sName As String, sPath As String, sDataType As String, sVBADataType As String, sInterfaceName As String, sColumnName As String, bReadOnly)
    msName = sName
    msPath = sPath
    msDataType = sDataType
    msVBADataType = sVBADataType
    msInterfaceName = sInterfaceName
    msColumnName = sColumnName
    mnRowCount = 0
    mbReadOnly = bReadOnly
    End Sub
    Public Sub addDataItem(vData As Variant)
    mnRowCount = mnRowCount + 1
    If mnRowCount > 200 Then Exit Sub
    On Error Resume Next
    Dim lIndex As Long
    lIndex = mnRowCount
    If mnMaxBufferSize <> -1 Then
    lIndex = ((mnRowCount - 1) Mod mnMaxBufferSize) + 1
    End If
    maData(lIndex, 1) = maData(lIndex, 1) & convertDataItem(vData)
    mnBufferCount = lIndex
    End Sub
    Public Property Let MaxBufferSize(size As Long)
    SetMaxBufferSize (size)
    End Property
    Public Property Get CurrentBufferSize() As Long
    CurrentBufferSize = mnBufferCount
    End Property
    Public Property Get name()
    name = msName
    End Property
    Public Property Get path()
    path = msPath
    End Property
    Public Property Get DataType()
    DataType = msDataType
    End Property
    Public Property Get VBADataType()
    VBADataType = msVBADataType
    End Property
    Public Property Get InterfaceName()
    InterfaceName = msInterfaceName
    End Property
    Public Property Get ColumnName()
    ColumnName = msColumnName
    End Property
    Public Property Get RowCount()
    RowCount = mnRowCount
    End Property
    Public Property Get DataArray()
    DataArray = maData
    End Property
    Public Property Get ReadOnly()
    ReadOnly = mbReadOnly
    End Property
    Public Sub setDataItem(ByVal lIndex As Long, vData As Variant)
    If lIndex > 200 Then Exit Sub
    If lIndex > mnRowCount Then mnRowCount = lIndex
    On Error Resume Next
    If mnMaxBufferSize <> -1 Then
    lIndex = ((lIndex - 1) Mod mnMaxBufferSize) + 1
    End If
    maData(lIndex, 1) = maData(lIndex, 1) & convertDataItem(vData)
    mnBufferCount = lIndex
    End Sub
    Public Sub setReadOnly(ByVal lIndex As Long, bReadOnly As Boolean)
    If lIndex > 200 Then Exit Sub
    If lIndex > mnRowCount Then mnRowCount = lIndex
    On Error Resume Next
    If mnMaxBufferSize <> -1 Then
    lIndex = ((lIndex - 1) Mod mnMaxBufferSize) + 1
    End If
    maData(lIndex, 2) = bReadOnly
    mnBufferCount = lIndex
    End Sub
    Public Function isReadOnly(lngRowNum As Long) As Boolean
    On Error Resume Next
    If Not maData(lngRowNum, 2) Then
    isReadOnly = False
    Else
    isReadOnly = True
    End If
    End Function
    Public Sub ResetDataArray()
    SetMaxBufferSize (mnMaxBufferSize)
    End Sub
    Private Sub SetMaxBufferSize(MaxSize As Long)
    mnMaxBufferSize = MaxSize
    ReDim maData(mnMaxBufferSize, 2)
    mnBufferCount = 0
    End Sub
    Public Function convertDataItem(vData As Variant) As Variant
    On Error GoTo ErrorHandler
    Select Case msVBADataType
    Case "date"
    convertDataItem = vData
    Case "datetime"
    convertDataItem = vData
    Case "double"
    convertDataItem = vData
    Case "integer"
    convertDataItem = CInt(Val(vData))
    Case Else
    convertDataItem = CStr(vData)
    End Select
    Exit Function
    ErrorHandler:
    convertDataItem = vData
    End Function
    

    General
    Stream Path:VBA/Foglio1
    VBA File Name:Foglio1
    Stream Size:1128
    Data ASCII:. . . . . . . . . Z . . . . . . . . . . a . . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . J } j . . . . . . . . . . . . . . . F . . . . . . . . . . . . . . . . . . . . . ^ 5 . B . . v . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S L . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . 0 . 0 . 0 . 2 . 0 . 8 . 2 . 0 . - . 0
    Data Raw:01 16 03 00 01 00 01 00 00 5a 03 00 00 e4 00 00 00 10 02 00 00 ff ff ff ff 61 03 00 00 b5 03 00 00 00 00 00 00 01 00 00 00 ce c1 1c ec 00 00 ff ff 23 01 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 e0 18 9b a0 14 e9 e3 4a b8 e0 7d 6a e5 02 10 cd 20 08 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "Foglio1"
    Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = True
    

    General
    Stream Path:VBA/Foglio2
    VBA File Name:Foglio2
    Stream Size:1128
    Data ASCII:. . . . . . . . . Z . . . . . . . . . . a . . . . . . . . . . . . . . . a . . # . . . . . . . . . . . . . . . . . . . & 1 W < . A R . b . . . . . . . . . . . . . F . . . . . . . . . . . . . . . . . . . . . K . I . ` d . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S L . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . 0 . 0 . 0 . 2 . 0 . 8 . 2 . 0 . -
    Data Raw:01 16 03 00 01 00 01 00 00 5a 03 00 00 e4 00 00 00 10 02 00 00 ff ff ff ff 61 03 00 00 b5 03 00 00 00 00 00 00 01 00 00 00 ce c1 0d 61 00 00 ff ff 23 01 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 26 31 e7 a8 57 3c 00 41 85 81 dd 52 91 1b e8 62 20 08 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "Foglio2"
    Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = True
    

    General
    Stream Path:VBA/Foglio3
    VBA File Name:Foglio3
    Stream Size:1128
    Data ASCII:. . . . . . . . . Z . . . . . . . . . . a . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . 7 . . z . B . G + m 9 . . . . . . . . . . . . . F . . . . . . . . . . . . . . . . . . . . - c C v m w . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S L . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . 0 . 0 . 0 . 2 . 0 . 8 . 2 . 0 . -
    Data Raw:01 16 03 00 01 00 01 00 00 5a 03 00 00 e4 00 00 00 10 02 00 00 ff ff ff ff 61 03 00 00 b5 03 00 00 00 00 00 00 01 00 00 00 ce c1 f5 a0 00 00 ff ff 23 01 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 fc 37 1f a0 0c 7a 11 42 a3 11 47 2b 84 6d cd 39 20 08 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "Foglio3"
    Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = True
    

    General
    Stream Path:VBA/Foglio4
    VBA File Name:Foglio4
    Stream Size:1128
    Data ASCII:. . . . . . . . . Z . . . . . . . . . . a . . . . . . . . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . 6 . @ 2 . . . . . . . . . . . . . . F . . . . . . . . . . . . . . . . . . . . @ m 1 A F { j | . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . S L . . . . S . . . . . S . . . . . < . . . . . . . . . . N . 0 . { . 0 . 0 . 0 . 2 . 0 . 8 . 2 . 0 . - . 0
    Data Raw:01 16 03 00 01 00 01 00 00 5a 03 00 00 e4 00 00 00 10 02 00 00 ff ff ff ff 61 03 00 00 b5 03 00 00 00 00 00 00 01 00 00 00 ce c1 d9 cb 00 00 ff ff 23 01 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff ff ff ff ff 00 00 93 e5 e9 0a 36 c7 86 40 bd 8a cb fe ee 32 06 ef 20 08 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "Foglio4"
    Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = True
    

    General
    Stream Path:VBA/Module1
    VBA File Name:Module1
    Stream Size:1213
    Data ASCII:. . . . . . . . . . . . . . . . . . . . $ . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M E . . . . . . . . . . . . . . . . . . . . . . . ( . . . . . 6 . . . . . . < . . . . . . . < . . . . . . . < . . . . . . . . . . . . . . . . . . . . . . . 0 . .
    Data Raw:01 16 03 00 03 f0 00 00 00 f2 02 00 00 d4 00 00 00 b0 01 00 00 ff ff ff ff 20 03 00 00 24 04 00 00 00 00 00 00 01 00 00 00 ce c1 1c 70 00 00 ff ff 03 00 00 00 00 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 08 00 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "Module1"
    Sub Macro1()
    Attribute Macro1.VB_Description = "test"
    Attribute Macro1.VB_ProcData.VB_Invoke_Func = " \n14"
    '
    ' Macro1 Macro
    ' test
    '
    
    '
    End Sub
    

    General
    Stream Path:VBA/Sheet1
    VBA File Name:Sheet1
    Stream Size:100248
    Data ASCII:. . . . . . . . . i . . . . . p . . . S m . . a m . . . 1 . . 8 . . . . . . . x . . . # . . . . . . . . . . . . . . . . . . . . . . M \\ w . _ C r . . . . . . . . . . . . . F . . . . . . . . . . . . . . . . . . . . ) . @ ( @ W B h % 0 2 . . . . . . . . . . . . . . . . . . . . . . x . . . . ) . @ ( @ W B h % 0 2 . M \\ w . _ C r . . . . M E . . . . . . . . . . . . . . . . . . . . . h . . . X . . ` . h . . . . x . . 0 . 8 . . . P . . . . . . [ L . . . . S . . . . . S . . . . 0 . . . . . " . . . . . " . . .
    Data Raw:01 16 03 00 06 00 01 00 00 c2 69 00 00 e4 00 00 00 70 04 00 00 53 6d 00 00 61 6d 00 00 11 31 01 00 38 00 00 00 01 00 00 00 ce c1 78 10 00 00 ff ff 23 00 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 00 01 ff ff 00 00 aa fc 99 b3 b6 0e ee 4d 8e 5c bd 77 1e 5f 43 72 20 08 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "Sheet1"
    Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = True
    
    Option Explicit
    Option Base 1
    Const WEBADI_SHEET As String = "WebADI"
    Const OSSCOOKIE = "PEBSPRD"
    Const DOCUMENT_ONCLICK = "BneDocument_OnClick "
    Const DOCUMENT_COMPLETE = "BneDocument_Complete "
    Const PRODUCT_CODE_LABEL = "12.0.0.0"
    Const PRODUCT_RELEASE_LABEL = "12.0.0.0: Friday Feburary 10, 2006"
    Const VIEWER_VERSION = "$Revision: 120.93.12020000.62 $"
    Const GENERATED_LANGUAGE = "US"
    Const SERVLET_PATH = "https://ebs-prd.eos.lkqeurope.com:443/OA_HTML/"
    Const APPLICATION_SERVICE = SERVLET_PATH & "BneApplicationService"
    Const COMPONENT_SERVICE = SERVLET_PATH & "BneComponentService"
    Const UPLOAD_SERVICE = SERVLET_PATH & "BneUploaderService"
    Const DOWNLOAD_SERVICE = SERVLET_PATH & "BneDownloadService"
    Const TRACE_LEVEL_DESCRIPTION = " ERROR"
    Const DEBUG_FLAG = False
    Const DEBUG_DOCUMENT = "c:\BneDebug-Document.xml"
    Const DEBUG_MESSAGES = "c:\BneDebug-Messages.xml"
    Const UPLOAD_DOCUMENT = "c:\Bne-Document.xml"
    Const UPLOAD_MESSAGES = "c:\Bne-Messages.xml"
    Const DOWNLOAD_DOCUMENT = "Bne-Document-Content.xml"
    Const BNE_DOCUMENT_ID = "FM51SOK4ODFJXCML07W7O8HY1PLOCZQ0DFUS3WUM"
    Dim m_objHTMLDocument As HTMLDocument
    Dim m_Browser As Object
    Dim m_InterfaceColName As String
    Dim m_InterfaceName As String
    Dim m_flagRow As Boolean
    Dim m_DocumentProcessor As String
    Dim m_SessionState As Boolean
    Dim m_SessionTicket As String
    Dim m_StatusBarVisible As Boolean
    Dim m_TicketNumber As Long
    Dim intBrowserWidth As Integer
    Dim intBrowserHeight As Integer
    Dim comingFromDelete As Boolean
    Dim BNEERROR As New BNEERROR
    Dim m_objVBAUploader As BneVBAUploader
    Dim m_col_InterfaceCols As Collection
    Dim m_clsLayout As BneLayout
    Dim m_LOVFlag As Boolean
    Dim m_rowsInLines As Long
    Dim m_PreviousSelection As Range
    Dim m_blnUploadAll As Boolean
    Dim m_newRibbonWorkbookPath As Collection
    Public Sub BneOnCreateProcedure()
    Me.name = WEBADI_SHEET
    Call BneCreateLayout
    Dim clsRowInserter As New BneRowInserter
    clsRowInserter.protectSheet Me
    Set clsRowInserter = Nothing
    Dim objBneRibbon As BneRibbon
    Dim strPath As String
    Dim objParentRibbonWorkbookPaths As Collection
    Set objParentRibbonWorkbookPaths = getParentRibbonWorkbookPaths
    Set objBneRibbon = getBneRibbon
    strPath = objBneRibbon.createMenuForWorkBook(ThisWorkbook)
    objParentRibbonWorkbookPaths.add strPath
    Set objBneRibbon = Nothing
    Set objParentRibbonWorkbookPaths = Nothing
    End Sub
    Public Sub BneCreateOracleMenu()
    If isRibbonCreateSuccess = True Then
    EnableRibbonMainGroup
    Exit Sub
    End If
    Dim strMenuTitle As String
    Dim objWorkSheetMenuBar As Object
    Set objWorkSheetMenuBar = Application.CommandBars("Worksheet Menu Bar")
    Dim objMenu_231_ORACLE As Object
    strMenuTitle = "Or&acle"
    On Error Resume Next
    objWorkSheetMenuBar.Controls(strMenuTitle).Delete
    On Error GoTo 0
    Set objMenu_231_ORACLE = objWorkSheetMenuBar.Controls.add(Type:=msoControlPopup, before:=8)
    objMenu_231_ORACLE.caption = strMenuTitle
    Dim objMenu_231_FILTERS As Object
    strMenuTitle = "&Filters"
    Set objMenu_231_FILTERS = objMenu_231_ORACLE.Controls.add(Type:=msoControlPopup)
    objMenu_231_FILTERS.caption = strMenuTitle
    Dim objMenu_231_SHOW_FILTERS As Object
    strMenuTitle = "&Show Filters"
    Set objMenu_231_SHOW_FILTERS = objMenu_231_FILTERS.Controls.add
    objMenu_231_SHOW_FILTERS.OnAction = Application.ActiveSheet.CodeName & ".BneShowFilters"
    objMenu_231_SHOW_FILTERS.caption = strMenuTitle
    Dim objMenu_231_HIDE_FILTERS As Object
    strMenuTitle = "&Hide Filters"
    Set objMenu_231_HIDE_FILTERS = objMenu_231_FILTERS.Controls.add
    objMenu_231_HIDE_FILTERS.OnAction = Application.ActiveSheet.CodeName & ".BneHideFilters"
    objMenu_231_HIDE_FILTERS.caption = strMenuTitle
    Dim objMenu_231_RESET_FILTERS As Object
    strMenuTitle = "&Reset Filters"
    Set objMenu_231_RESET_FILTERS = objMenu_231_FILTERS.Controls.add
    objMenu_231_RESET_FILTERS.OnAction = Application.ActiveSheet.CodeName & ".BneResetFilters"
    objMenu_231_RESET_FILTERS.caption = strMenuTitle
    Dim objMenu_231_UPLOAD As Object
    strMenuTitle = "&Upload"
    Set objMenu_231_UPLOAD = objMenu_231_ORACLE.Controls.add
    objMenu_231_UPLOAD.OnAction = Application.ActiveSheet.CodeName & ".BneUploadDocument"
    objMenu_231_UPLOAD.caption = strMenuTitle
    Dim objMenu_231_UPLOADALL As Object
    strMenuTitle = "U&pload All"
    Set objMenu_231_UPLOADALL = objMenu_231_ORACLE.Controls.add
    objMenu_231_UPLOADALL.OnAction = Application.ActiveSheet.CodeName & ".BneUploadAll"
    objMenu_231_UPLOADALL.caption = strMenuTitle
    Dim objMenu_231_MONITOR As Object
    strMenuTitle = "&Monitor"
    Set objMenu_231_MONITOR = objMenu_231_ORACLE.Controls.add
    objMenu_231_MONITOR.OnAction = "'" & Application.ActiveSheet.CodeName & ".BneMonitor" & "'"
    objMenu_231_MONITOR.caption = strMenuTitle
    Dim objMenu_231_SWITCHRESP As Object
    strMenuTitle = "S&witch Responsibility"
    Set objMenu_231_SWITCHRESP = objMenu_231_ORACLE.Controls.add
    objMenu_231_SWITCHRESP.OnAction = "'" & Application.ActiveSheet.CodeName & ".BneSwitchResponsibility" & "'"
    objMenu_231_SWITCHRESP.caption = strMenuTitle
    Dim objMenu_231_ABOUT As Object
    strMenuTitle = "&About"
    Set objMenu_231_ABOUT = objMenu_231_ORACLE.Controls.add
    objMenu_231_ABOUT.OnAction = "'" & Application.ActiveSheet.CodeName & ".BneAbout" & "'"
    objMenu_231_ABOUT.BeginGroup = True
    objMenu_231_ABOUT.caption = strMenuTitle
    BneSelectionChange_Menus Me.UsedRange
    End Sub
    Public Sub BneShowFilters()
    Dim pDrawingObjects As Boolean
    Dim pContents As Boolean
    Dim pScenarios As Boolean
    
    Dim TopRow As Long
    Dim TopColumn As Long
    
    Dim LinesRange As Range
    Dim LinesBlockHdr As Range
    
    Dim TipTextExists As Boolean
    Dim HeaderOffset As Integer
    
    Dim InterfaceCols As Collection
    
    If Not AutoFilterMode Then
    Application.ScreenUpdating = False
    With Me
    pDrawingObjects = .ProtectDrawingObjects
    pContents = .ProtectContents
    pScenarios = .ProtectScenarios
    If Not pDrawingObjects And Not pContents And Not pScenarios Then
    Else
    .Unprotect
    End If
    End With
    TopRow = ActiveWindow.VisibleRange.Row
    TopColumn = ActiveWindow.VisibleRange.Column
    
    Set InterfaceCols = BneGetVBAInterfaceCols
    Set LinesRange = BneRetrieveLinesBlockRange(Me, InterfaceCols)
    
    TipTextExists = BneIsLinesBlockHintDisplayed(InterfaceCols)
    If TipTextExists Then
    HeaderOffset = -2
    Else
    HeaderOffset = -1
    End If
    
    With Me
    If Not LinesRange Is Nothing Then
    Set LinesBlockHdr = Range(Cells(LinesRange.Row + HeaderOffset, LinesRange.Column), Cells(LinesRange.Rows(LinesRange.Rows.count).Row, LinesRange.Columns(LinesRange.Columns.count).Column))
    LinesBlockHdr.AutoFilter
    
    If TipTextExists Then
    .Rows(LinesRange.Row - 1).Hidden = True
    End If
    End If
    
    ActiveWindow.ScrollRow = TopRow
    ActiveWindow.ScrollColumn = TopColumn
    If .AutoFilterMode = False Then
    .Protect DrawingObjects:=True, contents:=True, Scenarios:=True
    End If
    End With
    End If
    
    BneSelectionChange_Menus Me.UsedRange
    End Sub
    Public Function IsEnabled_231_SHOW_FILTERS() As Boolean
    If Me.AutoFilterMode Then
    IsEnabled_231_SHOW_FILTERS = False
    Else
    IsEnabled_231_SHOW_FILTERS = True
    End If
    End Function
    Public Sub BneHideFilters()
    Dim pDrawingObjects As Boolean
    Dim pContents As Boolean
    Dim pScenarios As Boolean
    
    Dim TopRow As Long
    Dim TopColumn As Long
    
    Dim LinesRange As Range
    Dim LinesBlockHdr As Range
    
    Dim TipTextExists As Boolean
    Dim HeaderOffset As Integer
    
    Dim InterfaceCols As Collection
    
    If AutoFilterMode Then
    Application.ScreenUpdating = False
    With Me
    pDrawingObjects = .ProtectDrawingObjects
    pContents = .ProtectContents
    pScenarios = .ProtectScenarios
    If Not pDrawingObjects And Not pContents And Not pScenarios Then
    Else
    .Unprotect
    End If
    End With
    TopRow = ActiveWindow.VisibleRange.Row
    TopColumn = ActiveWindow.VisibleRange.Column
    
    Set InterfaceCols = BneGetVBAInterfaceCols
    Set LinesRange = BneRetrieveLinesBlockRange(Me, InterfaceCols)
    
    TipTextExists = BneIsLinesBlockHintDisplayed(InterfaceCols)
    If TipTextExists Then
    HeaderOffset = -2
    Else
    HeaderOffset = -1
    End If
    
    With Me
    If Not LinesRange Is Nothing Then
    Set LinesBlockHdr = Range(Cells(LinesRange.Row + HeaderOffset, LinesRange.Column), Cells(LinesRange.Rows(LinesRange.Rows.count).Row, LinesRange.Columns(LinesRange.Columns.count).Column))
    LinesBlockHdr.AutoFilter
    
    If TipTextExists Then
    .Rows(LinesRange.Row - 1).Hidden = False
    End If
    End If
    
    ActiveWindow.ScrollRow = TopRow
    ActiveWindow.ScrollColumn = TopColumn
    If .AutoFilterMode = False Then
    .Protect DrawingObjects:=True, contents:=True, Scenarios:=True
    End If
    End With
    End If
    
    BneSelectionChange_Menus Me.UsedRange
    End Sub
    Public Function IsEnabled_231_HIDE_FILTERS() As Boolean
    If Me.AutoFilterMode Then
    IsEnabled_231_HIDE_FILTERS = True
    Else
    IsEnabled_231_HIDE_FILTERS = False
    End If
    End Function
    Public Sub BneResetFilters()
    Dim pDrawingObjects As Boolean
    Dim pContents As Boolean
    Dim pScenarios As Boolean
    
    Dim LinesRange As Range
    
    Dim InterfaceCols As Collection
    
    If AutoFilterMode Then
    Application.ScreenUpdating = False
    With Me
    pDrawingObjects = .ProtectDrawingObjects
    pContents = .ProtectContents
    pScenarios = .ProtectScenarios
    If Not pDrawingObjects And Not pContents And Not pScenarios Then
    Else
    .Unprotect
    End If
    
    On Error Resume Next
    
    .ShowAllData
    End With
    
    Set InterfaceCols = BneGetVBAInterfaceCols
    If BneIsLinesBlockHintDisplayed(InterfaceCols) Then
    
    Set LinesRange = BneRetrieveLinesBlockRange(Me, InterfaceCols)
    If Not LinesRange Is Nothing Then
    Me.Rows(LinesRange.Row - 1).Hidden = True
    End If
    End If
    
    With Me
    If Not pDrawingObjects And Not pContents And Not pScenarios Then
    Else
    .Protect DrawingObjects:=True, contents:=True, Scenarios:=True
    End If
    End With
    End If
    End Sub
    Public Function IsEnabled_231_RESET_FILTERS() As Boolean
    If Me.AutoFilterMode Then
    IsEnabled_231_RESET_FILTERS = True
    Else
    IsEnabled_231_RESET_FILTERS = False
    End If
    End Function
    Public Function IsVisible_231_UPLOAD() As Boolean
    Dim objProperties As New BneVBAProperties
    Dim objProperty As BneVBAProperty
    objProperties.setSheet Me
    Set objProperty = objProperties.getProperty("contentgroupupload")
    If Not objProperty Is Nothing Then
    IsVisible_231_UPLOAD = BneGetBooleanValue(objProperty.value)
    Else
    IsVisible_231_UPLOAD = True
    End If
    End Function
    Public Function IsVisible_231_UPLOADALL() As Boolean
    Dim objProperties As New BneVBAProperties
    Dim objProperty As BneVBAProperty
    Dim intSheetCnt As Integer
    Set objProperty = objProperties.getProperty("contentsheetcount")
    If Not objProperty Is Nothing Then
    intSheetCnt = CInt(objProperty.value)
    End If
    If intSheetCnt <= 1 Then
    IsVisible_231_UPLOADALL = False
    Else
    objProperties.setSheet Me
    Set objProperty = objProperties.getProperty("contentgroupupload")
    If Not objProperty Is Nothing Then
    IsVisible_231_UPLOADALL = BneGetBooleanValue(objProperty.value)
    End If
    End If
    End Function
    Private Sub BneSelectionChange_Menus(ByVal Target As Range)
    On Error Resume Next
    Dim strMenuTitle As String
    Dim objWorkSheetMenuBar As Object
    Set objWorkSheetMenuBar = Application.CommandBars("Worksheet Menu Bar")
    Dim objMenu_231_ORACLE As Object
    strMenuTitle = "Or&acle"
    Set objMenu_231_ORACLE = objWorkSheetMenuBar.Controls(strMenuTitle)
    Dim objMenu_231_FILTERS As Object
    strMenuTitle = "&Filters"
    Set objMenu_231_FILTERS = objMenu_231_ORACLE.Controls(strMenuTitle)
    Dim objMenu_231_SHOW_FILTERS As Object
    strMenuTitle = "&Show Filters"
    Set objMenu_231_SHOW_FILTERS = objMenu_231_FILTERS.Controls(strMenuTitle)
    objMenu_231_SHOW_FILTERS.Enabled = IsEnabled_231_SHOW_FILTERS
    Dim objMenu_231_HIDE_FILTERS As Object
    strMenuTitle = "&Hide Filters"
    Set objMenu_231_HIDE_FILTERS = objMenu_231_FILTERS.Controls(strMenuTitle)
    objMenu_231_HIDE_FILTERS.Enabled = IsEnabled_231_HIDE_FILTERS
    Dim objMenu_231_RESET_FILTERS As Object
    strMenuTitle = "&Reset Filters"
    Set objMenu_231_RESET_FILTERS = objMenu_231_FILTERS.Controls(strMenuTitle)
    objMenu_231_RESET_FILTERS.Enabled = IsEnabled_231_RESET_FILTERS
    Dim objMenu_231_UPLOAD As Object
    strMenuTitle = "&Upload"
    Set objMenu_231_UPLOAD = objMenu_231_ORACLE.Controls(strMenuTitle)
    objMenu_231_UPLOAD.Visible = IsVisible_231_UPLOAD
    Dim objMenu_231_UPLOADALL As Object
    strMenuTitle = "U&pload All"
    Set objMenu_231_UPLOADALL = objMenu_231_ORACLE.Controls(strMenuTitle)
    objMenu_231_UPLOADALL.Visible = IsVisible_231_UPLOADALL
    End Sub
    Public Sub BneRemoveOracleMenu()
    On Error Resume Next
    If isRibbonCreateSuccess = True Then
    DisableRibbonMainGroup
    End If
    Dim strMenuTitle As String
    Dim objCellPopUp As CommandBar
    Dim i As Integer
    Dim objWorkSheetMenuBar As Object
    Set objWorkSheetMenuBar = Application.CommandBars("Worksheet Menu Bar")
    strMenuTitle = "Or&acle"
    objWorkSheetMenuBar.Controls(strMenuTitle).Delete
    Set objCellPopUp = CommandBars("Cell")
    If Not objCellPopUp Is Nothing Then
    For i = objCellPopUp.Controls.count To 1 Step -1
    If Left(objCellPopUp.Controls(i).Tag, 9) = "mnuOracle" Then
    objCellPopUp.Controls(i).Delete
    End If
    Next i
    End If
    End Sub
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim objCellPopUp As CommandBar
    Dim objButton As CommandBarButton
    Dim i As Integer
    Dim strMenuTitle As String
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Worksheet_BeforeRightClick", "Error: " & Err.Number & " " & Err.Description
    End Sub
    Public Sub CreateLayout()
    Dim bDisplayStatusBar As Boolean
    Dim localPicFile As String
    Dim oPicture As Shape
    Dim lft As Double
    Dim tp As Double
    Dim isProtected As Boolean
    On Error GoTo LayoutError
    bDisplayStatusBar = Application.DisplayStatusBar
    Application.DisplayStatusBar = True
    ActiveWindow.DisplayOutline = True
    With ActiveSheet.Outline
    .AutomaticStyles = False
    .SummaryRow = xlAbove
    .SummaryColumn = xlLeft
    End With
    Selection.ApplyOutlineStyles
    Application.ScreenUpdating = False
    Application.Interactive = False
    Set m_clsLayout = New BneLayout
    ActiveWorkbook.CustomDocumentProperties.add name:=Me.CodeName + "_STATIC_RANGE_COUNTER", LinkToContent:=False, Type:=msoPropertyTypeNumber, value:=1
    ActiveWorkbook.CustomDocumentProperties.add name:=Me.CodeName + "_DYNAMIC_RANGE_COUNTER", LinkToContent:=False, Type:=msoPropertyTypeNumber, value:=1
    m_clsLayout.render Me
    Set m_clsLayout = Nothing
    isProtected = Me.ProtectContents
    If isProtected Then
    setLayoutProtected True
    End If
    Application.ScreenUpdating = True
    Application.Interactive = True
    Application.StatusBar = ""
    Application.DisplayStatusBar = bDisplayStatusBar
    Exit Sub
    LayoutError:
    AddBneMsg BNE_ERROR, "Sheet.CreateLayout", "Error: " & Err.Number & " " & Err.Description
    Application.ScreenUpdating = True
    Application.Interactive = True
    Application.DisplayStatusBar = bDisplayStatusBar
    Set m_clsLayout = Nothing
    End Sub
    Public Sub BneUploadCancel()
    Dim oParams As New BneVBAParameters
    If Not m_Browser Is Nothing Then
    oParams.add "bne:apiVersion", "1.0"
    oParams.add "bne:page", "BneAsyncUpload"
    oParams.add "event", "bne:asyncJobCancel"
    oParams.add "bne:documentId", "FM51SOK4ODFJXCML07W7O8HY1PLOCZQ0DFUS3WUM"
    If Not m_objVBAUploader Is Nothing Then
    oParams.add "bne:uploadJob", CStr(m_objVBAUploader.JobID)
    End If
    m_Browser.NavigatePost APPLICATION_SERVICE, oParams
    End If
    End Sub
    Public Sub BneUploadBegin(ByRef objHTMLDocument As Object)
    Dim colSheets As New Collection
    Dim objBook As Object
    Dim objSheet As Object
    Dim clsProperties As New BneVBAProperties
    Dim clsProperty As BneVBAProperty
    Dim strContentID As String
    BneAddReference "Scripting", "{420B2830-E718-11CF-893D-00A0C9054228}"
    If m_blnUploadAll = True Then
    clsProperties.setSheet Me
    Set clsProperty = clsProperties.getProperty("contentidentifier")
    If Not clsProperty Is Nothing Then
    strContentID = clsProperty.value
    End If
    For Each objBook In Workbooks
    For Each objSheet In objBook.Worksheets
    clsProperties.setSheet objSheet
    Set clsProperty = clsProperties.getProperty("contentidentifier")
    If Not clsProperty Is Nothing Then
    If clsProperty.value = strContentID Then
    Set clsProperty = clsProperties.getProperty("contentgroupsequence")
    If Not clsProperty Is Nothing Then
    If Len(clsProperty.value) > 0 Then
    Set clsProperty = clsProperties.getProperty("contentgroupupload")
    If Not clsProperty Is Nothing Then
    If BneGetBooleanValue(clsProperty.value) = True Then
    colSheets.add objSheet
    End If
    End If
    End If
    End If
    End If
    End If
    Next
    Next
    Else
    colSheets.add Me
    End If
    Call BneProcessingBegin(True)
    Set m_objVBAUploader = New BneVBAUploader
    Set m_objVBAUploader.Sheets = colSheets
    BneSetupNewUpload objHTMLDocument
    m_Browser.addEventCallBack "BneUploadCancel", "BNE:BROWSERCLOSE", Me
    m_objVBAUploader.BneUploadBegin
    Dim lTicketNumber As Long
    Dim strMsgHeader As String
    strMsgHeader = "Error"
    lTicketNumber = m_objVBAUploader.JobID
    If lTicketNumber = -1 Then
    If m_objVBAUploader.Status = m_objVBAUploader.UPL_ERROR Then
    objHTMLDocument.body.innerHTML = BneBrowser.WebBrowser_DocumentComplete_ERROR_MESSAGE
    Else 'Show the standard error page with last error in response xml.
    Call m_Browser.ErrorMessage(strMsgHeader, m_objVBAUploader.text, m_objVBAUploader.cause, m_objVBAUploader.action)
    objHTMLDocument.body.innerHTML = m_Browser.WebBrowser_DocumentComplete_ERROR_MESSAGE
    End If
    ElseIf lTicketNumber = 0 Then
    Call m_Browser.ErrorMessage(strMsgHeader, m_objVBAUploader.text, m_objVBAUploader.cause, m_objVBAUploader.action)
    objHTMLDocument.body.innerHTML = m_Browser.WebBrowser_DocumentComplete_ERROR_MESSAGE
    Else
    objHTMLDocument.all("bne:uploadJob").value = CStr(lTicketNumber)
    Dim oForm As Object
    Set oForm = objHTMLDocument.all("BneAsyncUploadPageSend")
    oForm.submit
    End If
    End Sub
    Public Sub BneSetupNewUpload(ByRef objHTMLDocument As Object)
    Dim commonParamForm As Object
    Dim integratorParamForm As Object
    Dim commonParams As BneVBAParameters
    Dim integratorParams As BneVBAParameters
    Dim documentId As String
    ResetMsgs
    Set commonParamForm = objHTMLDocument.all("bne:icxId")
    Set commonParams = BneExtractParams(commonParamForm)
    commonParams.add "bne:documentId", Me.BneGetDocumentId
    commonParams.add "bne:servicePath", Me.BneGetServletPath
    commonParams.add "bne:language", Me.BneGetGeneratedLanguage
    commonParams.add "bne:apiVersion", "1.1"
    commonParams.add "bne:requestType", "asynchronous"
    Set integratorParamForm = objHTMLDocument.all("integratorParamForm")
    Set integratorParams = BneExtractParams(integratorParamForm)
    If UCase(objHTMLDocument.all("bne:rows").getAttribute("VALUE")) = "ALL" Then
    m_objVBAUploader.FlaggedRowsOnly = False
    Else
    m_objVBAUploader.FlaggedRowsOnly = True
    End If
    Set m_objVBAUploader.CommonUploadParams = commonParams
    End Sub
    Private Sub BneUploadComplete(ByRef objHTMLDocument As Object)
    Dim commonParamForm As Object
    Dim commonParams As BneVBAParameters
    Dim integratorParams As BneVBAParameters
    m_Browser.removeEventCallBack "BNE:BROWSERCLOSE"
    Set commonParamForm = objHTMLDocument.all("bne:icxId")
    Set commonParams = BneExtractParams(commonParamForm)
    commonParams.add "bne:documentId", Me.BneGetDocumentId
    commonParams.add "bne:language", Me.BneGetGeneratedLanguage
    commonParams.add "bne:servicePath", Me.BneGetServletPath
    m_objVBAUploader.BneUploadComplete
    If m_objVBAUploader.Status = m_objVBAUploader.UPL_ERROR Then
    If GetMsgTypeCount(BNE_ERROR) > 0 Then
    objHTMLDocument.body.innerHTML = BneBrowser.WebBrowser_DocumentComplete_ERROR_MESSAGE
    Else 'Show the standard error page
    objHTMLDocument.body.innerHTML = BneBrowser.WebBrowser_DocumentComplete_ERROR_MESSAGE
    End If
    End If
    Set m_objVBAUploader = Nothing
    Call BneProcessingEnd
    End Sub
    Private Sub BneUploadError(ByRef objHTMLDocument As Object)
    If m_Browser Is Nothing Then
    Else
    Dim oParams As New BneVBAParameters
    Set oParams = BneGetUploadParams()
    If Not m_objVBAUploader Is Nothing Then
    oParams.add "bne:uploadJob", CStr(m_objVBAUploader.JobID)
    End If
    objHTMLDocument.parentWindow.Status = ""
    m_Browser.addEventCallBack "BneUploadError", "ERROR", Me
    m_Browser.NavigatePost APPLICATION_SERVICE, oParams
    End If
    End Sub
    Private Sub BneUploadClose(ByRef objHTMLDocument As Object)
    Set m_objVBAUploader = Nothing
    BneProcessingEnd
    End Sub
    Public Sub RowsToUpload(ByRef FlaggedRows() As Long, Flag

    General
    Stream Path:VBA/ThisWorkbook
    VBA File Name:ThisWorkbook
    Stream Size:6401
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . z . . # . . . . . . . . . . . . . . . . . p . . . w y c C . . u . . . . . . . . . . . . . . . F . . . . . . . . . . . . . . . . . . . . . k H > ) j . . . . . . . . . . . . . . . . . . . . . . x . . . . . k H > ) j w y c C . . u . . . . . M E . . . . . . . . . . . . . . . . . . . . . 0 . . . . . . . . [ L . . . . S . . . . . S . . . . . < < . . . . . > " . . . . . < x . . . . . . < ( . . . . . . L . . . . . . . . . . . . . . . . L .
    Data Raw:01 16 03 00 06 00 01 00 00 12 09 00 00 e4 00 00 00 88 02 00 00 07 0a 00 00 15 0a 00 00 cd 13 00 00 04 00 00 00 01 00 00 00 ce c1 a3 7a 00 00 ff ff 23 00 00 00 88 00 00 00 b6 00 ff ff 01 01 00 00 00 00 ff ff ff ff 00 00 00 00 ff ff 70 00 ff ff 00 00 fc ab 77 fb 79 63 c2 43 83 a9 02 ec 97 14 75 05 19 08 02 00 00 00 00 00 c0 00 00 00 00 00 00 46 00 00 00 00 00 00 00 00 00 00 00 00 00
    Attribute VB_Name = "ThisWorkbook"
    Attribute VB_Base = "0{00020819-0000-0000-C000-000000000046}"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Attribute VB_TemplateDerived = False
    Attribute VB_Customizable = True
    
    Option Explicit
    Option Base 1
    Public Sub Workbook_Open()
    On Error GoTo ErrorHandler
    Dim i As Long
    Dim clsProperties As New BneVBAProperties
    clsProperties.removeProperty "ICX_SESSION_ID"
    AddReferences
    RemoveRibbonProterties
    setShowMainGroup False
    setShowGraphGroup False
    For i = 1 To ActiveWorkbook.Worksheets.count
    On Error Resume Next
    ActiveWorkbook.Worksheets(i).BneStartup
    On Error GoTo 0
    Next
    ThisWorkbook.Saved = True
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Workbook_Open", "Error: " & Err.Number & " " & Err.Description
    End Sub
    Public Sub Workbook_Activate()
    On Error GoTo ErrorHandler
    AddReferences
    If Application.Version <= 14 Then
    ThisWorkbook.ActiveSheet.BneSheetActivate
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Workbook_Activate", "Error: " & Err.Number & " " & Err.Description
    End Sub
    Public Sub Workbook_Deactivate()
    On Error GoTo ErrorHandler
    If Application.Version <= 14 Then
    ThisWorkbook.ActiveSheet.BneRemoveOracleMenu
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Workbook_Deactivate", "Error: " & Err.Number & " " & Err.Description
    End Sub
    Public Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    On Error GoTo ErrorHandler
    g_WorkbookSavedPreviously = ThisWorkbook.Saved
    If g_WorkbookSavedPreviously = False And ThisWorkbook.FileFormat = xlExcel9795 Then
    On Error Resume Next
    Workbooks.Open ThisWorkbook.FullName, False, False, , , , , , , , False, , False
    End If
    Exit Sub
    ErrorHandler:
    AddBneMsg BNE_ERROR, "Workbook_BeforeSave", "Error: " & Err.Number & " " & Err.Description
    End Sub
    Public Sub AddReferences()
    BneAddReference "VBIDE", "{0002E157-0000-0000-C000-000000000046}"
    BneAddReference "MSForms", "{0D452EE1-E08F-101A-852E-02608C4D0BB4}"
    BneAddReference "SHDocVw", "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}"
    BneAddReference "MSHTML", "{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}"
    BneAddReference "Office", "{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}"
    BneAddReference "VBA", "{000204EF-0000-0000-C000-000000000046}"
    BneAddReference "Excel", "{00020813-0000-0000-C000-000000000046}"
    BneAddReference "stdole", "{00020430-0000-0000-C000-000000000046}"
    BneAddReference "Scripting", "{420B2830-E718-11CF-893D-00A0C9054228}"
    If BneGETMSXMLVersion() >= 3 And CInt(Left(Application.Version, (InStr(1, Application.Version & ".", ".") - 1))) >= 9 Then
    BneAddReference "MSXML3", "{F5078F18-C551-11D3-89B9-0000F81FE221}"
    End If
    End Sub
    
    

    General
    Stream Path:BneBrowser/\x1CompObj
    File Type:data
    Stream Size:97
    Entropy:3.6106491830605214
    Base64 Encoded:False
    Data ASCII:. . . . . . . . . . . . . . . . . . . . . . . . . . M i c r o s o f t F o r m s 2 . 0 F o r m . . . . . E m b e d d e d O b j e c t . . . . . 9 q . . . . . . . . . . . .
    Data Raw:01 00 fe ff 03 0a 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 19 00 00 00 4d 69 63 72 6f 73 6f 66 74 20 46 6f 72 6d 73 20 32 2e 30 20 46 6f 72 6d 00 10 00 00 00 45 6d 62 65 64 64 65 64 20 4f 62 6a 65 63 74 00 00 00 00 00 f4 39 b2 71 00 00 00 00 00 00 00 00 00 00 00 00
    General
    Stream Path:BneBrowser/\x3VBFrame
    File Type:ASCII text, with CRLF line terminators
    Stream Size:267
    Entropy:4.622413768691745
    Base64 Encoded:True
    Data ASCII:V E R S I O N 5 . 0 0 . . B e g i n { C 6 2 A 6 9 F 0 - 1 6 D C - 1 1 C E - 9 E 9 8 - 0 0 A A 0 0 5 7 4 A 4 F } B n e B r o w s e r . . C a p t i o n = " U s e r F o r m 1 " . . C l i e n t H e i g h t = 3 0 1 5 . . C l i e n t L e f t = 1 2 0 . . C l i e n t T o p = 4 6 5 . . C l i e n t W i d t h = 4 5 6 0 . . S t a r t U p P o s i t i o n = 1 ' C e n t e r O
    Data Raw:56 45 52 53 49 4f 4e 20 35 2e 30 30 0d 0a 42 65 67 69 6e 20 7b 43 36 32 41 36 39 46 30 2d 31 36 44 43 2d 31 31 43 45 2d 39 45 39 38 2d 30 30 41 41 30 30 35 37 34 41 34 46 7d 20 42 6e 65 42 72 6f 77 73 65 72 20 0d 0a 20 20 20 43 61 70 74 69 6f 6e 20 20 20 20 20 20 20 20 20 3d 20 20 20 22 55 73 65 72 46 6f 72 6d 31 22 0d 0a 20 20 20 43 6c 69 65 6e 74 48 65 69 67 68 74 20 20 20 20 3d
    General
    Stream Path:BneBrowser/f
    File Type:data
    Stream Size:38
    Entropy:1.540520964530438
    Base64 Encoded:False
    Data ASCII:. . . . . . . . . } . . k . . . . . . . . . . . . . . . . . . . . . . . .
    Data Raw:00 04 18 00 00 0c 00 08 00 7d 00 00 6b 1f 00 00 c6 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    General
    Stream Path:BneBrowser/o
    File Type:empty
    Stream Size:0
    Entropy:0.0
    Base64 Encoded:False
    Data ASCII:
    Data Raw:
    General
    Stream Path:PROJECT
    File Type:ASCII text, with CRLF line terminators
    Stream Size:2767
    Entropy:5.309273945781996
    Base64 Encoded:True
    Data ASCII:I D = " { 2 3 0 C D 3 5 1 - F 2 5 A - 4 6 1 3 - 9 0 0 6 - 6 6 B F 9 4 0 C F 3 2 6 } " . . M o d u l e = M o d u l e 1 . . D o c u m e n t = T h i s W o r k b o o k / & H 0 0 0 0 0 0 0 0 . . D o c u m e n t = S h e e t 1 / & H 0 0 0 0 0 0 0 0 . . M o d u l e = b n e R i b b o n U t i l s . . C l a s s = B n e R i b b o n . . C l a s s = B n e I m a g e P r o p e r t y . . C l a s s = B n e V B A P a r a m e t e r s . . C l a s s = B n e V B A P a r a m e t e r . . C l a s s = B n e V B A M e s s a g e s . .
    Data Raw:49 44 3d 22 7b 32 33 30 43 44 33 35 31 2d 46 32 35 41 2d 34 36 31 33 2d 39 30 30 36 2d 36 36 42 46 39 34 30 43 46 33 32 36 7d 22 0d 0a 4d 6f 64 75 6c 65 3d 4d 6f 64 75 6c 65 31 0d 0a 44 6f 63 75 6d 65 6e 74 3d 54 68 69 73 57 6f 72 6b 62 6f 6f 6b 2f 26 48 30 30 30 30 30 30 30 30 0d 0a 44 6f 63 75 6d 65 6e 74 3d 53 68 65 65 74 31 2f 26 48 30 30 30 30 30 30 30 30 0d 0a 4d 6f 64 75 6c
    General
    Stream Path:PROJECTwm
    File Type:data
    Stream Size:1733
    Entropy:3.861642820218946
    Base64 Encoded:False
    Data ASCII:M o d u l e 1 . M . o . d . u . l . e . 1 . . . T h i s W o r k b o o k . T . h . i . s . W . o . r . k . b . o . o . k . . . S h e e t 1 . S . h . e . e . t . 1 . . . b n e R i b b o n U t i l s . b . n . e . R . i . b . b . o . n . U . t . i . l . s . . . B n e R i b b o n . B . n . e . R . i . b . b . o . n . . . B n e I m a g e P r o p e r t y . B . n . e . I . m . a . g . e . P . r . o . p . e . r . t . y . . . B n e V B A P a r a m e t e r s . B . n . e . V . B . A . P . a . r . a . m . e . t . e . r
    Data Raw:4d 6f 64 75 6c 65 31 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 31 00 00 00 54 68 69 73 57 6f 72 6b 62 6f 6f 6b 00 54 00 68 00 69 00 73 00 57 00 6f 00 72 00 6b 00 62 00 6f 00 6f 00 6b 00 00 00 53 68 65 65 74 31 00 53 00 68 00 65 00 65 00 74 00 31 00 00 00 62 6e 65 52 69 62 62 6f 6e 55 74 69 6c 73 00 62 00 6e 00 65 00 52 00 69 00 62 00 62 00 6f 00 6e 00 55 00 74 00 69 00 6c 00 73 00 00
    General
    Stream Path:VBA/_VBA_PROJECT
    File Type:data
    Stream Size:52698
    Entropy:5.902973840162091
    Base64 Encoded:True
    Data ASCII:a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * . \\ . G . { . 0 . 0 . 0 . 2 . 0 . 4 . E . F . - . 0 . 0 . 0 . 0 . - . 0 . 0 . 0 . 0 . - . C . 0 . 0 . 0 . - . 0 . 0 . 0 . 0 . 0 . 0 . 0 . 0 . 0 . 0 . 4 . 6 . } . # . 4 . . . 2 . # . 9 . # . C . : . \\ . P . r . o . g . r . a . m . . F . i . l . e . s . \\ . C . o . m . m . o . n . . F . i . l . e . s . \\ . M . i . c . r . o . s . o . f . t . . S . h . a . r . e . d . \\ . V . B . A . \\ . V . B . A . 7 . . . 1 . \\ . V . B . E . 7 . . . D .
    Data Raw:cc 61 b5 00 00 03 00 ff 10 04 00 00 09 04 00 00 e4 04 03 00 00 00 00 00 00 00 00 00 01 00 0a 00 02 00 20 01 2a 00 5c 00 47 00 7b 00 30 00 30 00 30 00 32 00 30 00 34 00 45 00 46 00 2d 00 30 00 30 00 30 00 30 00 2d 00 30 00 30 00 30 00 30 00 2d 00 43 00 30 00 30 00 30 00 2d 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 30 00 34 00 36 00 7d 00 23 00 34 00 2e 00 32 00 23 00
    General
    Stream Path:VBA/__SRP_0
    File Type:data
    Stream Size:47252
    Entropy:3.8876002302617514
    Base64 Encoded:False
    Data ASCII:K * . . @ . . . . . . . . . . . . . . . . . . . $ . . . . . . . . . $ . . . . . . . . . . . . . # . . . . . . . . . # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " . . . . . . . . . " . . . . . . . . . . . . .
    Data Raw:93 4b 2a b5 03 00 40 00 00 00 ff ff 00 00 00 00 01 00 02 00 ff ff 00 00 00 00 01 00 02 00 24 00 00 00 00 00 01 00 00 00 24 00 00 00 00 00 01 00 05 00 07 00 02 00 23 00 00 00 00 00 01 00 00 00 23 00 00 00 00 00 01 00 02 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 01 00 05 00 07 00 02 00 17 00 00 00 00 00 01 00 00 00 17 00 00 00 00 00 01 00 02 00 08 00 00 00 00 00 01 00 00 00
    General
    Stream Path:VBA/__SRP_1
    File Type:DIY-Thermocam raw data (Lepton 2.x), scale 0-0, spot sensor temperature 0.000000, unit celsius, color scheme 0, calibration: offset 1102192958404145709056.000000, slope 4650884401323386207993501799415808.000000
    Stream Size:9708
    Entropy:3.600016722652788
    Base64 Encoded:False
    Data ASCII:r U . . . . . . . . @ . . . . . . . @ . . . . . . . @ . . . . . . . . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ . . . . . . . ~ N . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Data Raw:72 55 00 04 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00 00 7e 02 00 00 00 00 00
    General
    Stream Path:VBA/__SRP_10
    File Type:data
    Stream Size:930
    Entropy:2.494007581648503
    Base64 Encoded:False
    Data ASCII:r U @ . . . . . . . . . . . . . . . @ . . . . . . . @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 . . . . . . . . . . . . . . . ` . . X . . . . . . . . . . . . . 8 . ! . . . . . . . . . . . . . . ` . . ` . . . . . . . . . . . . H . . . . . . . . . . . . . . . . ` . . h . . . . . ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . ' . . . . . . . . . . . . . . . . ` . . 9 . . . . . ' . . . . . . . . . . # . . . . . . . . . . . ( . . . . . . . . . . A ( .
    Data Raw:72 55 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 11 00 ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 98 00 00 00 08 00 38 00 e1 01 00 00 00 00 00 00 00 00 11 00 01 00 03 60 00 00 58 00 18 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00
    General
    Stream Path:VBA/__SRP_11
    File Type:data
    Stream Size:1800
    Entropy:1.8845821625798789
    Base64 Encoded:False
    Data ASCII:r U . . . . . . . . . . . . . . . @ . . . . . . . @ . . . . . . . . . . . . . . . 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ! B . . . . . . . . . . . . . . . . . . . . . Q B . . . . . . . . . . q . . . . . . . . . . . @ . . . . . . 1 . . . . . . . . . . . A . . . . . . . . . . . a . . . . . . . . . . . i . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i . . . . . . . . . . . I . . . . . . . . . .
    Data Raw:72 55 80 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 10 00 90 15 00 00 00 00 00 00 00 00 00 00 0a 00 0a 00 00 00 00 00 01 00 01 00 00 00 01 00 21 42 01 00 00 00 00 00 00 00 00 00 d1 18 00 00 00 00 00 00 00 00 00 00 51 42
    No network behavior found

    Click to jump to process

    Click to jump to process

    Click to dive into process behavior distribution

    Target ID:0
    Start time:06:38:17
    Start date:31/10/2022
    Path:C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
    Wow64 process (32bit):true
    Commandline:"C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE" /automation -Embedding
    Imagebase:0x11b0000
    File size:27110184 bytes
    MD5 hash:5D6638F2C8F8571C593999C58866007E
    Has elevated privileges:true
    Has administrator privileges:true
    Programmed in:C, C++ or other language
    Reputation:high

    No disassembly