在Sub例程中使用自定义函数。查看范围内的每个单元格,应用自定义函数

时间:2012-03-23 11:52:47

标签: excel vba

我想创建一个宏,它使用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

1 个答案:

答案 0 :(得分:0)

我可以看到您的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引起的。