VBA - Format daty "mm/dd/yyyy"


Mój format pliku Excel do dat - 30 marca 2016 10: 12: 27: 396AM Chcę zmienić format na
MM/DD/YYYY
, ale mam błąd kod..

Błąd wykonania „13”: niezgodność typów

to jest wiersz, w którym otrzymałem błąd
SecondDate = Trim (Sheet2.Range ("B" & amp; RowNo) .Value)

Uwaga
: Dane z kolumn A i B są datami
Mój kod:
Dim Result, RowNo As Long
Dim FirstDate As Variant
Dim SecondDate As VariantRowNo = 2 FirstDate = Trim(Sheet2.Range("A" & RowNo).Value)
SecondDate = Trim(Sheet2.Range("B" & RowNo).Value)
FirstDate = Format(FirstDate, "mm/dd/yyyy")
SecondDate = Format(SecondDate, "mm/dd/yyyy") Do Until Sheet2.Cells(RowNo, 1) = "" FirstDate = Sheet2.Cells(RowNo, 1)
SecondDate = Sheet2.Cells(RowNo, 2) If DateDiff("d", FirstDate, SecondDate) >= 15 Then
Sheet2.Cells(RowNo, 3) = "1"
Sheet2.Cells(RowNo, 4) = "2" End If RowNo = RowNo + 1
Loop

Naprawdę czuję, że jestem na prawej stronie ścieżki .. Mam coś przegapiłem?

Aktualizacja
: Mój skrypt otrzyma dane z
kolumna A
i
Kolumna B
i, używając
funkcja DateDiff, i

odjąć

obie kolumny, jeśli różnica wynosi & < 15, oznaczając ją z
kolumny C i D
jako
1, 2

Uwaga

:
  • Po prostu odliczam dni z obu kolumn. Ale czy można odjąć, a dni i lata
  • to działa, jeśli używam formatu mm/dd/rrrr w programie Excel, ale jeśli używam innego formatu, otrzymuję niezgodność Błędy


Zaktualizowany 2.

:
Column A | Column B | Column C
Mar 1 2016 10:12:27:396AM | Mar 30 2016 10:12:27:396AM |
Mar 1 2016 10:12:27:396AM | Mar 30 2016 10:12:27:396AM |

W moim pliku jest to format daty, jeśli spróbujesz go jako próbki danych, nie będzie działać, być może VBA nie rozpoznaje go jako dateformat?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Być może pomoże rozwiązać to, co próbujesz zrobić.
Wejście testowe:
https://i.stack.imgur.com/YKlKG.png
Wyjście testowe:
https://i.stack.imgur.com/KT3me.png
Kod:
Sub DateStuff()
Dim FirstDate As Range, SecondDate As Range
Dim RowNo As Long Set FirstDate = Sheet4.Range("A1")
Set SecondDate = Sheet4.Range("A2") FirstDate.NumberFormat = "mm/dd/yyyy"
SecondDate.NumberFormat = "mm/dd/yyyy" RowNo = 2
Do Until Sheet4.Cells(RowNo, 1) = ""
Set FirstDate = Sheet4.Cells(RowNo, 1)
Set SecondDate = Sheet4.Cells(RowNo, 2)
If IsDate(FirstDate.Value) And IsDate(SecondDate.Value) Then
If DateDiff("d", FirstDate, SecondDate) >= 15 Then
Sheet4.Cells(RowNo, 3) = 1
Sheet4.Cells(RowNo, 4) = 2
End If
End If
RowNo = RowNo + 1
Loop
End Sub

Proszę spędzić kilka minut, aby zrozumieć ten kod:
  • Firstdate i Secondate są typami danych zasięgu, a nie daty lub opcji. Dane w komórkach, do których wskazują, to data lub coś innego.
  • Podczas ustawiania formatu określa, jak jest on wyświetlany na arkuszu. To nie jest formatowanie ciągu znaków VBA.
  • Przed dokonaniem wywołania datingifowego upewnij się, że pierwotne, a sekundę naprawdę zawierają typy danych Data w komórkach, uniemożliwi to wiele błędów.
  • Operacje na dzisiejszych typach danych przy użyciu funkcji daty NIE są zależne od formatowania. Używają wewnętrznego typu daty. TYLKO formatowanie wpływa na to, jak data jest konwertowana na ciąg i/lub wyświetlana na arkuszach.

Poprosiłeś o czek zamiast dnia roku. Pomagają w tym wbudowane funkcje VBA (takie jak rok, miesiąc itp.).

Jak uzyskać aktualizację na pytanie

:
Nie jestem pewien, gdzie otrzymasz tymczasowe kody, ale Excel nie rozpoznaje
: 000
dla milisekund. Używa .000 . Patrz poniżej ...
https://i.stack.imgur.com/TOB5n.png

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się