Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Nein. Das ist wie bei den anderen. Schau dir die Testdaten an.Was ich nicht verstehe:
E3 = 0 > Die Zahl selber ist die Tatsächliche Zahl des Tages (Bsp E3)
'Checksheet auswählen oder erstellen
On Error Resume Next
Set wsCheck = ActiveWorkbook.Sheets(C_CHECK_SHEET_NAME)
If Err.Number <> 0 Then
Set wsCheck = ActiveWorkbook.Sheets.Add(ActiveWorkbook.Sheets(C_MAIN_SHEET_NAME))
wsCheck.Name = C_CHECK_SHEET_NAME
End If
On Error GoTo 0
'Check-Tabelle leeren
wsCheck.Cells.Clear
? cmd
- Im SQL wird davon ausgegangen, dass die Tabellen "einfach* sind. Erste Zeile die Namen, Rest die Daten. ggf. muss dort der Range angepasst werden
http://wiki.yaslaw.info/doku.php/vba/excel/adodbsql#beliebiger_range. Dann sollte man den Range vorher ermitteln und über Variablen definieren
Option Explicit
'http://wiki.yaslaw.info/doku.php/vba/excel/adodbsql
Private Const C_MAIN_SHEET_NAME = "Dauerfahrten"
Private Const C_CHECK_SHEET_NAME = "Check"
Private Const C_DEFAULT_RANGE = "B3:D100"
'Der Inhalt von C_SQL_PATTERN in lesbarer Formatierung:
'
'select
' switch(
' act.km <> main.km , act.km,
' not isnull(act.km), 0
' ) as [{#fld_name}]
'from
' [{#tbl_main}$] main
' left join (
' select von, nach, km from [{#tbl_act}$]
' union select nach, von, km from [{#tbl_act}$]
' ) act
' on main.von = act.von
' and main.nach = act.nach
Private Const C_SQL_PATTERN = _
"select switch(act.km <> main.km , act.km, not isnull(act.km), 0) as [{#fld_name}] " & _
"from [{#tbl_main}] main left join ( " & _
"select von, nach, km from [{#tbl_act}] where von <> '' " & _
"union select nach, von, km from [{#tbl_act}] where von <> '' " & _
") act " & _
"on main.von = act.von and main.nach = act.nach " & _
"where main.von <> '' " & _
"order by main.von, main.nach"
'/**
' * erstellt ein Check-Sheet
' */
Public Sub check()
Dim ws As Worksheet
Dim wsCheck As Worksheet
Dim SQL As String
Dim colNr As Long
'Checksheet auswählen oder erstellen
On Error Resume Next
Set wsCheck = ActiveWorkbook.Sheets(C_CHECK_SHEET_NAME)
If Err.Number <> 0 Then
Set wsCheck = ActiveWorkbook.Sheets.Add(ActiveWorkbook.Sheets(C_MAIN_SHEET_NAME))
wsCheck.Name = C_CHECK_SHEET_NAME
End If
On Error GoTo 0
'Check-Tabelle leeren
wsCheck.Cells.Clear
'Stammdaten abfüllen
SQL = "SELECT Von, Nach, Km FROM [" & C_MAIN_SHEET_NAME & "$" & C_DEFAULT_RANGE & "] where von <> '' order by von, nach"
writeFullData wsCheck.Cells(1, 1), openRs(SQL)
colNr = 3
'Alle Sheets durchgehen
For Each ws In ActiveWorkbook.Sheets
'Prüfen, ob es ein Datumssheet ist
If rxDataSheet.test(ws.Name) Then
'Spalte eins nach Rechts rücken
colNr = colNr + 1
'SQL zusammenschustern
SQL = Replace(C_SQL_PATTERN, "{#tbl_main}", C_MAIN_SHEET_NAME & "$" & C_DEFAULT_RANGE)
SQL = Replace(SQL, "{#tbl_act}", ws.Name & "$" & C_DEFAULT_RANGE)
SQL = Replace(SQL, "{#fld_name}", rxDataSheet.Replace(ws.Name, "$1 $2"))
'Sql öffnen und das Resultat in die Check-Tabelle schreiben
writeFullData wsCheck.Cells(1, colNr), openRs(SQL)
End If
Next ws
End Sub
'/**
' * Regulären Ausdruck, der die Sheetnamen prüft um herauszufinden, ob es sich um ein Datumssheet handelt
' * @return RegExp
' */
Private Property Get rxDataSheet() As Object
Static rx As Object
If rx Is Nothing Then
Set rx = CreateObject("VBScript.RegExp")
rx.Pattern = "^(\d{1,2})\.\s*(\S+)$"
End If
Set rxDataSheet = rx
End Property