Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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
Antworten 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
Antworten Top


Gehe zu:


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