von Meister Propper » Do, 28.05.2015 13:37
@Karulus
ich möchte den Inhalt einer Zelle auslesen.
Den ganzen Code der Function Posten wird schwierig, da ich praktisch in der ersten Zeile schon hänge, da ich die Zellen nicht auslesen kann.
hier mal das Makro, das genau das macht, was ich möchte, und das ich in eine Function umschreiben möchte, um es für mehrere Mitarbeiter nicht jedes mal verändern zu müssen.
Ich habe mehrere Blätter, im ersten Blatt stehen in 2 unterschiedlichen Zeile "2"en, die einen Urlaubstag des Mitarbeiters anzeigen.
Die werden praktisch gezählt, und als jeweiliges Start und Enddatum in einer zweiten Tabelle eingetragen.
Nun Möchte ich das ganze aber als Function schreiben, eine für den Start, und eine für das Ende, dazu muss ich gezählte Werte übergeben und auch Zellen auslesen. Und wie gesagt gleich am Anfang, das auslesen der Zellen klappt bei mir innerhalb der Function schon nicht. Den Rest hab ich noch gar nicht geschrieben, da ich die Werteübergabe per Zelle ja schon nicht hinbekommen.
Hier der Code des Sub's:
REM ***** BASIC *****
Option Explicit
Private iZaehlerUni as Integer
Private iZaehlerSpalteGefunden as Integer
Private iOffset as Integer
Private iOffsetSpalte as integer
Private iOffsetZweiGefunden as Integer
Private Zellobjekt as string
Sub Urlaub1
Dim bZweiGefunden as Boolean 'ja / Nein ob eine Zwei gefunden wurde
Dim iZaehlerSpalte as Integer
Dim iZaehlerZeile as Integer
Dim iZwei as Integer
Dim oDoc as Object
Dim oCell as String
Dim oSheet as Object
Dim sDatumZuZweiGefunden as String
Dim oSheetMitarbeiter as Object
Dim sTest as String
Dim iZaehlerSpalteUrlaubEnde as Integer
Dim iZaehlerZeileUrlaubEnde as Integer
Dim bAbJuli as Boolean
Dim sDatumsFeld as String
Dim iMengeUrlaub as Integer
Dim iMitarbeiterDatumOffset as Integer
Dim I as Integer
oDoc = ThisComponent 'Diese Datei
oSheet = oDoc.Sheets.getByName( "Uebersicht" ) 'Uebrsichtsblatt definieren
oSheetMitarbeiter = oDoc.Sheets.getByName( "Mitarbeiter" ) 'Mitarbeiter definieren
bZweiGefunden = False 'noch keine Gefunden
iOffset = oSheetMitarbeiter.getCellByPosition(1 , 1).Value 'für Zeile bis 30.06.
iZaehlerZeile = iZaehlerZeile + iOffset 'StartZeile
iOffsetZweiGefunden = 2 'in Spalte C anfangen mit suchen
iZaehlerSpalte = iZaehlerSpalte + iOffsetZweiGefunden 'wurde schon eine gefunden?
iMengeUrlaub = 9 'Urlaubszähler
iMitarbeiterDatumOffset = oSheetMitarbeiter.getCellByPosition(3 , 1).Value 'Offsetholen fürs Datumsfeld
bAbJuli = False
For I = 1 to 15 step 1
While not bZweiGefunden
iZwei = oSheet.getCellByPosition(iZaehlerSpalte , iZaehlerZeile).value 'Inhalt holen
if iZwei="2" then 'prüfen ob 2
sDatumsFeld = izaehlerZeile - iMitarbeiterDatumOffset
sDatumZuZweiGefunden = oSheet.getCellByPosition(iZaehlerSpalte , sDatumsFeld).Value 'Datum holen
oSheetMitarbeiter.getCellByPosition(1 , imengeurlaub).Value = sDatumZuZweiGefunden 'Datum in Mitarbeiter speichern
iZaehlerSpalte = iZaehlerSpalte + 1
bZweiGefunden = True 'Schleife beenden
else
iZaehlerSpalte = iZaehlerSpalte + 1 'gleiche Zeile, nächste Zelle
if iZaehlerZeile<"33" then
if iZaehlerSpalte="184" then
iZaehlerSpalte = 2
bAbJuli = True
iZaehlerZeile = oSheetMitarbeiter.getCellByPosition(2 , 1).string
end if
end if
if iZaehlerSpalte="187" then
exit for
end if
end if
Wend
bZweigefunden = False
While not bZweiGefunden
iZwei = oSheet.getCellByPosition(iZaehlerSpalte , iZaehlerZeile).value
if iZwei="2" then
iZaehlerSpalte = iZaehlerSpalte + 1
if iZaehlerZeile<"33" then
if iZaehlerSpalte="184" then
iZaehlerSpalte = 2
iZaehlerZeile = oSheetMitarbeiter.getCellByPosition(2 , 1).string
end if
end if
if iZaehlerSpalte="187" then
exit for
end if
else
iZaehlerSpalteUrlaubEnde = iZaehlerSpalte - 1
sDatumsFeld = izaehlerZeile - 9
sDatumZuZweiGefunden = oSheet.getCellByPosition(iZaehlerSpalteUrlaubEnde , sDatumsFeld).value
oSheetMitarbeiter.getCellByPosition(2 , imengeurlaub).Value = sDatumZuZweiGefunden
bZweiGefunden = True
end if
Wend
bZweigefunden = False
iMengeUrlaub = iMengeUrlaub +1
Next
End Sub
@Karulus
ich möchte den Inhalt einer Zelle auslesen.
Den ganzen Code der Function Posten wird schwierig, da ich praktisch in der ersten Zeile schon hänge, da ich die Zellen nicht auslesen kann.
hier mal das Makro, das genau das macht, was ich möchte, und das ich in eine Function umschreiben möchte, um es für mehrere Mitarbeiter nicht jedes mal verändern zu müssen.
Ich habe mehrere Blätter, im ersten Blatt stehen in 2 unterschiedlichen Zeile "2"en, die einen Urlaubstag des Mitarbeiters anzeigen.
Die werden praktisch gezählt, und als jeweiliges Start und Enddatum in einer zweiten Tabelle eingetragen.
Nun Möchte ich das ganze aber als Function schreiben, eine für den Start, und eine für das Ende, dazu muss ich gezählte Werte übergeben und auch Zellen auslesen. Und wie gesagt gleich am Anfang, das auslesen der Zellen klappt bei mir innerhalb der Function schon nicht. Den Rest hab ich noch gar nicht geschrieben, da ich die Werteübergabe per Zelle ja schon nicht hinbekommen.
Hier der Code des Sub's:
REM ***** BASIC *****
Option Explicit
Private iZaehlerUni as Integer
Private iZaehlerSpalteGefunden as Integer
Private iOffset as Integer
Private iOffsetSpalte as integer
Private iOffsetZweiGefunden as Integer
Private Zellobjekt as string
Sub Urlaub1
Dim bZweiGefunden as Boolean 'ja / Nein ob eine Zwei gefunden wurde
Dim iZaehlerSpalte as Integer
Dim iZaehlerZeile as Integer
Dim iZwei as Integer
Dim oDoc as Object
Dim oCell as String
Dim oSheet as Object
Dim sDatumZuZweiGefunden as String
Dim oSheetMitarbeiter as Object
Dim sTest as String
Dim iZaehlerSpalteUrlaubEnde as Integer
Dim iZaehlerZeileUrlaubEnde as Integer
Dim bAbJuli as Boolean
Dim sDatumsFeld as String
Dim iMengeUrlaub as Integer
Dim iMitarbeiterDatumOffset as Integer
Dim I as Integer
oDoc = ThisComponent 'Diese Datei
oSheet = oDoc.Sheets.getByName( "Uebersicht" ) 'Uebrsichtsblatt definieren
oSheetMitarbeiter = oDoc.Sheets.getByName( "Mitarbeiter" ) 'Mitarbeiter definieren
bZweiGefunden = False 'noch keine Gefunden
iOffset = oSheetMitarbeiter.getCellByPosition(1 , 1).Value 'für Zeile bis 30.06.
iZaehlerZeile = iZaehlerZeile + iOffset 'StartZeile
iOffsetZweiGefunden = 2 'in Spalte C anfangen mit suchen
iZaehlerSpalte = iZaehlerSpalte + iOffsetZweiGefunden 'wurde schon eine gefunden?
iMengeUrlaub = 9 'Urlaubszähler
iMitarbeiterDatumOffset = oSheetMitarbeiter.getCellByPosition(3 , 1).Value 'Offsetholen fürs Datumsfeld
bAbJuli = False
For I = 1 to 15 step 1
While not bZweiGefunden
iZwei = oSheet.getCellByPosition(iZaehlerSpalte , iZaehlerZeile).value 'Inhalt holen
if iZwei="2" then 'prüfen ob 2
sDatumsFeld = izaehlerZeile - iMitarbeiterDatumOffset
sDatumZuZweiGefunden = oSheet.getCellByPosition(iZaehlerSpalte , sDatumsFeld).Value 'Datum holen
oSheetMitarbeiter.getCellByPosition(1 , imengeurlaub).Value = sDatumZuZweiGefunden 'Datum in Mitarbeiter speichern
iZaehlerSpalte = iZaehlerSpalte + 1
bZweiGefunden = True 'Schleife beenden
else
iZaehlerSpalte = iZaehlerSpalte + 1 'gleiche Zeile, nächste Zelle
if iZaehlerZeile<"33" then
if iZaehlerSpalte="184" then
iZaehlerSpalte = 2
bAbJuli = True
iZaehlerZeile = oSheetMitarbeiter.getCellByPosition(2 , 1).string
end if
end if
if iZaehlerSpalte="187" then
exit for
end if
end if
Wend
bZweigefunden = False
While not bZweiGefunden
iZwei = oSheet.getCellByPosition(iZaehlerSpalte , iZaehlerZeile).value
if iZwei="2" then
iZaehlerSpalte = iZaehlerSpalte + 1
if iZaehlerZeile<"33" then
if iZaehlerSpalte="184" then
iZaehlerSpalte = 2
iZaehlerZeile = oSheetMitarbeiter.getCellByPosition(2 , 1).string
end if
end if
if iZaehlerSpalte="187" then
exit for
end if
else
iZaehlerSpalteUrlaubEnde = iZaehlerSpalte - 1
sDatumsFeld = izaehlerZeile - 9
sDatumZuZweiGefunden = oSheet.getCellByPosition(iZaehlerSpalteUrlaubEnde , sDatumsFeld).value
oSheetMitarbeiter.getCellByPosition(2 , imengeurlaub).Value = sDatumZuZweiGefunden
bZweiGefunden = True
end if
Wend
bZweigefunden = False
iMengeUrlaub = iMengeUrlaub +1
Next
End Sub