Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 查找&;替换功能会自动将单元格格式化为日期_Vba_Excel - Fatal编程技术网

Vba 查找&;替换功能会自动将单元格格式化为日期

Vba 查找&;替换功能会自动将单元格格式化为日期,vba,excel,Vba,Excel,通常,在将PDF转换为excel文档时,某些值会失真和不准确。确切地说,我的“日期”列中的某些单元格在语法上不包含正确的月份。例如,它不是“XX Jun”,而是“XX Iun”,其中“XX”表示一天(数字) 我使用了查找和替换功能,它几乎可以完美地工作,唯一的警告是,在替换之后,我的单元格被格式化为我希望保留为文本的日期 因此,如果可能的话,我希望解决的问题是使用“查找和替换”功能,而不通过修改VBA代码将单元格格式设置为替换后的日期。 Sub Macro2() Dim rng As Rang

通常,在将PDF转换为excel文档时,某些值会失真和不准确。确切地说,我的“日期”列中的某些单元格在语法上不包含正确的月份。例如,它不是“
XX Jun
”,而是“
XX Iun
”,其中“XX”表示一天(数字)

我使用了查找和替换功能,它几乎可以完美地工作,唯一的警告是,在替换之后,我的单元格被格式化为我希望保留为文本的日期

因此,如果可能的话,我希望解决的问题是使用“查找和替换”功能,而不通过修改VBA代码将单元格格式设置为替换后的日期。

Sub Macro2()

Dim rng As Range

Set rng = Application.InputBox("Select Date Column", "Obtain Range", Type:=8)

rng.Replace What:="ian", Replacement:="Jan"
rng.Replace What:="lan", Replacement:="Jan"
rng.Replace What:="iun", Replacement:="Jun"
rng.Replace What:="lun", Replacement:="Jun"

End Sub
为了清楚起见,我提供了一些执行代码时的屏幕截图

由此:

为此:


而不是调用Range。替换、保留原始列,并使用另一列调用用户定义的函数宏来“修复”错误的OCR值。此函数将接受一个参数,即带有“坏”日期的范围,并返回一个字符串。大概是这样的:

Public Function FixDate(ByVal s As String) As String
  s = Replace$(s, "ian", "Jan")
  [...other replacements...]
  FixDate = s
End Function
那么就这样称呼它:

=固定日期(A2)

这样做的好处是将原始值保留在列A中以供QA/QC使用,并且不会自动转换为日期值

您可以使用正则表达式库(需要引用)来简化各种替换,而不是使用内置的VBA
Replace()
函数,尽管这可能会影响性能。

这对我很有用:

Sub Macro2()

    Dim rng As Range, v, c

    Set rng = Application.InputBox("Select Date Column", "Obtain Range", Type:=8)

    'only look at the used range...
    Set rng = Application.Intersect(rng, rng.Worksheet.UsedRange)
    If rng Is Nothing Then
        MsgBox "no cells to fix!"
        Exit Sub
    End If

    With rng
        .NumberFormat = "@"
        For Each c In .Cells
            v = c.Value
            If Len(v) > 0 Then '<<< ignore empty cells
                v = Replace(v, "ian", "Jan")
                v = Replace(v, "Ian", "Jan")
                v = Replace(v, "iun", "Jun")
                v = Replace(v, "Iun", "Jun")
                c.Value = v
            End If
        Next c
   End With

End Sub
Sub-Macro2()
变光范围,v,c
设置rng=Application.InputBox(“选择日期列”,“获取范围”,类型:=8)
'只看使用的范围。。。
设置rng=Application.Intersect(rng,rng.Worksheet.UsedRange)
如果rng不算什么,那么
MsgBox“没有要修复的单元格!”
出口接头
如果结束
带rng
.NumberFormat=“@”
对于每个c In.单元
v=c.值

如果Len(v)>0,则在替换之前,'
rng.NumberFormat=“@”
anything@TimWilliams我假设这与手动将日期列格式化为“文本”,然后使用查找和替换工具是一样的。如果是这样的话,我已经尝试过了,但没有效果。请在替换前加一个
。e、 g.
rng.Replace What:=“ian”,Replacement:=“Jan”
@Jeeped可以完美地处理从月份开始,然后是天(月日)的单元格。倒过来的单元格就不是这样了。除了不知道这段代码到底是做什么的,也不知道如何使用它(我是初学者),我担心它会扫描我工作表中的所有“ian”。我真的很困惑excel是如何被欺骗而不使用另外两个变量格式化单元格的。。。谢谢以什么方式崩溃?Excel变得不负责任,我必须结束Excel任务。如果您选择了一个很大的范围(例如整个列),则可能会发生这种情况。不过,我只是再次尝试,但它没有崩溃。但是,我必须等待大约20秒,它才能再次响应。是否因为代码应用于列中的每个单元格?如果是这样,将其限制为定义的行数会更好吗?