VBA/FL.bas
2018-05-25 11:27:02 -04:00

676 lines
15 KiB
QBasic

Option Explicit
Public x As New TheBigOne
Sub Determine_Active_Range()
Dim r As range
Dim s As String
Dim cell As range
Set r = Selection
MsgBox (r.Address)
For Each cell In r.Cells
s = s & cell.value
Next cell
MsgBox (s)
End Sub
Sub Cross_Join_Selection()
Dim x As New TheBigOne
Dim r As range
Dim ar As range
Dim r1() As String
Dim r2() As String
Dim d() As String
Dim i As Integer
Dim dest As String
Set r = Selection
i = 1
For Each ar In r.Areas
If i = 1 Then
r1 = x.SHTp_Get(Excel.ActiveSheet.Name, ar.row, ar.column, False)
Else
r2 = x.SHTp_Get(Excel.ActiveSheet.Name, ar.row, ar.column, False)
r1 = x.TBLp_CrossJoin(r1, r2, True)
End If
i = i + 1
Next ar
dest = InputBox("Input row & column numbers like ""3,17""")
If dest = "" Then
Exit Sub
Else
d = Split(dest, ",")
End If
Call x.SHTp_Dump(r1, Excel.ActiveSheet.Name, CLng(d(0)), CLng(d(1)), False, True)
End Sub
Sub BackupPersonal()
Application.DisplayAlerts = False
With Workbooks("Personal.xlsb")
.SaveCopyAs Workbooks("Personal.xlsb").Sheets("CONST").Cells(1, 2)
.Save
End With
Application.DisplayAlerts = True
End Sub
Sub ExtractPNC_CSV()
Dim x As New TheBigOne
Dim f() As String
Dim col() As String
Dim coli As Long
Dim bal() As String
Dim bali As Long
Dim sched_loan As String
Dim P As FileDialog
Dim i As Long
Dim j As Long
Dim m As Long
Dim k As Long
Dim row() As String
Dim commit As Integer
Dim oblig As Integer
Dim sched As Integer
Dim loan As Integer
Dim wb As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
'--------Open file-------------
Set P = Application.FileDialog(msoFileDialogOpen)
P.Show
'--------Extract text----------
f = x.FILEp_GetTXT(P.SelectedItems(1), 2000)
'--------resize arrays---------
ReDim col(11, UBound(f, 2))
ReDim bal(8, UBound(f, 2))
coli = 1
bali = 1
j = 1
m = 1
'--------main interation-------
For i = 0 To UBound(f, 2)
sched = InStr(f(0, i), "Schedule")
loan = InStr(f(0, i), "Loan")
If sched <> 0 Then
row = x.TXTp_ParseCSVrow(f, i + 2, 0)
col(0, 0) = "Schedule#"
For k = 0 To 10
col(k + 1, 0) = row(k)
Next k
sched_loan = x.TXTp_ParseCSVrow(f, i + 1, 0)(0)
i = i + 3
commit = 0
oblig = 0
Do Until commit <> 0 Or oblig <> 0
row = x.TXTp_ParseCSVrow(f, i, 0)
col(0, j) = sched_loan
For k = 0 To 10
col(k + 1, j) = row(k)
Next k
j = j + 1
i = i + 1
commit = InStr(f(0, i), "Commitment")
oblig = InStr(f(0, i), "Oblig")
'---or end of file-----
Loop
sched = 0
ElseIf loan <> 0 Then
row = x.TXTp_ParseCSVrow(f, i + 2, 0)
bal(0, 0) = "Loan#"
For k = 0 To 7
bal(k + 1, 0) = row(k)
Next k
sched_loan = x.TXTp_ParseCSVrow(f, i + 1, 0)(0)
i = i + 3
commit = 0
oblig = 0
Do Until commit <> 0 Or oblig <> 0
row = x.TXTp_ParseCSVrow(f, i, 0)
bal(0, m) = sched_loan
For k = 0 To 7
bal(k + 1, m) = row(k)
Next k
m = m + 1
i = i + 1
If i > UBound(f, 2) Then Exit Do
If f(0, i) = "" Then Exit Do
commit = InStr(f(0, i), "Commitment")
oblig = InStr(f(0, i), "Oblig")
'---or end of file-----
Loop
sched = 0
loan = 0
End If
Next i
ReDim Preserve col(11, j - 2)
ReDim Preserve bal(8, m - 1)
' Set wb = Workbooks.Add
' wb.Sheets.Add
' Set sh1 = wb.Sheets("Sheet1")
' Set sh2 = wb.Sheets("Sheet2")
' sh1.Name = "Collateral"
' sh2.Name = "Balance"
If Not x.FILEp_CreateCSV(Mid(P.SelectedItems(1), 1, Len(P.SelectedItems(1)) - 4) & "col.csv", col) Then
MsgBox ("error")
End If
If Not x.FILEp_CreateCSV(Mid(P.SelectedItems(1), 1, Len(P.SelectedItems(1)) - 4) & "bal.csv", bal) Then
MsgBox ("error")
End If
' Call x.SHTp_Dump(col, sh1.Name, 1, 1, True, True, 1, 4, 5, 6, 7, 8, 9, 10, 11)
' Call x.SHTp_Dump(bal, sh2.Name, 1, 1, True, True, 1, 2, 5, 6, 7, 8)
'
' sh1.range("A1").CurrentRegion.Columns.AutoFit
' sh2.range("A2").CurrentRegion.Columns.AutoFit
'
' If Not x.FILEp_CreateCSV("C:\users\ptrowbridge\downloads\col.csv", col) Then
' MsgBox ("error")
' End If
End Sub
Sub GrabBorrowHist()
Dim sh As Worksheet
Dim x As New TheBigOne
Dim i As Long
Dim b() As String
Set sh = Application.ActiveSheet
b = x.SHTp_Get(sh.Name, 3, 1, True)
Call x.TBLp_FilterSingle(b, 14, "", False)
Call x.TBLp_DeleteCols(b, x.ARRAYp_MakeInteger(6, 7, 8, 9, 10, 11, 12, 13))
Call x.TBLp_AddEmptyCol(b)
Call x.TBLp_AddEmptyCol(b)
For i = 1 To UBound(b, 2)
b(9, i) = ActiveSheet.Name
b(10, i) = ActiveWorkbook.Name
Next i
b(9, 0) = "Tab"
b(10, 0) = "File"
Application.Workbooks("PERSONAL.XLSB").Activate
Set sh = Application.Workbooks("PERSONAL.XLSB").Sheets("BORROW")
i = 1
Do Until sh.Cells(i, 1) = ""
i = i + 1
Loop
Call x.SHTp_Dump(b, "BORROW", i, 1, False, True)
End Sub
Function fn_coln_colchar(colnum As Long) As String
fn_coln_colchar = colnum / 26
End Function
Sub add_quote_front()
Dim r As range
Set r = Selection
Dim c As Object
For Each c In r.Cells
If c.value <> "" Then c.value = "'" & c.value
Next c
End Sub
Function json_from_list(keys As range, values As range) As String
Dim json As String
Dim i As Integer
Dim first_comma As Boolean
Dim needs_braces As Integer
needs_comma = False
needs_braces = 0
For i = 1 To keys.Cells.Count
If values.Cells(i).value <> "" Then
needs_braces = needs_braces + 1
If needs_comma Then json = json & ","
needs_comma = True
If IsNumeric(values.Cells(i).value) Then
json = json & Chr(34) & keys.Cells(i).value & Chr(34) & ":" & values.Cells(i).value
Else
json = json & Chr(34) & keys.Cells(i).value & Chr(34) & ":" & Chr(34) & values.Cells(i).value & Chr(34)
End If
End If
Next i
If needs_braces > 0 Then json = "{" & json & "}"
json_from_list = json
End Function
Function json_concat(list As range) As String
Dim json As String
Dim i As Integer
i = 0
For Each cell In list
If cell.value <> "" Then
i = i + 1
If i = 1 Then
json = cell.value
Else
json = json & "," & cell.value
End If
End If
Next cell
If i > 1 Then json = "[" & json & "]"
json_concat = json
End Function
Sub json_from_table_pretty()
Dim wapi As New Windows_API
Dim x As New TheBigOne
Dim tbl() As Variant
tbl = Selection
Dim ajson As String
Dim json As String
Dim r As Integer
Dim c As Integer
Dim needs_comma As Boolean
Dim needs_braces As Integer
needs_comma = False
needs_braces = 0
ajson = ""
For r = 2 To UBound(tbl, 1)
For c = 1 To UBound(tbl, 2)
If tbl(r, c) <> "" Then
needs_braces = needs_braces + 1
If needs_comma Then json = json & "," & vbCrLf
needs_comma = True
If IsNumeric(tbl(r, c)) Then
json = json & Chr(34) & tbl(1, c) & Chr(34) & ":" & tbl(r, c)
Else
json = json & Chr(34) & tbl(1, c) & Chr(34) & ":" & Chr(34) & tbl(r, c) & Chr(34)
End If
End If
Next c
If needs_braces > 0 Then json = "{" & vbCrLf & json & vbCrLf & "}"
needs_comma = False
needs_braces = 0
If r > 2 Then
ajson = ajson & vbCrLf & "," & vbCrLf & json
Else
ajson = json
End If
json = ""
Next r
If r > 2 Then ajson = "[" & ajson & "]"
Call wapi.ClipBoard_SetData(ajson)
End Sub
Sub json_from_table()
Dim wapi As New Windows_API
Dim x As New TheBigOne
Dim tbl() As Variant
tbl = Selection
Call wapi.ClipBoard_SetData(x.json_from_table(tbl, "y", False))
End Sub
Sub PastValues()
On Error GoTo errh
Call Selection.PasteSpecial(xlPasteValues, xlNone, False, False)
errh:
End Sub
Sub CollapsePvtItem()
On Error GoTo show_det
ActiveCell.PivotItem.DrilledDown = False
On Error GoTo drill_down
ActiveCell.PivotItem.ShowDetail = False
show_det:
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotItem.ShowDetail = False
Err.Number = 0
End If
drill_down:
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotItem.DrilledDown = False
End If
errh:
End Sub
Sub ExpandPvtItem()
On Error GoTo show_det
ActiveCell.PivotItem.DrilledDown = True
On Error GoTo drill_down
ActiveCell.PivotItem.ShowDetail = True
show_det:
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotItem.ShowDetail = True
Err.Number = 0
End If
drill_down:
On Error GoTo errh
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotItem.DrilledDown = True
End If
errh:
End Sub
Sub CollapsePvtFld()
On Error GoTo show_det
ActiveCell.PivotField.DrilledDown = False
On Error GoTo drill_down
ActiveCell.PivotField.ShowDetail = False
show_det:
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotField.ShowDetail = False
Err.Number = 0
End If
drill_down:
On Error GoTo errh
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotField.DrilledDown = False
End If
errh:
End Sub
Sub ExpandPvtFld()
On Error GoTo show_det
ActiveCell.PivotField.DrilledDown = True
On Error GoTo drill_down
ActiveCell.PivotField.ShowDetail = True
show_det:
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotField.ShowDetail = True
Err.Number = 0
End If
drill_down:
If Err.Number <> 0 Then
On Error GoTo errh
ActiveCell.PivotField.DrilledDown = True
End If
errh:
End Sub
Sub ColorMatrixExtract()
Dim s() As String
Dim t() As String
Dim i As Long
Dim j As Long
Dim k As Long
Dim m As Long
Dim sh As Worksheet
Dim found As Boolean
ReDim s(1, 10000)
For Each sh In Sheets
If sh.Name = "Color Matrix" Then found = True
Next sh
If Not found Then Exit Sub
Set sh = Sheets("Color Matrix")
If sh.Cells(5, 1) <> "BASE WHITE" Then Exit Sub
m = 1
i = 1
s(0, 0) = "COLOR ID"
s(1, 0) = "DESCRIPTION"
Do
If sh.Cells(6, i) = "COLOR ID" Then
j = 1
Do Until sh.Cells(6, i + j) = "DESCRIPTION"
j = j + 1
Loop
k = 7
Do Until sh.Cells(k, i) = ""
s(0, m) = sh.Cells(k, i)
s(1, m) = sh.Cells(k, i + j)
k = k + 1
m = m + 1
Loop
End If
i = i + 1
If i = 500 Then Exit Do
Loop
ReDim Preserve s(1, m - 1)
Call x.SHTp_Dump(s, "Extract", 1, 1, True, True)
End Sub
Sub SetPivotShortcutKeys()
Call Application.MacroOptions("PERSONAL.xlsb!CollapsePvtFld", "", , , , "A")
Call Application.MacroOptions("PERSONAL.xlsb!CollapsePvtItem", "", , , , "Z")
Call Application.MacroOptions("PERSONAL.xlsb!ExpandPvtFld", "", , , , "S")
Call Application.MacroOptions("PERSONAL.xlsb!ExpandPvtItem", "", , , , "X")
End Sub
Sub LoadChan()
'if not x.ADOp_OpenCon(0,
End Sub
Sub markdown_from_table()
Dim x As New TheBigOne
Dim wapi As New Windows_API
Dim tbl() As Variant
tbl = Selection
Call wapi.ClipBoard_SetData(x.markdown_from_table(tbl))
End Sub
Sub json_multirange()
Dim wapi As New Windows_API
Dim x As New TheBigOne
Call wapi.ClipBoard_SetData(x.json_multirange(Selection))
End Sub
Sub markdown_whole_sheet()
Dim x As New TheBigOne
Dim wapi As New Windows_API
Call wapi.ClipBoard_SetData(x.markdown_whole_sheet(ActiveSheet))
End Sub
Sub sql_from_range()
Dim x As New TheBigOne
Dim wapi As New Windows_API
Dim r() As String
Call wapi.ClipBoard_SetData(x.SQLp_build_sql_values(x.ARRAYp_get_range_string(Selection), True, True, Db2))
End Sub
Sub auto_fit_range()
Selection.CurrentRegion.Columns.AutoFit
End Sub
Sub pivot_field_format()
ActiveSheet.PivotTables(1).PivotFields(ActiveCell.value).NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""_);_(@_)"
End Sub
Sub Write_selection()
Dim P As FileDialog
'--------Open file-------------
Set P = Application.FileDialog(msoFileDialogSaveAs)
P.Show
Call x.FILEp_CreateTXT(P.SelectedItems(1), x.SHTp_Get(ActiveSheet.Name, Selection.row, Selection.column, False))
End Sub
Sub dump_markdown()
Dim path As String
Dim s As Worksheet
Dim x As New TheBigOne
Dim wapi As New Windows_API
path = ActiveWorkbook.path & "\" & Mid(ActiveWorkbook.Name, 1, InStr(1, ActiveWorkbook.Name, ".xl")) & "md"
For Each s In ActiveWorkbook.Worksheets
Call wapi.ClipBoard_SetData(x.markdown_whole_sheet(s))
Next s
End Sub
Sub test()
Dim c As New WindCrypt
c.Password = "hi"
c.InBuffer = "test"
Call c.Validate
End Sub
Sub split_forecast_data()
Application.EnableCancelKey = xlDisabled
Dim wb As Workbook
Dim ws As Worksheet
Dim d() As String
Dim u() As String
Dim f() As String
Dim i As Long
d = x.SHTp_Get("Data", 1, 1, True)
u = d
Call x.TBLp_Aggregate(u, False, True, True, Array(1), Array("S"), Array(5, 6, 7, 8))
For i = 1 To UBound(u, 2)
Call Sheets("TEMPLATE").Copy(Sheets(i))
Set ws = Sheets(i)
ws.Name = Left(RTrim(u(0, i)), 20)
f = d
Call x.TBLp_FilterSingle(f, 1, u(0, i), True)
Call x.SHTp_Dump(f, ws.Name, 3, 12, False, True, 16, 17, 18, 19)
Next i
End Sub