von F3K Total » Di, 25.02.2014 19:18
Hi,
hatte mich letztens mit dem Erzeugen von Barcode128 Codes beschäftigt. Zum Testen ist deine Aufgabe genau richtig gewesen.
Anbei findest du eine Datei mit 300 Startnummern incl. Barcodes, sowie eine Calc-Datei mit zwei Makros.
Makro 1:
Code: Alles auswählen
Sub S_Startzeit
ocontroller = Thiscomponent.currentController
osheet = thiscomponent.sheets.getbyname("Läufer")
oForm = osheet.drawpage.forms.getbyname("Formular")
otxtScan = oForm.getbyname("txtScan")
otxtScanControl = ocontroller.getcontrol(otxtScan)
otxtScanControl.setfocus
oCellStartzeit = osheet.getcellbyposition(26,3)'AA4
oCellStartzeit.value = now()
end sub
- Speichert die Startzeit des Rennes in Zelle AA4
- Setzt den Cursor in das Scanfeld
Makro 2:
Code: Alles auswählen
const BC_D = 14540253
const BC_OK = 10092390
Sub S_Add_Round(event)
If (event.KeyCode = 1280) Then
if event.source.Text >"" then
'If (oEvt.KeyCode = com.sun.star.awt.Key.RETURN) Then
dim nStartNumber as integer
nStartNumber = event.source.Text
osheet = Thiscomponent.sheets.getbyName("Läufer")
osheet.unprotect("")
d_Startzeit = osheet.getcellbyposition(26,3).value
ocell = oSheet.getcellbyposition(3,nStartNumber)
ocell.value = oCell.Value + 1
oTimerange = oSheet.getcellrangebyposition(4,nStartNumber,23,nStartNumber)
oSumCell = oSheet.getcellbyposition(24,nStartNumber)
dRoundsum = oSumCell.value
for i = 0 to 19
otimecell = oTimerange.getcellbyposition(i,0)
if otimecell.Type = com.sun.star.table.CellContentType.EMPTY then
if i = 0 then
otimecell.value = now() - d_Startzeit
else
otimecell.value = now()- d_Startzeit - dRoundsum
end if
exit for
end if
next i
osheet.protect("")
event.source.model.backgroundcolor = BC_OK
wait 200
event.source.model.backgroundcolor = BC_D
event.source.Text = ""
'msgbox "RETURN"
End If
end if
End Sub
- Zeigt die Startnummer des "gescanten" kurz im Scanfeld an
- Färbt das Scanfeld bei erfolgreichem Scan kurz grün ein
- erhöht die Rundenzahl desjenigen um 1 und
- schreibt die Rundenzeit des gescanten Läufers auf, es sind bis zu 20 Runden möglich.
- Schützt nachdem scannen des ersten Läufers das Tabellenblatt gegen manuelles Überschreiben
Vorgehen:
- Beim Start des Laufes einmal die Schaltfläche "Start des Rennes" anklicken
- danach nur noch die Läufer scannen.
- Soll der Blattschutz entfernt werden -> Extras/Dokument schützen -> Haken bei "Tabelle" entfernen
- Der Scanner muss auf "Return" eingestellt sein.
Funktioniert, habe ich mit meinem Scanner gerade ausprobiert.
Damit die Makros laufen dürfen, stellst du unter Extras/Optionen/Openoffice.org oder LibreOffice.org/Sicherheit/Makrosicherheit mindestens die Stufe "Mittel" ein, dann wirst du beim Öffnen von Dokumenten gefragt, ob du Makros ausführen möchtest.
Gruß R
- Dateianhänge
-
- RundenZählerBarcode.ods
- (27.26 KiB) 83-mal heruntergeladen
-
- StartnummernCode128B_A4.zip
- (59.83 KiB) 79-mal heruntergeladen
Hi,
hatte mich letztens mit dem Erzeugen von Barcode128 Codes beschäftigt. Zum Testen ist deine Aufgabe genau richtig gewesen.
Anbei findest du eine Datei mit 300 Startnummern incl. Barcodes, sowie eine Calc-Datei mit zwei Makros.
Makro 1:[code]Sub S_Startzeit
ocontroller = Thiscomponent.currentController
osheet = thiscomponent.sheets.getbyname("Läufer")
oForm = osheet.drawpage.forms.getbyname("Formular")
otxtScan = oForm.getbyname("txtScan")
otxtScanControl = ocontroller.getcontrol(otxtScan)
otxtScanControl.setfocus
oCellStartzeit = osheet.getcellbyposition(26,3)'AA4
oCellStartzeit.value = now()
end sub[/code]
[list][*]Speichert die Startzeit des Rennes in Zelle AA4
[*]Setzt den Cursor in das Scanfeld[/list]
Makro 2:[code]const BC_D = 14540253
const BC_OK = 10092390
Sub S_Add_Round(event)
If (event.KeyCode = 1280) Then
if event.source.Text >"" then
'If (oEvt.KeyCode = com.sun.star.awt.Key.RETURN) Then
dim nStartNumber as integer
nStartNumber = event.source.Text
osheet = Thiscomponent.sheets.getbyName("Läufer")
osheet.unprotect("")
d_Startzeit = osheet.getcellbyposition(26,3).value
ocell = oSheet.getcellbyposition(3,nStartNumber)
ocell.value = oCell.Value + 1
oTimerange = oSheet.getcellrangebyposition(4,nStartNumber,23,nStartNumber)
oSumCell = oSheet.getcellbyposition(24,nStartNumber)
dRoundsum = oSumCell.value
for i = 0 to 19
otimecell = oTimerange.getcellbyposition(i,0)
if otimecell.Type = com.sun.star.table.CellContentType.EMPTY then
if i = 0 then
otimecell.value = now() - d_Startzeit
else
otimecell.value = now()- d_Startzeit - dRoundsum
end if
exit for
end if
next i
osheet.protect("")
event.source.model.backgroundcolor = BC_OK
wait 200
event.source.model.backgroundcolor = BC_D
event.source.Text = ""
'msgbox "RETURN"
End If
end if
End Sub[/code]
[list][*]Zeigt die Startnummer des "gescanten" kurz im Scanfeld an
[*]Färbt das Scanfeld bei erfolgreichem Scan kurz grün ein
[*]erhöht die Rundenzahl desjenigen um 1 und
[*]schreibt die Rundenzeit des gescanten Läufers auf, es sind bis zu 20 Runden möglich.
[*]Schützt nachdem scannen des ersten Läufers das Tabellenblatt gegen manuelles Überschreiben[/list]
[b]Vorgehen:[/b]
[list][*]Beim Start des Laufes einmal die Schaltfläche "Start des Rennes" anklicken
[*]danach nur noch die Läufer scannen.
[*]Soll der Blattschutz entfernt werden -> Extras/Dokument schützen -> Haken bei "Tabelle" entfernen
[*]Der Scanner muss auf "Return" eingestellt sein.[/list]
Funktioniert, habe ich mit meinem Scanner gerade ausprobiert.
Damit die Makros laufen dürfen, stellst du unter Extras/Optionen/Openoffice.org oder LibreOffice.org/Sicherheit/Makrosicherheit mindestens die Stufe "Mittel" ein, dann wirst du beim Öffnen von Dokumenten gefragt, ob du Makros ausführen möchtest.
Gruß R