85829efd1d
WARNING! Do not assume the Excel file in this repo matches the VBA in the repo. The decision was made to use Teams for managing changes to the Excel tamplate because Git is ill-suited for binary files. The Excel file will be updated from time to time, but only when something major happens with the application as a whole. 1. Use the sheets' codenames to refer to them in code. This prevents breakage if the user changes the sheet name while working with the workbook. 2. Give the pivot tables proper, if not descriptive, names. 3. Simplify the code that detects a double-click in the pivot table. 4. Remove Windows_API as it was not being used. 5. Pare down TheBigOne to just the essential functions in Utils. 6. Refer to the data sources for the userforms' listboxes by using the worksheet.ListObjects collection.
115 lines
2.7 KiB
OpenEdge ABL
115 lines
2.7 KiB
OpenEdge ABL
VERSION 1.0 CLASS
|
|
BEGIN
|
|
MultiUse = -1 'True
|
|
END
|
|
Attribute VB_Name = "shOrders"
|
|
Attribute VB_GlobalNameSpace = False
|
|
Attribute VB_Creatable = False
|
|
Attribute VB_PredeclaredId = True
|
|
Attribute VB_Exposed = True
|
|
Option Explicit
|
|
|
|
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
|
|
Dim pt As PivotTable
|
|
Set pt = ActiveSheet.PivotTables("ptOrders")
|
|
|
|
Dim intersec As Range
|
|
Set intersec = Intersect(Target, pt.DataBodyRange)
|
|
|
|
If intersec Is Nothing Then
|
|
Exit Sub
|
|
ElseIf intersec.address <> Target.address Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Cancel = True
|
|
|
|
Dim i As Long
|
|
Dim j As Long
|
|
Dim k As Long
|
|
|
|
Dim ri As PivotItemList
|
|
Dim ci As PivotItemList
|
|
Dim df As Object
|
|
Dim rd As Object
|
|
Dim cd As Object
|
|
Dim dd As Object
|
|
|
|
Dim pf As PivotField
|
|
Dim pi As PivotItem
|
|
|
|
Set ri = Target.Cells.PivotCell.RowItems
|
|
Set ci = Target.Cells.PivotCell.ColumnItems
|
|
Set df = Target.Cells.PivotCell.DataField
|
|
|
|
Set rd = Target.Cells.PivotTable.RowFields
|
|
Set cd = Target.Cells.PivotTable.ColumnFields
|
|
|
|
ReDim handler.sc(ri.Count, 1)
|
|
|
|
handler.sql = ""
|
|
handler.jsql = ""
|
|
|
|
For i = 1 To ri.Count
|
|
If i <> 1 Then handler.sql = handler.sql & vbCrLf & "AND "
|
|
If i <> 1 Then handler.jsql = handler.jsql & vbCrLf & ","
|
|
handler.sql = handler.sql & rd(piv_pos(rd, i)).Name & " = '" & escape_sql(ri(i).Name) & "'"
|
|
jsql = jsql & """" & rd(piv_pos(rd, i)).Name & """:""" & escape_json(ri(i).Name) & """"
|
|
handler.sc(i - 1, 0) = rd(piv_pos(rd, i)).Name
|
|
handler.sc(i - 1, 1) = ri(i).Name
|
|
Next i
|
|
|
|
scenario = "{" & handler.jsql & "}"
|
|
|
|
Call handler.load_config
|
|
Call handler.load_fpvt
|
|
|
|
End Sub
|
|
|
|
Function piv_pos(list As Object, target_pos As Long) As Long
|
|
|
|
Dim i As Long
|
|
|
|
For i = 1 To list.Count
|
|
If list(i).Position = target_pos Then
|
|
piv_pos = i
|
|
Exit Function
|
|
End If
|
|
Next i
|
|
'should not get to this point
|
|
|
|
End Function
|
|
|
|
Function piv_fld_index(field_name As String, ByRef pt As PivotTable) As Integer
|
|
|
|
Dim i As Integer
|
|
|
|
For i = 1 To pt.PivotFields.Count
|
|
If pt.PivotFields(i).Name = field_name Then
|
|
piv_fld_index = i
|
|
Exit Function
|
|
End If
|
|
Next i
|
|
|
|
End Function
|
|
|
|
Function escape_json(ByVal text As String) As String
|
|
|
|
text = Replace(text, "'", "''")
|
|
text = Replace(text, """", "\""")
|
|
If text = "(blank)" Then text = ""
|
|
escape_json = text
|
|
|
|
End Function
|
|
|
|
Function escape_sql(ByVal text As String) As String
|
|
|
|
text = Replace(text, "'", "''")
|
|
text = Replace(text, """", """""")
|
|
If text = "(blank)" Then text = ""
|
|
escape_sql = text
|
|
|
|
End Function
|
|
|
|
|