< návrat zpět
MS Excel
Téma: Run time error 1004
Zaslal/a Ridder 11.4.2023 14:59
Zdravím,
makra vůbec neumím a toto mi vytvořil ChatGPT. Problém je, že mi to stále hází run time error 1004 method range of object _worksheet failed
Private Sub Worksheet_Change(ByVal Target As Range)
Dim testValue As Variant
Dim myRange As Range
Set myRange = Range("D8:D372")
If Target.Cells.Count > 1 Then Exit Sub 'ignoruje změny s více než jednou buňkou
If Intersect(Target, myRange) Is Nothing Then Exit Sub 'ignoruje změny mimo určený rozsah
testValue = Target.Value
If IsNumeric(testValue) Then
If testValue >= 0 And testValue < 1 Then
Target.Value = Format(testValue, "h:mm")
ElseIf testValue >= 1 And testValue < 24 Then
If Int(testValue) = testValue Then
Target.Value = Format(testValue, "0") & ":00"
Else
Target.Value = Format(testValue, "h:mm")
End If
End If
End If
End Sub
Pokud bych chtěl, aby makro fungovalo pouze ve sloupci E, tak je kód
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub 'ignoruje změny s více než jednou buňkou
If Target.Column <> 5 Then Exit Sub 'ignoruje změny mimo sloupec E
Dim testValue As Variant
testValue = Target.Value
If IsNumeric(testValue) Then
If testValue >= 0 And testValue < 1 Then
Target.Value = Format(testValue, "h:mm")
ElseIf testValue >= 1 And testValue < 24 Then
If Int(testValue) = testValue Then
Target.Value = Format(testValue, "0") & ":00"
Else
Target.Value = Format(testValue, "h:mm")
End If
End If
End If
End Sub
A ten funguje dokonale. Kde je prosím chyba pokud potřebuji, aby makro fungovalo v D8:D372?
Dingo(11.4.2023 15:47)#054780 Testoval jsem a funguje mi tento kód:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim testValue As Variant
If Target.Cells.Count > 1 Then Exit Sub 'ignoruje zmìny s více než jednou buòkou
If Intersect(Target, Range(Cells(8, 4), Cells(372, 4))) Is Nothing Then Exit Sub 'ignoruje zmìny mimo urèený rozsah
testValue = Target.Value
If IsNumeric(testValue) Then
If testValue >= 0 And testValue < 1 Then
Target.Value = Format(testValue, "h:mm")
ElseIf testValue >= 1 And testValue < 24 Then
If Int(testValue) = testValue Then
Target.Value = Format(testValue, "0") & ":00"
Else
Target.Value = Format(testValue, "h:mm")
End If
End If
End If
End Subcitovat
JoKe(11.4.2023 18:52)#054781 &Ridder
kód je zacyklený.
Změna v buňce vyvolá běh kódu, který v buňce provede požadovanou změnu, ale tato změna spustí kód znovu.
citovat
Urobte si dočasné odstavenie Events, napr.:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim testValue As Variant
Dim myRange As Range
Dim myChangedRNG As Range
Set myRange = Range("D8:D372")
Set myChangedRNG = Intersect(Target, myRange)
If myChangedRNG Is Nothing Then Exit Sub 'ignoruje změny mimo určený rozsah
If myChangedRNG.Cells.Count > 1 Then Exit Sub 'ignoruje změny s více než jednou buňkou
testValue = myChangedRNG.Value
If IsNumeric(testValue) Then
Application.EnableEvents = False
On Error GoTo KONIECTESTU
If testValue >= 0 And testValue < 1 Then
myChangedRNG.Value = Format(testValue, "h:mm")
ElseIf testValue >= 1 And testValue < 24 Then
If Int(testValue) = testValue Then
myChangedRNG.Value = Format(testValue, "0") & ":00"
Else
myChangedRNG.Value = Format(testValue, "h:mm")
End If
End If
KONIECTESTU:
On Error GoTo 0
Application.EnableEvents = True
End If
End Subcitovat