使用子程序中的自定义函数.查看范围内的每个单元格,应用自定义函数



我想创建一个宏,该宏使用stackoverflow的用户帮助我学习的函数(ConvertDates)。

这是迄今为止的代码:

Sub CopyTempToFinal()
    Worksheets("g_temp").Range("A:CU").Copy
    With Worksheets("g_final")
        .Range("A:CU").PasteSpecial 12
    End With
End Sub
Sub CovertCellsToDate()
    ActiveSheet.Name = "g_final"
    Dim LastRowRec As Long
    LastRowRec = ThisWorkbook.Sheets("g_final").Range("A65536").End(xlUp).Row
    For Each c In ActiveSheet.Range(Cells(1, 1), Cells(LastRowRec, 98)).Cells
        If InStr(c, "/") > 0 Then c = CovertDates(c)
    Next
End Sub

在从temp复制到final之后,我想搜索列范围A:CU中直到最后填充行的单元格,然后对它们应用ConvertDates函数。我想把上面两个子例程结合起来。

要应用的功能是:

Function ConvertDates(ValueDate As Range)
    Dim Dates() As String
    Dates = Split(ValueDate.Text, "/")
    ConvertDates = Dates(1) & "/" & Dates(0) & "/" & Dates(2)
End Function

我可以看到你的CovertCellsToDate潜艇有一些问题。这应该可以工作:

Sub CovertCellsToDate()
    Dim c As Range
    ActiveSheet.Name = "g_final"
    Dim LastRowRec As Long
    LastRowRec = ThisWorkbook.Sheets("g_final").Range("A65536").End(xlUp).Row
    For Each c In ThisWorkbook.Sheets("g_final").Range(Cells(1, 1), Cells(LastRowRec, 98)).Cells
        If InStr(c, "/") > 0 Then c = ConvertDates(c)
    Next
End Sub
  1. 正如@TimWilliams提到的ConvertDates()拼写错误
  2. 你需要Dim c As Range
  3. 使用ActiveSheet时要小心。如果您需要使用它,您需要确保g_sheet是活动(当前选择的)工作表,否则会出现错误。重命名工作表后,最好始终使用ThisWorkbook.Sheets("g_final")。我没有看到你在复制临时工作表后在任何地方更改活动工作表,所以你的问题可能是由ActiveSheet引起的

最新更新