Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Warum NV bei meiner Rang Formel?

Forumthread: Warum NV bei meiner Rang Formel?

Warum NV bei meiner Rang Formel?
24.10.2025 00:02:44
Christian
Hallo,

bitte helft mir,

wie der Betreff ja schon sagt, gibt meine Formel in F100 #NV aus.
Zwischen den Datum in E100 und den anderen Daten gibt es einen Unterschied, das Datum in E100 wurde durch das Makro , welches sich in der Datei befindet, eingefügt, während die anderen Daten durch Copy + Paste oder Tippen eingefügt wurden.
Was muss ich tun, damit die Formel auch bei durch das Makro eingefügten Daten funktioniert?
Ich habs ja schon probiert, in dem ich das Makro das Datum in dd.mm.yyyy umwandeln lasse, aber es geht trotzdem nicht.

https://www.herber.de/bbs/user/179348.xlsm

Danke
Christian
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 00:43:50
JoWE
Hallo Christian,
Du musst also den String umwandeln in ein DAtum.
In Deinem Makro dimensionierst Du die Variable "Datum" allerdings ja selbst als String, daran liegts wohl,
da hilft es auch nicht den Text lediglich wie ein Datum "dd.mm.yyyy" aussehen zu lassen!!
Gruß
Jochen
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 09:05:33
Luschi
Hallo Christian,

- wie soll man Dir helfen, wenn Du die eigentlichen Quelldaten (Spalte 'G' der Tabelle) nicht mitlieferst
- denn werden ja während des 1. Makroduchlaufes gelöscht (arrG(i, 1) = "" ' URL löschen)
- sowas macht man zum Zeitpunkt der Makroentwicklung NICHT!
- stelle also die Daten der Spalte 'G' mit bereit und dann wird man auch helfen können

Gruß von Luschi
aus klein-Paris
Anzeige
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 09:29:22
Christian
Hallo luschi, sorry du hast ja recht sitze nur im Moment in der Bahn und hab deshalb die Datei nicht zur Hand. Aber die URL, die in G100 steht und durch das Makro überprüft wird, lautet https://www.themoviedb.org/person/26723-katheryn-winnick

Die anderen URL kann ich gerne noch nachliefern wenn ich wieder daheim bin, aber dies ist die einzige, in der ein datum zum eintragen vorhanden ist.

Danke
Christian
Anzeige
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 09:36:41
Christian
aber du brauchst auch einen account bei themoviedb und einen key, den ich jetzt einfach mal in secret umgenannt habe im makro damit das makro funktioniert, daher hab ich gehofft, jemand findet auch ohne meine zugangsadaten den fehler.
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 13:05:56
Kuwer
Hallo Christian,

wie Jochen schon schrieb, muss das Textdatum umgewandelt werden:
    ' Geburtstage eintragen und URLs löschen

For i = 1 To UBound(arrG, 1)
url = Trim(arrG(i, 1))
If url > "" Then
datum = dictURLs(url)
If datum > "" Then
arrE(i, 1) = CDate(datum) 'Rückgabe als echtes Datum mittels CDate
arrG(i, 1) = "" ' URL löschen
updated = True
End If
End If
Next i

Gruß, Uwe
Anzeige
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 13:10:13
Christian
Hallo Uwe,

da hab ich es mir ja eben ziemlich kompliziert gemacht. Danke, funktioniert.

Christian
AW: in E100 steht ein String (also ein Text) kein Datum...
24.10.2025 13:02:06
Christian
Hallo,

ich habe jetzt auf Jochens Rat hin, das Makro geändert in
Option Explicit


' === Benutzerkonfiguration ===
Const TMDB_TOKEN As String = "eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIxMzAwNTFhOTI2YmIxZWY1ZTRjM2EyZTEyNGY0YmZjYiIsIm5iZiI6MTc1Njk5NzkyMy4zODMwMDAxLCJzdWIiOiI2OGI5YTkyM2RlNjU2M2ZkZWM4Y2RkZTAiLCJzY29wZXMiOlsiYXBpX3JlYWQiXSwidmVyc2lvbiI6MX0.K6xcskKQHVCQoeeg2OZhdTEKksGNcPi8T9wdLBQ1SV0"

Sub UpdatePersonBirthdays()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Tabelle1")

Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row
If lastRow 2 Then Exit Sub ' keine Daten

Dim arrG As Variant, arrE As Variant
arrG = ws.Range("G2:G" & lastRow).Value
arrE = ws.Range("E2:E" & lastRow).Value

Dim dictURLs As Object
Set dictURLs = CreateObject("Scripting.Dictionary")

Dim i As Long, url As String, id As String, datum As Variant
Dim updated As Boolean: updated = False

' URLs sammeln und nur einmal abfragen
For i = 1 To UBound(arrG, 1)
url = Trim(arrG(i, 1))
If url > "" Then
If Not dictURLs.Exists(url) Then
id = GetTMDbID(url)
If id > "" Then
dictURLs(url) = GetPersonBirthday(id) ' Variant = echtes Datum oder Empty
Else
dictURLs(url) = Empty
End If
End If
End If
Next i

' Geburtstage eintragen und URLs löschen
For i = 1 To UBound(arrG, 1)
url = Trim(arrG(i, 1))
If url > "" Then
datum = dictURLs(url)
If Not IsEmpty(datum) Then
arrE(i, 1) = datum ' echtes Date!
arrG(i, 1) = "" ' URL löschen
updated = True
End If
End If
Next i

' Zurückschreiben
ws.Range("E2:E" & lastRow).Value = arrE
ws.Range("G2:G" & lastRow).Value = arrG

' Anzeigeformat für Excel sauber setzen
ws.Range("E2:E" & lastRow).NumberFormat = "dd.mm.yyyy"

If updated Then MsgBox "Geburtsdaten erfolgreich aktualisiert!", vbInformation, "Fertig"
End Sub

' ======================================
' TMDb-ID aus URL extrahieren (auch 12345-name)
' ======================================
Function GetTMDbID(url As String) As String
Dim parts() As String, temp As String, i As Long
parts = Split(Trim(url), "/")
For i = LBound(parts) To UBound(parts) - 1
If parts(i) = "person" Then
temp = Split(parts(i + 1), "-")(0)
If IsNumeric(temp) Then
GetTMDbID = temp
Exit Function
End If
End If
Next
GetTMDbID = ""
End Function

' ======================================
' Geburtstag als echtes Date zurückgeben
' ======================================
Function GetPersonBirthday(id As String) As Variant
Dim http As Object, url As String
Set http = CreateObject("MSXML2.XMLHTTP")

url = "https://api.themoviedb.org/3/person/" & id
http.Open "GET", url, False
http.setRequestHeader "Authorization", "Bearer " & TMDB_TOKEN
http.setRequestHeader "Content-Type", "application/json;charset=utf-8"
http.Send

If http.Status = 200 Then
Dim JSON As Object
Set JSON = JsonConverter.ParseJson(http.responseText)
If JSON.Exists("birthday") Then
If JSON("birthday") > "" Then
GetPersonBirthday = CDate(JSON("birthday")) ' echtes Datum!
Exit Function
End If
End If
End If

GetPersonBirthday = Empty ' kein Datum gefunden
End Function


so funktioniert es.
Danke
Christian
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18