Teiltext auslesen und neu wiedergeben
#1
Hallo,

ich möchte, dass es egal ist ob man in eine Zelle ein Datum oder eine KW im Format "KW 35 2016" eingibt, es soll immer das Datum ausgegeben werden.

Dazu habe ich mir mit meinen beschränkten VBA Kenntnissen folgenden Code zusammengebastelt:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Target.Column
   Case 7
       If Left(RC, 2) = "KW" Then
'Ist das "RC" an der Stelle richtig? Ich will auf die gerade beschriebene Zelle zugreifen. Ich weiß dass man mit "RC[1]" auf die Nachbar Zelle zugreift, "RC[0]" akzeptiert er nicht.
            Dim KW As String
           Dim Jahr As String
'Ich wollte es als Integer machen, da der Teil ja immer Zahlen sind, dann kam aber eine Fehlermeldung.
            KW = Mid(RC, 4, 2)
           Jahr = Right(RC, 4)
           Cells(Target.Row, 6).FormulaR1C1 = "= Date(Jahr,1,7*KW - 3 - Weekday(Date(Jahr,,),3))"
'Eigentlich will ich es wieder in Spalte 7 haben (ist das möglich?) aus Testzwecken ist es erst mal Spalte 6.
        End If
End Select
Application.EnableEvents = True
End Sub
Problem ist, dass, wenn der Code genau so wie oben ist, nichts passiert und wenn ich das "If Left(RC, 2) = "KW" Then" weg lasse setzt es zwar die Formel ein, allerdings bleiben "Jahr" und "KW" stehen und werden nicht ersetzt.
Was mache ich falsch?
Schon mal danke für die Hilfe!
Viele Grüße
Top
#2
Hallo,

im ersten und minimalen Test hat dieser Code geholfen:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Column
  Case 7
      If Left(UCase(Target.Value), 2) = "KW" Then
           KW = Mid(Target.Value, 4, 2)
          Jahr = Right(Target.Value, 4)
          Jan1 = DateValue("1.1." & Jahr)
          nDatum = Jan1 + 7 * KW - WorksheetFunction.Weekday(Jan1, 2) + 1
          Target.Offset(0, 1) = nDatum
       End If
End Select
End Sub


mfg
Top
#3
Hallo,

seltsam das noch keiner an den Thread heran gegangen ist.  Formeln ist nicht mein Fachgebiet, aber ich sehe Unstimmigkeiten im Code die mich stören.

Zitat:FormulaR1C1 = "= Date(Jahr,1,7*KW - 3 - Weekday(Date(Jahr,,),3))"


Du machst da in der Formel eine Multiplikation und Subtraktion , setzt aber vorher mit Dim die Variable KW und Jahr auf String = Text.  
Das kann meines Wissens nicht klappen! Excel ist beim Unterschied zwischen Zahlen und Text sehr pingelig! 

Zitat:Ich weiß dass man mit "RC[1]" auf die Nachbar Zelle zugreift, "RC[0]" akzeptiert er nicht.

Auch das ist nicht richtig, du hast R1C1 noch nicht richtig verstanden. Du gehst offenbar von Offset(0, 1) für Nachbarzellen aus. Das ist auch korrekt. Cells(1,1) bedeutet konkret: die Zelle in der du gerade stehtst. Probier es bitte mal mit Select aus. Dann siehst du welche Zelle selektiert wird. Bist du in der Spalte B,C und Zeile 2,3, kannst du auch Cells(0, 0).Select waehlen. Jetzt gehst du aber genau um 1 Zelle rückwaerts!! Dieser feine Unterschied verwirrt Anfaenger ungemein! Man beachte die Feinheiten zwischen Cells().Select und Range.Offset().Select !!  

Du machst auch  Left(RC und Mid(RC) ich kann aber nicht sehen wo diese RC Variable herkomm??  Die ist nirgendwo deklariert!  Kann es sein das dein Makro deshalb nicht lfunktioniert??  Bitte selbst prüfen und korrigieren.  Jahr und KW sollten als Integer deklariert sein.  Wenn dabei ein Laufzeitfehler raus kommt stimmt die Auswertung nicht!  Dann prüfe bitte per MsgBox welchen Wert RC hat?  Ob das Jahr und KW wirklich darin vorkommt??

mfg  Gast 123
Top
#4
Danke euch beiden! Es funktioniert.

@Fennek: super code :) warum musste ich die Variablen nicht als Integer oder ähnliches definieren?

@Gast123: danke für die Erklärung wie man welche (Nachbar)Zelle auswählt. Das mit "RC[1]" hat an anderer Stelle schon mal funktioniert und da "RC[0]" nicht möglich war dachte ich "RC" reicht. Ich hatte es, wie du richtig festgestellt hast, überhaupt nicht verstanden.

Viele Grüße
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste