From 245fac3efc496202e0f71a40e21dda4841fed09d Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Sat, 28 Feb 2026 22:09:46 +0300 Subject: [PATCH] Add Marathon Bet live stats VBA scraper - MarathonStats.bas: VBA module that fetches live sports data from marathonbet.by using curl (handles gzip compression), parses HTML for team names, scores, odds, and outputs to formatted Excel sheet - RunMarathon.ps1: PowerShell launcher to automate Excel macro execution - MarathonStats.xlsm: Pre-built workbook with sample output Co-Authored-By: Claude Opus 4.6 --- .gitignore | 15 + MarathonStats.bas | 662 +++++++++++++++++++++++++++++++++++++++++++++ MarathonStats.xlsm | Bin 0 -> 53337 bytes RunMarathon.ps1 | 47 ++++ 4 files changed, 724 insertions(+) create mode 100644 .gitignore create mode 100644 MarathonStats.bas create mode 100644 MarathonStats.xlsm create mode 100644 RunMarathon.ps1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dff7cd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Temp/helper scripts +FindOffice.ps1 +QuickTest.ps1 +TestConnections.ps1 +FetchPage.ps1 +DiagnoseHTTP.ps1 +CheckOutput.ps1 +VerifyData.ps1 +RunAndVerify.ps1 + +# Page dumps +page_dump.html + +# Excel temp files +~$*.xls* diff --git a/MarathonStats.bas b/MarathonStats.bas new file mode 100644 index 0000000..ed327e4 --- /dev/null +++ b/MarathonStats.bas @@ -0,0 +1,662 @@ +Attribute VB_Name = "MarathonStats" +'========================================================================== +' MarathonStats Module +' +' Fetches live sports statistics from Marathon Bet (BY) and outputs +' results to a well-formatted Excel worksheet. +' +' URL: https://www.marathonbet.by/su/live/45356 +' Usage: Run macro "FetchMarathonStats" from Excel (Alt+F8) +' +' Fetch method: curl.exe (handles gzip and bypasses server restrictions) +' Parse method: InStr-based HTML parsing targeting Marathon's DOM markers +'========================================================================== +Option Explicit + +' --------------------------------------------------------------------------- +' Configuration +' --------------------------------------------------------------------------- +Private Const PAGE_URL As String = "https://www.marathonbet.by/su/live/45356" +Private Const WS_NAME As String = "LiveStats" +Private Const DATA_START_ROW As Long = 6 +Private Const NUM_COLS As Long = 8 + +' --------------------------------------------------------------------------- +' Color palette (Long = BGR) +' --------------------------------------------------------------------------- +Private Const CLR_TITLE_BG As Long = 7360544 ' dark teal +Private Const CLR_HDR_BG As Long = 10053171 ' medium blue-gray +Private Const CLR_SPORT_BG As Long = 14994616 ' light steel blue +Private Const CLR_ALT_ROW As Long = 15790320 ' very light gray +Private Const CLR_WHITE As Long = 16777215 +Private Const CLR_BORDER As Long = 12566463 ' medium gray + +' --------------------------------------------------------------------------- +' Event data structure +' --------------------------------------------------------------------------- +Private Type TEvent + League As String + Team1 As String + Team2 As String + Score As String + MatchTime As String + Odds1 As String + Odds2 As String +End Type + +Private m_Events() As TEvent +Private m_Count As Long +Private m_Sport As String + +' =========================================================================== +' PUBLIC: Main entry point +' =========================================================================== +Public Sub FetchMarathonStats() + On Error GoTo Fail + + Application.ScreenUpdating = False + Application.Cursor = xlWait + m_Count = 0 + m_Sport = "" + + Dim ws As Worksheet + Set ws = SetupSheet() + + ' --- Fetch HTML via curl --- + Application.StatusBar = "Fetching page with curl..." + Dim html As String + html = FetchWithCurl() + + If Len(html) < 200 Then + ws.Range("A" & DATA_START_ROW).Value = _ + "Failed to fetch page. Ensure curl.exe is available and internet is connected." + ws.Range("A" & DATA_START_ROW).Font.Italic = True + Application.StatusBar = False + MsgBox "Could not retrieve page content." & vbCrLf & _ + "Verify curl.exe is in PATH and network is available.", _ + vbCritical, "Fetch Error" + GoTo Done + End If + + ' --- Parse HTML --- + Application.StatusBar = "Parsing events..." + ParseHTML html + + ' --- Write results --- + If m_Count > 0 Then + Application.StatusBar = "Formatting output..." + WriteStructuredData ws + FormatDataSheet ws + ws.Activate: ws.Range("A1").Select + Application.StatusBar = False + MsgBox m_Count & " events loaded." & vbCrLf & _ + "(" & m_Count & " " & ChrW(1089) & ChrW(1086) & ChrW(1073) & _ + ChrW(1099) & ChrW(1090) & ChrW(1080) & ChrW(1081) & ")", _ + vbInformation, "Marathon Stats" + Else + WriteTitle ws + ws.Range("A" & DATA_START_ROW).Value = _ + "No live events found on page. Try again when live games are active." + ws.Range("A" & DATA_START_ROW).Font.Italic = True + Application.StatusBar = False + MsgBox "No live events found.", vbExclamation, "Marathon Stats" + End If + + GoTo Done + +Fail: + MsgBox "Error #" & Err.Number & ": " & Err.Description, vbCritical, "Error" +Done: + On Error Resume Next + Application.Cursor = xlDefault + Application.StatusBar = False + Application.ScreenUpdating = True +End Sub + +' =========================================================================== +' FETCH: Use curl.exe to download page HTML +' =========================================================================== +Private Function FetchWithCurl() As String + On Error GoTo CurlFail + + Dim tempFile As String + tempFile = Environ("TEMP") & "\marathon_live_page.html" + + ' Build curl command with browser-like headers + Dim cmd As String + cmd = "cmd /c curl.exe -s -L -k --compressed --max-time 20 " & _ + "-H ""User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) " & _ + "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"" " & _ + "-H ""Accept-Language: ru-RU,ru;q=0.9"" " & _ + "-H ""Accept: text/html,application/xhtml+xml"" " & _ + """" & PAGE_URL & """ > """ & tempFile & """" + + ' Execute synchronously + Dim wsh As Object + Set wsh = CreateObject("WScript.Shell") + wsh.Run cmd, 0, True ' 0=hidden, True=wait + + ' Verify file exists and has content + Dim fso As Object + Set fso = CreateObject("Scripting.FileSystemObject") + If Not fso.FileExists(tempFile) Then GoTo CurlFail + If fso.GetFile(tempFile).Size < 100 Then GoTo CurlFail + + ' Read file as UTF-8 (for Russian text) + Dim stream As Object + Set stream = CreateObject("ADODB.Stream") + With stream + .Type = 2 ' text + .Charset = "UTF-8" + .Open + .LoadFromFile tempFile + FetchWithCurl = .ReadText + .Close + End With + + ' Clean up temp file + On Error Resume Next + fso.DeleteFile tempFile + On Error GoTo 0 + Exit Function + +CurlFail: + FetchWithCurl = "" +End Function + +' =========================================================================== +' PARSE: Extract events from Marathon HTML +' =========================================================================== +Private Sub ParseHTML(html As String) + ' Detect sport type from data-sport-type attribute + m_Sport = DetectSport(html) + + ' Sequential scan through HTML for known markers + Dim pos As Long + Dim curLeague As String + Dim curScore As String + Dim curTime As String + + pos = 1 + curLeague = "" + curScore = "" + curTime = "" + + Do + ' Find the next occurrence of each marker + Dim posLabel As Long: posLabel = InStr(pos, html, "category-label simple-live") + Dim posScore As Long: posScore = InStr(pos, html, "cl-left red") + Dim posTeam As Long: posTeam = InStr(pos, html, "data-member-link=""true"">") + + ' Nothing left to find + If posLabel = 0 And posScore = 0 And posTeam = 0 Then Exit Do + + ' Find the minimum positive position + Dim minPos As Long: minPos = 2147483647 + If posLabel > 0 And posLabel < minPos Then minPos = posLabel + If posScore > 0 And posScore < minPos Then minPos = posScore + If posTeam > 0 And posTeam < minPos Then minPos = posTeam + + ' --- Category label (league name) --- + If minPos = posLabel And posLabel > 0 Then + curLeague = ExtractLeague(html, posLabel) + pos = posLabel + 30 + + ' --- Score line --- + ElseIf minPos = posScore And posScore > 0 Then + curScore = ExtractScore(html, posScore) + curTime = ExtractGameTime(html, posScore) + pos = posScore + 20 + + ' --- Team name (first of pair) --- + ElseIf minPos = posTeam And posTeam > 0 Then + Dim team1 As String + team1 = ExtractTeamName(html, posTeam) + pos = posTeam + 30 + + ' Find the second team + Dim posTeam2 As Long + posTeam2 = InStr(pos, html, "data-member-link=""true"">") + If posTeam2 = 0 Then Exit Do + + Dim team2 As String + team2 = ExtractTeamName(html, posTeam2) + pos = posTeam2 + 30 + + ' Find odds (first 2 data-selection-price after team2, before next event) + Dim odds1 As String, odds2 As String + ExtractOddsPair html, pos, odds1, odds2 + + ' Store event + AddEvent curLeague, team1, team2, curScore, curTime, odds1, odds2 + curScore = "" + curTime = "" + End If + Loop +End Sub + +' =========================================================================== +' EXTRACT HELPERS +' =========================================================================== + +' --- Sport type from data-sport-type="..." --- +Private Function DetectSport(html As String) As String + Dim marker As String: marker = "data-sport-type=""" + Dim p As Long: p = InStr(1, html, marker) + If p = 0 Then + DetectSport = "Basketball" + Exit Function + End If + p = p + Len(marker) + Dim q As Long: q = InStr(p, html, """") + If q > p Then + Dim raw As String: raw = Mid(html, p, q - p) + ' Translate to Russian + Select Case LCase(raw) + Case "basketball": DetectSport = ChrW(1041) & ChrW(1072) & ChrW(1089) & ChrW(1082) & ChrW(1077) & ChrW(1090) & ChrW(1073) & ChrW(1086) & ChrW(1083) + Case "football", "soccer": DetectSport = ChrW(1060) & ChrW(1091) & ChrW(1090) & ChrW(1073) & ChrW(1086) & ChrW(1083) + Case "icehockey": DetectSport = ChrW(1061) & ChrW(1086) & ChrW(1082) & ChrW(1082) & ChrW(1077) & ChrW(1081) + Case "tennis": DetectSport = ChrW(1058) & ChrW(1077) & ChrW(1085) & ChrW(1085) & ChrW(1080) & ChrW(1089) + Case Else: DetectSport = raw + End Select + Else + DetectSport = "Basketball" + End If +End Function + +' --- League name from

...

--- +Private Function ExtractLeague(html As String, startPos As Long) As String + ' Find the > that opens the h2 tag content + Dim p As Long: p = InStr(startPos, html, ">") + If p = 0 Then Exit Function + p = p + 1 + + ' Find + Dim q As Long: q = InStr(p, html, "") + If q = 0 Or q - p > 500 Then Exit Function + + Dim raw As String: raw = Mid(html, p, q - p) + ExtractLeague = StripTags(raw) +End Function + +' --- Score from
content --- +Private Function ExtractScore(html As String, startPos As Long) As String + ' Find the > that opens the div + Dim p As Long: p = InStr(startPos, html, ">") + If p = 0 Then Exit Function + p = p + 1 + + ' Take content up to time-description marker or
+ ' Use just "time-description" for flexible matching + Dim q1 As Long: q1 = InStr(p, html, "time-description") + Dim q2 As Long: q2 = InStr(p, html, "") + Dim q As Long + If q1 > 0 And (q2 = 0 Or q1 < q2) Then + ' Back up to the opening < of the span tag + Dim backTrack As Long: backTrack = q1 + Do While backTrack > p And Mid(html, backTrack, 1) <> "<" + backTrack = backTrack - 1 + Loop + If backTrack > p Then q = backTrack Else q = q1 + Else + q = q2 + End If + If q = 0 Or q <= p Or q - p > 300 Then Exit Function + + Dim raw As String: raw = Mid(html, p, q - p) + ExtractScore = CleanText(StripTags(raw)) +End Function + +' --- Game time from
near the score --- +Private Function ExtractGameTime(html As String, scorePos As Long) As String + ' Look for "green bold nobr" within 300 chars after score position + Dim marker As String: marker = "green bold nobr" + Dim p As Long: p = InStr(scorePos, html, marker) + If p = 0 Or p - scorePos > 300 Then Exit Function + + ' Find the > to get content + p = InStr(p, html, ">") + If p = 0 Then Exit Function + p = p + 1 + + ' Find
+ Dim q As Long: q = InStr(p, html, "") + If q = 0 Or q - p > 50 Then Exit Function + + ExtractGameTime = CleanText(StripTags(Mid(html, p, q - p))) +End Function + +' --- Team name from TeamName --- +Private Function ExtractTeamName(html As String, startPos As Long) As String + Dim marker As String: marker = "data-member-link=""true"">" + Dim p As Long: p = InStr(startPos, html, marker) + If p = 0 Then Exit Function + p = p + Len(marker) + + Dim q As Long: q = InStr(p, html, "") + If q = 0 Or q - p > 100 Then Exit Function + + ExtractTeamName = Trim(Mid(html, p, q - p)) +End Function + +' --- Extract first 2 odds after position, bounded by next event/category --- +Private Sub ExtractOddsPair(html As String, afterPos As Long, _ + ByRef odds1 As String, ByRef odds2 As String) + odds1 = "" + odds2 = "" + + ' Determine boundary: next team marker or next category + Dim boundary As Long: boundary = Len(html) + Dim b1 As Long: b1 = InStr(afterPos, html, "data-member-link=""true"">") + Dim b2 As Long: b2 = InStr(afterPos, html, "category-label simple-live") + If b1 > 0 And b1 < boundary Then boundary = b1 + If b2 > 0 And b2 < boundary Then boundary = b2 + + ' Find first odds + Dim marker As String: marker = "data-selection-price=""" + Dim p1 As Long: p1 = InStr(afterPos, html, marker) + If p1 = 0 Or p1 > boundary Then Exit Sub + + odds1 = ExtractOddsAt(html, p1) + + ' Find second odds + Dim p2 As Long: p2 = InStr(p1 + 20, html, marker) + If p2 = 0 Or p2 > boundary Then Exit Sub + + odds2 = ExtractOddsAt(html, p2) +End Sub + +' --- Extract single odds value from data-selection-price="X" --- +Private Function ExtractOddsAt(html As String, startPos As Long) As String + Dim marker As String: marker = "data-selection-price=""" + Dim p As Long: p = InStr(startPos, html, marker) + If p = 0 Then Exit Function + p = p + Len(marker) + + Dim q As Long: q = InStr(p, html, """") + If q = 0 Or q - p > 15 Then Exit Function + + ExtractOddsAt = Mid(html, p, q - p) +End Function + +' --- Strip HTML tags and control characters from a string --- +Private Function StripTags(s As String) As String + Dim result As String + Dim inTag As Boolean + Dim i As Long + Dim ch As String + Dim code As Long + + For i = 1 To Len(s) + ch = Mid(s, i, 1) + code = AscW(ch) + If ch = "<" Then + inTag = True + ElseIf ch = ">" Then + inTag = False + ElseIf Not inTag Then + ' Replace newlines/tabs/control chars with space + If code = 10 Or code = 13 Or code = 9 Then + result = result & " " + Else + result = result & ch + End If + End If + Next i + + ' Collapse multiple spaces + Do While InStr(result, " ") > 0 + result = Replace(result, " ", " ") + Loop + + StripTags = Trim(result) +End Function + +' --- Clean text: strip newlines, tabs, collapse whitespace --- +Private Function CleanText(s As String) As String + Dim r As String: r = s + r = Replace(r, vbCrLf, " ") + r = Replace(r, vbCr, " ") + r = Replace(r, vbLf, " ") + r = Replace(r, vbTab, " ") + ' Collapse multiple spaces + Do While InStr(r, " ") > 0 + r = Replace(r, " ", " ") + Loop + CleanText = Trim(r) +End Function + +' =========================================================================== +' EVENT STORAGE +' =========================================================================== +Private Sub AddEvent(League As String, Team1 As String, Team2 As String, _ + Score As String, MatchTime As String, _ + Odds1 As String, Odds2 As String) + ' Skip entries with empty teams + If Len(Trim(Team1)) = 0 Or Len(Trim(Team2)) = 0 Then Exit Sub + + m_Count = m_Count + 1 + ReDim Preserve m_Events(1 To m_Count) + + With m_Events(m_Count) + .League = Trim(League) + .Team1 = Trim(Team1) + .Team2 = Trim(Team2) + .Score = Trim(Score) + .MatchTime = Trim(MatchTime) + .Odds1 = Trim(Odds1) + .Odds2 = Trim(Odds2) + End With +End Sub + +' =========================================================================== +' WORKSHEET SETUP +' =========================================================================== +Private Function SetupSheet() As Worksheet + Dim ws As Worksheet + On Error Resume Next + Set ws = ThisWorkbook.Worksheets(WS_NAME) + On Error GoTo 0 + + If ws Is Nothing Then + Set ws = ThisWorkbook.Worksheets.Add( _ + After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) + ws.Name = WS_NAME + Else + ws.Cells.Clear + ws.Cells.Interior.ColorIndex = xlNone + ws.Cells.Borders.LineStyle = xlNone + ws.Cells.Font.Bold = False + ws.Cells.Font.Italic = False + + ' Reset freeze panes + ws.Activate + ActiveWindow.FreezePanes = False + End If + + Set SetupSheet = ws +End Function + +' =========================================================================== +' WRITE STRUCTURED DATA +' =========================================================================== +Private Sub WriteStructuredData(ws As Worksheet) + ' --- Title --- + WriteTitle ws + + ' --- Column headers (row 5) --- + Dim hdrRow As Long: hdrRow = DATA_START_ROW - 1 + ' #, Liga, Komanda 1, Komanda 2, Schet, Vremya, P1, P2 + ws.Cells(hdrRow, 1).Value = "#" + ws.Cells(hdrRow, 2).Value = ChrW(1051) & ChrW(1080) & ChrW(1075) & ChrW(1072) ' Лига + ws.Cells(hdrRow, 3).Value = ChrW(1050) & ChrW(1086) & ChrW(1084) & ChrW(1072) & _ + ChrW(1085) & ChrW(1076) & ChrW(1072) & " 1" ' Команда 1 + ws.Cells(hdrRow, 4).Value = ChrW(1050) & ChrW(1086) & ChrW(1084) & ChrW(1072) & _ + ChrW(1085) & ChrW(1076) & ChrW(1072) & " 2" ' Команда 2 + ws.Cells(hdrRow, 5).Value = ChrW(1057) & ChrW(1095) & ChrW(1105) & ChrW(1090) ' Счёт + ws.Cells(hdrRow, 6).Value = ChrW(1042) & ChrW(1088) & ChrW(1077) & ChrW(1084) & _ + ChrW(1103) ' Время + ws.Cells(hdrRow, 7).Value = ChrW(1055) & "1" ' П1 + ws.Cells(hdrRow, 8).Value = ChrW(1055) & "2" ' П2 + + ' --- Data rows --- + Dim r As Long + For r = 1 To m_Count + Dim dataRow As Long: dataRow = DATA_START_ROW + r - 1 + With m_Events(r) + ws.Cells(dataRow, 1).Value = r + ws.Cells(dataRow, 2).Value = .League + ws.Cells(dataRow, 3).Value = .Team1 + ws.Cells(dataRow, 4).Value = .Team2 + ws.Cells(dataRow, 5).Value = .Score + ws.Cells(dataRow, 6).Value = .MatchTime + ws.Cells(dataRow, 7).Value = .Odds1 + ws.Cells(dataRow, 8).Value = .Odds2 + End With + Next r +End Sub + +' =========================================================================== +' TITLE SECTION +' =========================================================================== +Private Sub WriteTitle(ws As Worksheet) + ' Row 1: Title with sport name + Dim title As String + If Len(m_Sport) > 0 Then + title = "Marathon Bet " & ChrW(8212) & " " & m_Sport & " Live" + Else + title = "Marathon Bet " & ChrW(8212) & " Live " & _ + ChrW(1057) & ChrW(1090) & ChrW(1072) & ChrW(1090) & _ + ChrW(1080) & ChrW(1089) & ChrW(1090) & ChrW(1080) & _ + ChrW(1082) & ChrW(1072) + End If + ws.Range("A1").Value = title + ws.Range("A1").Font.Size = 16 + ws.Range("A1").Font.Bold = True + ws.Range("A1:H1").Merge + ws.Range("A1").Interior.Color = CLR_TITLE_BG + ws.Range("A1").Font.Color = CLR_WHITE + ws.Range("A1").RowHeight = 30 + ws.Range("A1").VerticalAlignment = xlVAlignCenter + + ' Row 2: URL + ws.Range("A2").Value = PAGE_URL + ws.Range("A2").Font.Size = 9 + ws.Range("A2").Font.Color = &H999999 + ws.Range("A2:H2").Merge + + ' Row 3: Timestamp + ws.Range("A3").Value = ChrW(1044) & ChrW(1072) & ChrW(1090) & ChrW(1072) & _ + ": " & Format(Now, "dd.mm.yyyy hh:nn:ss") + ws.Range("A3").Font.Size = 9 + ws.Range("A3").Font.Italic = True + ws.Range("A3:H3").Merge +End Sub + +' =========================================================================== +' FORMAT DATA SHEET +' =========================================================================== +Private Sub FormatDataSheet(ws As Worksheet) + Dim lastRow As Long: lastRow = DATA_START_ROW + m_Count - 1 + Dim lastCol As Long: lastCol = NUM_COLS + Dim hdrRow As Long: hdrRow = DATA_START_ROW - 1 + + ' --- Header row --- + With ws.Range(ws.Cells(hdrRow, 1), ws.Cells(hdrRow, lastCol)) + .Interior.Color = CLR_HDR_BG + .Font.Color = CLR_WHITE + .Font.Bold = True + .Font.Size = 10 + .HorizontalAlignment = xlHAlignCenter + .VerticalAlignment = xlVAlignCenter + .RowHeight = 24 + End With + + ' --- Data rows --- + Dim r As Long + Dim prevLeague As String + + For r = DATA_START_ROW To lastRow + ' Alternating row colors + If (r - DATA_START_ROW) Mod 2 = 1 Then + ws.Range(ws.Cells(r, 1), ws.Cells(r, lastCol)).Interior.Color = CLR_ALT_ROW + End If + + ' League group shading + Dim cellLeague As String + cellLeague = CStr(ws.Cells(r, 2).Value) + If cellLeague <> prevLeague And Len(cellLeague) > 0 Then + ws.Range(ws.Cells(r, 1), ws.Cells(r, lastCol)).Interior.Color = CLR_SPORT_BG + ws.Cells(r, 2).Font.Bold = True + prevLeague = cellLeague + End If + + ' Row number - centered, gray + ws.Cells(r, 1).HorizontalAlignment = xlHAlignCenter + ws.Cells(r, 1).Font.Color = &H888888 + + ' Score - bold, centered, larger + ws.Cells(r, 5).Font.Bold = True + ws.Cells(r, 5).HorizontalAlignment = xlHAlignCenter + ws.Cells(r, 5).Font.Size = 11 + + ' Time - centered + ws.Cells(r, 6).HorizontalAlignment = xlHAlignCenter + + ' Odds - centered + ws.Cells(r, 7).HorizontalAlignment = xlHAlignCenter + ws.Cells(r, 8).HorizontalAlignment = xlHAlignCenter + Next r + + ' --- Borders --- + With ws.Range(ws.Cells(hdrRow, 1), ws.Cells(lastRow, lastCol)) + .Borders(xlEdgeLeft).LineStyle = xlContinuous + .Borders(xlEdgeLeft).Color = CLR_BORDER + .Borders(xlEdgeRight).LineStyle = xlContinuous + .Borders(xlEdgeRight).Color = CLR_BORDER + .Borders(xlEdgeTop).LineStyle = xlContinuous + .Borders(xlEdgeTop).Color = CLR_BORDER + .Borders(xlEdgeBottom).LineStyle = xlContinuous + .Borders(xlEdgeBottom).Color = CLR_BORDER + .Borders(xlInsideHorizontal).LineStyle = xlContinuous + .Borders(xlInsideHorizontal).Color = CLR_BORDER + .Borders(xlInsideHorizontal).Weight = xlThin + .Borders(xlInsideVertical).LineStyle = xlContinuous + .Borders(xlInsideVertical).Color = CLR_BORDER + .Borders(xlInsideVertical).Weight = xlThin + End With + + ' --- Column widths --- + ws.Columns(1).ColumnWidth = 5 ' # + ws.Columns(2).ColumnWidth = 38 ' League + ws.Columns(3).ColumnWidth = 26 ' Team 1 + ws.Columns(4).ColumnWidth = 26 ' Team 2 + ws.Columns(5).ColumnWidth = 22 ' Score + ws.Columns(6).ColumnWidth = 10 ' Time + ws.Columns(7).ColumnWidth = 9 ' P1 + ws.Columns(8).ColumnWidth = 9 ' P2 + + ' --- Freeze panes --- + ws.Range("A" & DATA_START_ROW).Select + ActiveWindow.FreezePanes = True + + ' --- Print setup --- + On Error Resume Next + With ws.PageSetup + .Orientation = xlLandscape + .FitToPagesWide = 1 + .FitToPagesTall = False + .PrintTitleRows = "$" & hdrRow & ":$" & hdrRow + End With + On Error GoTo 0 + + ' --- Footer --- + Dim footerRow As Long: footerRow = lastRow + 2 + ws.Cells(footerRow, 1).Value = ChrW(1042) & ChrW(1089) & ChrW(1077) & _ + ChrW(1075) & ChrW(1086) & " " & ChrW(1089) & ChrW(1086) & _ + ChrW(1073) & ChrW(1099) & ChrW(1090) & ChrW(1080) & ChrW(1081) & _ + ": " & m_Count + ws.Cells(footerRow, 1).Font.Italic = True + ws.Cells(footerRow, 1).Font.Size = 9 + ws.Cells(footerRow, 1).Font.Color = &H888888 +End Sub diff --git a/MarathonStats.xlsm b/MarathonStats.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..ca475220c434121187964a982e9c6a69214fba5c GIT binary patch literal 53337 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

|JQSmbswkm(dl;G)%s-AKYiYH@ZNBJ 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 ff~