Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
200to204
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
200to204
200to204
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeichnen!!

Zeichnen!!
10.01.2003 11:03:38
MrDull
Hallo

Ich habe ein Problem!

In einem Fenster kann ich ein spezielles Datum von/bis auswählen! Dieser Bereich wird dann im Excel dargestellt! Da ich für jedes JahresDrittel ein seperates Blatt brauche, hat Excel ein Problem wenn ich einen Bereich von z.B. 30.April-2.Mai wähle!

Das Problem besteht nur, wenn er auf 2 Blättern das Datum einzeichnen soll! Gibt es da irgend einen Trick??

Hoffe, dass ihr verstehen könnt, was ich fragen will!!

Danke

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Zeichnen!!
10.01.2003 11:24:58
Steffan
Ich denke mal, dass Du für jeden Tag eine Spalte nimmst?!?
Wie wird der gewählte Bereich dargestellt (Füllung, Linien, Umrandung)?
Wie sieht der Code für das Füllen aus? Poste ihn, dann wird Dir sicher zu helfen sein!

Steffan.

Re: Zeichnen!!
10.01.2003 12:22:10
MrDull
Hallo

Wie du richtig erkannt hast, nehme ich für jeden tag eine Spalte und für die einzelnen Benutzer je eine Zeile! Es wird alles ausgefüllt!

Die Funktionen hängen alle stark zusammen, darum ein "bisschen" unübersichtlich!

Mein Problem ist einfach da auf einem Blatt, die Tagen vom 1.1.03-30.4.03, 1.5.03-31.8.03 und vom 1.9.03-31.12.03 gehen, wird das darstellen sehr kompliziert, wenn der Bereich mehr als 1 Sheet verwendet!!

Hier der Code, einfach vereinfacht!!

Ausgangsfunktion!
EndNA

Werte aus Textfiles!
frmNA.txtE1.Text = Name
frmNA.txtTimeAS.Text, frmNA.txtTimeAE.Text = Anfangs und End Datum


Call NameSearch(frmNA.txtE1.Text)
Call DateSearch(frmNA.txtTimeAS.Text, frmNA.txtTimeAE.Text)


Public Sub NameSearch(strUser1 As String)

Dim intPosUsers, intAbbruch, intZaehler As Integer

'"Wird 3mal aufgerufen für jedes Blatt"
Sheets("Jan-April 03").Select
intPosUsers = Range("Users").Column
intZaehler = 2
intAbbruch = 0
Do While intAbbruch < 10
If Cells(intZaehler, intPosUsers) = strUser1 Then
intPosUser = intZaehler
check = True
Exit Sub
End If

If Cells(intZaehler, intPosUsers) = "" Then intAbbruch = intAbbruch + 1
intZaehler = intZaehler + 1
If Cells(intZaehler, intPosUsers) <> "" Then intAbbruch = 0

Loop


Public Sub DateSearch(strDate1, strDate2 As Date)

Dim intPosDate, intAbbruch, intZaehler As Integer
Dim datDate As Date
Dim intPosSD, intPosED As Integer

'" Wird auch 3mal aufgerufen für jedes Blatt"
Sheets("Jan-April 03").Select
intPosDate = Range("Day").Row
intZaehler = 2
intAbbruch = 0
Do While intAbbruch < 10
datDate = Cells(intPosDate, intZaehler)
If datDate = strDate1 Then
intPosSD = intZaehler

Do While intAbbruch < 10
datDate = Cells(intPosDate, intZaehler)
If datDate = strDate2 Then
intPosED = intZaehler
If strChoice = 0 Then
Call paintNE(intPosUser, intPosSD, intPosED)
Else
Call paintNA(intPosUser, intPosSD, intPosED)
End If
Exit Sub
End If
If datDate = 0 Then intAbbruch = intAbbruch + 1
intZaehler = intZaehler + 1
If datDate <> 0 Then intAbbruch = 0
Loop

End If
If datDate = 0 Then intAbbruch = intAbbruch + 1
intZaehler = intZaehler + 1
If datDate <> 0 Then intAbbruch = 0
Loop


Function paintNA(intUser, intSD, intED As Integer)
Range(Cells(intUser, intSD), Cells(intUser, intED)).Select
With Selection.Interior
.ColorIndex = 10
.Pattern = xlSolid
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = True
End With
ActiveCell.FormulaR1C1 = frmNA.txtAbsence.Text & " " & frmNA.txtTA.Text

End Function


Anzeige
Re: Zeichnen!!
10.01.2003 20:08:38
Steffan
Hallo MrDull,

Ich hab leider erst jetzt Zeit gefunden mir Deinen Code anzuschauen.
Also soweit ich es kapiert habe machst Du in 'DateSearch()' einen Durchlauf über die drei Sheets und schaust nach welche Spalte welchem Datum entspricht. Das scheint mir doch etwas kompliziert und schwierig zu handhaben.
Ich würde folgenden Ansatz probieren:
Jeder Tag im Jahr hat eine Nummer, die Du mit
intDatumStartSpalte = DateDiff("d", DateSerial(Year(strDate1), 1, 1), strDate) + 1
ermitteln kannst. Gleiches für das Enddatum.

Jetzt noch eine Schleife
for i= intDatumStartSpalte to intDatumEndeSpalte
select case i
case is <100
set oSheet=Sheets(1)
intSp=i
case is <200
set oSheet=Sheets(2)
intSp=i-100
case else
set oSheet=Sheets(3)
intSp=i-200
end select
.....
'Hier das Einfärben der Zelle etc. unter Bezug auf das Sheet oSheet und die Zelle mit dem Spaltenindex intSp
Next
.....

Damit hast Du in Abhängigkeit der Nummer des Tages das Blatt und den Spaltenindex ermittelt (falls das mit 100 Spalten auf dem ersten und zweiten Blatt nicht stimmt -> ggf. anpassen) und kannst das als Argumente an Deine Paint-Funktion übergeben.
Es gibt sicher noch andere Möglichkeiten, aber das ist mir auf die Schnelle eingefallen.

Steffan.






Anzeige
Re: Zeichnen!!
14.01.2003 14:47:07
MrDull
Danke

Doch leider funktioniert es immer noch nicht richtig!

Ich habe ein Problem bei der Zuweisung des Sheets!!
set oSheet=Sheets(1)
Als was wird diese Variable oSheet deklariert??? Habe es mit vielen Typen probiert doch es klappt nicht!!

Entweder passiert gar nichts oder er kann das Sheet nicht markieren!!

Normalerweise rufe ich es so auf bzw markiere ich es für da Benutzen!
Sheets("Jan-April 03").Select

Jetzt Sheet(oSheets).Select????


Meine Funktion sieht jetzt so aus:


intDatumStartSpalte = DateDiff("d", DateSerial(Year(strDate1), 1, 1), strDate1) + 1
intDatumEndeSpalte = DateDiff("d", DateSerial(Year(strDate2), 1, 1), strDate2) + 1
intZaehler = 4

For i = intDatumStartSpalte To intDatumEndeSpalte
Select Case i
Case Is <= 120
Set intSheets = Sheets("Jan-April 03")
oCells = Range("Day").Row
intSp = i
Case Is <= 243
Set intSheets = Sheets("Mai-Aug 03")
oCells = Range("Day1").Row
intSp = i - 120
Case Else
Set intSheets = Sheets("Sept-Dez 03")
oCells = Range("Day2").Row
intSp = i - 243
End Select

Sheets(oSheet).Select
intSp = intSp + intZaehler
datDate = Cells(oCells, intSp)
If datDate = strDate1 Then
intPosSD = intSp
End If

If datDate = strDate2 Then
intPosED = intSp
If strChoice = 0 Then
Call paintNE(intPosUser, intPosSD, intPosED)
Else
Call paintNA(intPosUser, intPosSD, intPosED)
End If
Exit Sub
End If

Next i

Irgend welche Fehler????

Gruss aus der Schweiz

Anzeige
Re: Zeichnen!!
14.01.2003 21:09:07
Steffan
Hi MrDull,

da ist doch ein wenig durcheinandergekommen. Aber der Reihe nach und erst mal zu Deiner Frage:
set oSheet=Sheets(1)
Hierbei wird ein Worksheetobjekt erstellt, dass auf das erste Blatt in Deiner Datei verweist. 'oSheet' ist im dem Fall das Blatt selber und nicht der Name, deshalb muss 'Sheets(oSheet).Select' zwangsläufig einen Fehler verursachen, weil als Argument des Objekts Sheets() eben ein gültiger Name oder eine Indexnummer (von 1 bis zur Anzahl der Blätter in der Mappe) erwartet wird und kein Objekt.
Wenn Du das Blatt auswählen willst, lautet der Befehl schlicht und einfach: 'oSheet.Select'. In Deinem konkreten Fall ist es u. U. besser die Zuweisung in der Form von 'Set oSheet = Sheets("Jan-April 03")' zu treffen, allerdings hast Du dann sehr schnell Probleme, wenn Du die Datei für das nächste Jahr kopierst und das Blatt umbenennst. Was in deienm Fall besser ist, musst Du selbst entscheiden. Ach ja, dann gibt es noch die Möglichkeit mit dem Codenamen des Blattes: Dazu musst Du im VB-Editor die Tabelle anklicken und im Eigenschaftenfenster einen Namen (im Feld: '(Name)') vergeben, auf den Du dann direkt zugreifen kannst, also z.B. 'set oSheet=DeinNameDesErstenBlattes'.

So und nun zum Code:
Entsprechend der Tagesnummer ermittelst Du für jeden einzelnen Tag zwischen Start- und Enddatum das zugehörige Blatt (oSheet) und die jeweilige Spaltennummer (intSp). Mit oCell ermittelt Du die Reihennummer des benannten Bereiches "Day" (Die Bezeichnung ist etwas irreführend, mit o am Anfang werden in der Regel der Übersichtlichkeit halber Objektvariablen benannt, hierbei handelt es sich aber um eine Ganzzahl also wäre intCell besser, funktioniert aber auch so.). Soweit alles klar. Dann kapier ich nicht mehr so richtig was Du machst. Das einfärben kannst Du doch jetzt ganz einfach mit einem Befehl a la 'oSheets.Cells(intReihe, intSp).Interior.ColorIndex = 3' erledigen. Wenn es für unterschiedliche Nutzer unterschiedliche Zeilen gibt und für unterschiedliche Aktionen unterschiedliche Farben muss natürlich vorher noch die Nummer der Reihe und die Farbnummer ermittelt werden. Da sich das ganze in einer Schleife befinden wird beim nächsten Durchlauf das Blatt und die Spalte für den nächsten Tag ermittelt usw.
Ich hoffe ich hab das einigermaßen verständlich erklärt.
Falls nicht, meld Dich einfach noch mal. Falls Du möchtest (und nix Geheimes drinsteht) kannst Du mir die Datei ja mal zumailen.

Steffan.



Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige