Date time picker kodunda "Type mismatch" Hatası

tahkurth

Altın Üye
Katılım
26 Ağustos 2019
Mesajlar
27
Excel Vers. ve Dili
2010 Türkçe
Altın Üyelik Bitiş Tarihi
05-10-2027
Selam ustadlarım. Bir userform üzerinde çalışan takvim seçici kodlamasında hata alıyorum. Değişkenleri değiştirmeme rağmen hala aynı hatayı alıyorum. Nerede yanlış yaptığımı bir türlü bulamadım. Zaman ayırıp yardımcı olabilir misiniz?
 

Ekli dosyalar

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Aşağıdaki değişkeni Date yani tarih olarak tanımlamışsınız fakat değer olarak gün yani 1 ile 31 rakamı arasında bir değer atıyorsunuz ve tarih olarak tanımlandığı için sonuç olarak bir tarih döndürüyor.
As Date değil As Integer olmalı
Kod:
Dim aysonu_gun As Date
aysonu_gun = Day(aysonu)


ilk_kutu_no ve son_kutu_no değişkenlerini metin olarak tanımlamışsınız daha sonra da aysonu_gun yani bir tarih ile toplama işlemi yapmaya çalışıyorsunuz.
Tarih ile metin toplanamaz.
ilk_kutu_no ve son_kutu_no String değil Integer olmalı.

Kod:
Dim ilk_kutu_no As String
Dim son_kutu_no As String

son_kutu_no = ilk_kutu_no + aysonu_gun
 

tahkurth

Altın Üye
Katılım
26 Ağustos 2019
Mesajlar
27
Excel Vers. ve Dili
2010 Türkçe
Altın Üyelik Bitiş Tarihi
05-10-2027
Merhaba, Muzaffer Ali bey.
Cevabınız için teşekkürler fakat dediğiniz şekilde değişkenleri değiştirdiğimde yine aynı hatayı alıyorum. Zaten karmaşa burada, değişkenleri pek çok şekilde değiştirdim ama sonuca ulaşamadım. Yardımlarınızı bekliyorum.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Kod:
ilk_kutu_no = Right(bul, 1)
Satırı ile bul değişkeninin sağdan 1. karakterini almak istiyorsunuz fakat bul değişkeni boş, hiçbir değer atanmamış.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Kodları F8 tuşuna basarak manuel çalıştırırsanız hata olan satırı bulup çözüm arayabilirsiniz.
 

tahkurth

Altın Üye
Katılım
26 Ağustos 2019
Mesajlar
27
Excel Vers. ve Dili
2010 Türkçe
Altın Üyelik Bitiş Tarihi
05-10-2027
Option Explicit


Private Sub UserForm_Initialize()
Me.TextBox4 = Month(Now)
Me.TextBox1 = Year(Now)
Me.TextBox2 = MonthName(Me.TextBox4)

Call olustur

End Sub
Private Sub CommandButton1_Click()
If Me.TextBox1 < 2019 Then Exit Sub
Me.TextBox1 = Me.TextBox1 - 1
Call olustur
End Sub

Private Sub CommandButton2_Click()
If Me.TextBox1 > 2099 Then Exit Sub
Me.TextBox1 = Me.TextBox1 + 1
Call olustur
End Sub

Private Sub CommandButton3_Click()
Dim suan As String
suan = Me.TextBox4
If suan = 12 Then Exit Sub
suan = suan + 1
Me.TextBox2 = MonthName(suan)
Me.TextBox4 = suan
Call olustur
End Sub

Private Sub CommandButton4_Click()
Dim suan As String
suan = Me.TextBox4
If suan = 1 Then Exit Sub
suan = suan - 1
Me.TextBox2 = MonthName(suan)
Me.TextBox4 = suan
Call olustur



End Sub

Sub olustur()

Dim i As Integer
For i = 1 To 42
dtp.Controls("t" & i) = ""
Next i

Dim bas_gun As String
Dim bas_tarih As Date
bas_gun = Format(DateSerial(dtp.TextBox1, dtp.TextBox4, 1), "dddd")
bas_tarih = CDate("01" & "." & dtp.TextBox4 & "." & dtp.TextBox1)

Dim aysonu As Date
Dim aysonu_gun As Integer
aysonu = Format(WorksheetFunction.EoMonth(bas_tarih, 0), "dd.mm.yyy")
aysonu_gun = Day(aysonu)

Select Case bas_gun
Case "Pazartesi"
dtp.t1 = 1
Case "Salı"
dtp.t2 = 1
Case "Çarşamba"
dtp.t3 = 1
Case "Perşembe"
dtp.t4 = 1
Case "Cuma"
dtp.t5 = 1
Case "Cumartesi"
dtp.t6 = 1
Case "Pazar"
dtp.t7 = 1
End Select

Dim c As MSForms.Control
For Each c In dtp.Controls
Dim bul As Integer

If TypeName(c) = "Textbox" Then

If c.Text = "1" Then

bul = c.Name


End If
End If
Next

Dim ilk_kutu_no As Integer
ilk_kutu_no = Right(bul, 1)

Dim son_kutu_no As Integer
son_kutu_no = ilk_kutu_no + aysonu_gun


For i = ilk_kutu_no + 1 To son_kutu_no - 1
dtp.Controls("t" & i).Value = dtp.Controls("t" & i - 1).Value + 1
dtp.Controls("t" & i).Visible = True
dtp.Controls("t" & i - 1).Visible = True

Next i

For i = 1 To 42
If dtp.Controls("t" & i).Value = "" Then
dtp.Controls("t" & i).Visible = False

End If
Next i
End Sub







Revize ettikten sonra "Run Time Error 2147024809" Hatası almaya başladım.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
En son ne revize yaptınız anlamadım ama en son söylediklerime ek olarak söylüyorum.

Kod:
If TypeName(c) = "Textbox" Then
Satırını aşağıdaki gibi yapın. Büyük küçük harf duyarlılığından oluyor.
Kod:
If TypeName(c) = "TextBox" Then
 

tahkurth

Altın Üye
Katılım
26 Ağustos 2019
Mesajlar
27
Excel Vers. ve Dili
2010 Türkçe
Altın Üyelik Bitiş Tarihi
05-10-2027
Teşekkür ederim belirtiğiniz düzeltmeden sonra userform çalıştı. Fakat ay seçinden sonra "Nisan" ayına geçtiğimde,

aysonu = Format(WorksheetFunction.EoMonth(bas_tarih, 0), "dd.mm.yyy")

bu kod da yine "Type mismatch" Hatası alıyorum.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Kod:
aysonu = Format(WorksheetFunction.EoMonth(bas_tarih, 0), "dd.mm.yyy")
yıl kısmını aşağıdaki gibi düzeltin
Kod:
aysonu = Format(WorksheetFunction.EoMonth(bas_tarih, 0), "dd.mm.yyyy")
 

tahkurth

Altın Üye
Katılım
26 Ağustos 2019
Mesajlar
27
Excel Vers. ve Dili
2010 Türkçe
Altın Üyelik Bitiş Tarihi
05-10-2027
Muzaffer Ali bey çok teşekkür ederim. Problemlerin hepsi çözüldü ve sorunsuz çalışıyor. Takip eden yada arayan arkadaşlar için çalışan kodları aşağıda paylaşıyorum. Kendilerine göre revize edip kullanabilirler.


Option Explicit


Private Sub UserForm_Initialize()
Me.TextBox4 = Month(Now)
Me.TextBox1 = Year(Now)
Me.TextBox2 = MonthName(Me.TextBox4)

Call olustur

End Sub
Private Sub CommandButton1_Click()
If Me.TextBox1 < 2019 Then Exit Sub
Me.TextBox1 = Me.TextBox1 - 1
Call olustur
End Sub

Private Sub CommandButton2_Click()
If Me.TextBox1 > 2099 Then Exit Sub
Me.TextBox1 = Me.TextBox1 + 1
Call olustur
End Sub

Private Sub CommandButton3_Click()
Dim suan As String
suan = Me.TextBox4
If suan = 12 Then Exit Sub
suan = suan + 1
Me.TextBox2 = MonthName(suan)
Me.TextBox4 = suan
Call olustur
End Sub

Private Sub CommandButton4_Click()
Dim suan As String
suan = Me.TextBox4
If suan = 1 Then Exit Sub
suan = suan - 1
Me.TextBox2 = MonthName(suan)
Me.TextBox4 = suan
Call olustur



End Sub

Sub olustur()

Dim i As Integer
For i = 1 To 42
dtp.Controls("t" & i) = ""
Next i

Dim bas_gun As String
Dim bas_tarih As Date
bas_gun = Format(DateSerial(dtp.TextBox1, dtp.TextBox4, 1), "dddd")
bas_tarih = CDate("01" & "." & dtp.TextBox4 & "." & dtp.TextBox1)

Dim aysonu As Date
Dim aysonu_gun As Integer
aysonu = Format(WorksheetFunction.EoMonth(bas_tarih, 0), "dd.mm.yyyy")
aysonu_gun = Day(aysonu)

Select Case bas_gun
Case "Pazartesi"
dtp.t1 = 1
Case "Salı"
dtp.t2 = 1
Case "Çarşamba"
dtp.t3 = 1
Case "Perşembe"
dtp.t4 = 1
Case "Cuma"
dtp.t5 = 1
Case "Cumartesi"
dtp.t6 = 1
Case "Pazar"
dtp.t7 = 1
End Select

Dim c As MSForms.Control
For Each c In dtp.Controls
Dim bul As String

If TypeName(c) = "TextBox" Then

If c.Text = "1" Then

bul = c.Name


End If
End If
Next

Dim ilk_kutu_no As Integer
ilk_kutu_no = Right(bul, 1)

Dim son_kutu_no As Integer
son_kutu_no = ilk_kutu_no + aysonu_gun


For i = ilk_kutu_no + 1 To son_kutu_no - 1
dtp.Controls("t" & i).Value = dtp.Controls("t" & i - 1).Value + 1
dtp.Controls("t" & i).Visible = True
dtp.Controls("t" & i - 1).Visible = True

Next i

For i = 1 To 42
If dtp.Controls("t" & i).Value = "" Then
dtp.Controls("t" & i).Visible = False

End If
Next i
End Sub
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,165
Excel Vers. ve Dili
2019 Türkçe
Rica ederim. Kolay gelsin.
 
Üst