Excel VBA - 日期单元格自动改回区域日期格式
Excel VBA - Date Cells automatically change back to Regional Date Format
我需要在活动 sheet 中进行验证。
列 - Q、AA、AI、AS、BH 和 BI 应采用日期格式 mm/dd/yyyy。
如果那些不是mm/dd/yyyy格式;然后单元格将以红色背景着色,并且这些条目将作为超链接发送到同一 Excel 工作簿中的 "Observations" Sheet。
(除此之外我没有其他要求。)
对于所有这些,我有以下代码。
Dim celArray, arr, Key1, KeyCell, celadr, celval, cell6 As Variant
celArray = ("Q,AA,AI,AS,BI,BH")
arr = Split(celArray, ",")
For Key1 = LBound(arr) To UBound(arr)
KeyCell = arr(Key1)
Range(KeyCell & "2:" & KeyCell & "" & LastRow).Select
''Selection.Clearformats
' Selection.TextToColumns Destination:=Range(KeyCell & "2"), DataType:=xlDelimited, _
' TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
' Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
' :=Array(1, 3), TrailingMinusNumbers:=True
' Columns(KeyCell & ":" & KeyCell).NumberFormat = "mm/dd/yyyy"
For Each cell6 In Selection
celadr = cell6.Address
celval = cell6.Value '
If Len(celval) > 1 Then
Dim fistby As Integer
Dim secby As Integer
Dim tmpdte As Integer
Dim tmpyr As Integer
Dim tmpmth As Integer
' If KeyCell = "Q" Then
' Debug.Print celadr
' End If
If IsDate(celval) Then
If KeyCell <> "BI" And KeyCell <> "BH" Then
If Range(celadr).Offset(0, 1).Value <> "" Or Range(celadr).Offset(0, 2).Value <> "" Or _
Range(celadr).Offset(0, 3).Value <> "" Or Range(celadr).Offset(0, 4).Value <> "" Or _
Range(celadr).Offset(0, 5).Value <> "" Or Range(celadr).Offset(0, 6).Value <> "" Or _
Range(celadr).Offset(0, 7).Value <> "" Then
Range(celadr & ":" & Range(celadr).Offset(0, 7).Address).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
End If
End If
End If
fistby = InStr(celval, "/")
secby = InStr(fistby + 1, celval, "/")
If fistby <> 0 Then
tmpdte = Mid(celval, fistby + 1, ((secby - 1) - fistby))
tmpmth = Left(celval, fistby - 1)
'tmpyr = Right(celval, 4)
End If
If KeyCell = "Q" Then
If fistby = 0 Or tmpmth > 12 Or tmpdte > 31 Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
Else
If (Len(celval) <> 7 + fistby Or Mid(celval, fistby, 1) <> "/" Or Mid(celval, secby, 1) <> "/") Or Range(celadr).Offset(0, 8).Value <> "" Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
End If
End If
Else
If fistby = 0 Or tmpmth > 12 Or tmpdte > 31 Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
Else
If (Len(celval) <> 7 + fistby Or Mid(celval, fistby, 1) <> "/" Or Mid(celval, secby, 1) <> "/") Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Dim adrr As Variant
adrr = Sheets("Observations").Range("A65536").End(xlUp).Address
End If
End If
End If
End If
Next cell6
'Columns(KeyCell & ":" & KeyCell).NumberFormat = "mm/dd/yyyy"
Next Key1
上面的代码工作正常并且颜色单元格有条目如 dd-mm-yyyy OR dd/mm/yyyy OR mm-dd-yyyy in Red Background 并发送"Observations" sheet 的条目作为超链接。
但问题是当我尝试更正此类错误条目以更正格式时 - "mm/dd/yyyy" 并重新 运行 我的 vba 代码;我发现那些单元格没有更正并且恢复了原来的错误格式。
即我无法编辑错误的单元格,尽管我没有任何代码来保护单元格不被编辑。
谁能告诉我哪里错了 - 或者上面的代码有什么改进吗?
这是由于 'Regional formatting problem'
我将日期的数字格式从 'date' 格式类别更改为 'text',现在可以更正错误的日期单元格。
我需要在活动 sheet 中进行验证。
列 - Q、AA、AI、AS、BH 和 BI 应采用日期格式 mm/dd/yyyy。
如果那些不是mm/dd/yyyy格式;然后单元格将以红色背景着色,并且这些条目将作为超链接发送到同一 Excel 工作簿中的 "Observations" Sheet。
(除此之外我没有其他要求。)
对于所有这些,我有以下代码。
Dim celArray, arr, Key1, KeyCell, celadr, celval, cell6 As Variant
celArray = ("Q,AA,AI,AS,BI,BH")
arr = Split(celArray, ",")
For Key1 = LBound(arr) To UBound(arr)
KeyCell = arr(Key1)
Range(KeyCell & "2:" & KeyCell & "" & LastRow).Select
''Selection.Clearformats
' Selection.TextToColumns Destination:=Range(KeyCell & "2"), DataType:=xlDelimited, _
' TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
' Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
' :=Array(1, 3), TrailingMinusNumbers:=True
' Columns(KeyCell & ":" & KeyCell).NumberFormat = "mm/dd/yyyy"
For Each cell6 In Selection
celadr = cell6.Address
celval = cell6.Value '
If Len(celval) > 1 Then
Dim fistby As Integer
Dim secby As Integer
Dim tmpdte As Integer
Dim tmpyr As Integer
Dim tmpmth As Integer
' If KeyCell = "Q" Then
' Debug.Print celadr
' End If
If IsDate(celval) Then
If KeyCell <> "BI" And KeyCell <> "BH" Then
If Range(celadr).Offset(0, 1).Value <> "" Or Range(celadr).Offset(0, 2).Value <> "" Or _
Range(celadr).Offset(0, 3).Value <> "" Or Range(celadr).Offset(0, 4).Value <> "" Or _
Range(celadr).Offset(0, 5).Value <> "" Or Range(celadr).Offset(0, 6).Value <> "" Or _
Range(celadr).Offset(0, 7).Value <> "" Then
Range(celadr & ":" & Range(celadr).Offset(0, 7).Address).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
End If
End If
End If
fistby = InStr(celval, "/")
secby = InStr(fistby + 1, celval, "/")
If fistby <> 0 Then
tmpdte = Mid(celval, fistby + 1, ((secby - 1) - fistby))
tmpmth = Left(celval, fistby - 1)
'tmpyr = Right(celval, 4)
End If
If KeyCell = "Q" Then
If fistby = 0 Or tmpmth > 12 Or tmpdte > 31 Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
Else
If (Len(celval) <> 7 + fistby Or Mid(celval, fistby, 1) <> "/" Or Mid(celval, secby, 1) <> "/") Or Range(celadr).Offset(0, 8).Value <> "" Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
End If
End If
Else
If fistby = 0 Or tmpmth > 12 Or tmpdte > 31 Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Sheets("Observations").Hyperlinks.Add Anchor:=Sheets("Observations").Range("A65536").End(xlUp), Address:="", SubAddress:= _
strstr
Else
If (Len(celval) <> 7 + fistby Or Mid(celval, fistby, 1) <> "/" Or Mid(celval, secby, 1) <> "/") Then
Range(celadr).Interior.Color = vbRed
shname = ActiveSheet.Name
Sheets("Observations").Range("A65536").End(xlUp).Offset(1, 0).Value = celval
strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0)
Dim adrr As Variant
adrr = Sheets("Observations").Range("A65536").End(xlUp).Address
End If
End If
End If
End If
Next cell6
'Columns(KeyCell & ":" & KeyCell).NumberFormat = "mm/dd/yyyy"
Next Key1
上面的代码工作正常并且颜色单元格有条目如 dd-mm-yyyy OR dd/mm/yyyy OR mm-dd-yyyy in Red Background 并发送"Observations" sheet 的条目作为超链接。
但问题是当我尝试更正此类错误条目以更正格式时 - "mm/dd/yyyy" 并重新 运行 我的 vba 代码;我发现那些单元格没有更正并且恢复了原来的错误格式。
即我无法编辑错误的单元格,尽管我没有任何代码来保护单元格不被编辑。
谁能告诉我哪里错了 - 或者上面的代码有什么改进吗?
这是由于 'Regional formatting problem'
我将日期的数字格式从 'date' 格式类别更改为 'text',现在可以更正错误的日期单元格。