宏在不同电脑上的工作方式不同

问题描述 投票:0回答:1

大家好,感谢帮助我的人。

我对一个我无法解决的问题感到疯狂。

让我解释一下,我创建了一个宏来分析数据库,在分析中,它将月份和年份的日期拆分为两个不同的单元格。日期栏下方:

enter image description here

我写的代码是:

    sh1.Range("AB1") = "MM"
    sh1.Range("AC1") = "YYYY"
    sh1.Range("AD1") = "MM_mod"
    sh1.Range("AE1") = "YYYY_mod"
    
    Dim i As Integer
    Dim num As Integer
    Dim startRow As Long, lastRow As Long

    startRow = Range("H1").Row

    lastRow = sh1.Cells(sh1.Rows.Count, "H").End(xlUp).Row
    
    num = lastRow - startRow + 1

    For i = 2 To num
        Range("AB" & i) = Month(DateValue(Range("i" & i)))
    Next i
    
    For i = 2 To num
        Range("AC" & i) = Year(DateValue(Range("i" & i)))
    Next i
    
    For i = 2 To num
        Range("AD" & i) = Month(DateValue(Range("j" & i)))
    Next i
    
    For i = 2 To num
        Range("AE" & i) = Year(DateValue(Range("j" & i)))
    Next i

在我的电脑和我的一些同事的电脑上,它运行良好,没有问题。 但在其他同事的计算机上,它不起作用,在他们的情况下,如果天数是 12 或更小,宏将采用天而不是月。

我认为问题可能出在格式上,我按如下方式更改了代码(添加了 .NumberFormat):

    sh1.Range("AB1") = "MM"
    sh1.Range("AC1") = "YYYY"
    sh1.Range("AD1") = "MM_mod"
    sh1.Range("AE1") = "YYYY_mod"
    
    Dim i As Integer
    Dim num As Integer
    Dim startRow As Long, lastRow As Long

    startRow = Range("H1").Row

    lastRow = sh1.Cells(sh1.Rows.Count, "H").End(xlUp).Row
    
    num = lastRow - startRow + 1
    
    For i = 2 To num
        Range("I" & i).NumberFormat = "d-m-yyyy h:mm"
    Next i
    
    For i = 2 To num
        Range("J" & i).NumberFormat = "d-m-yyyy h:mm"
    Next i

    For i = 2 To num
        Range("AB" & i) = Month(DateValue(Range("i" & i)))
    Next i
    
    For i = 2 To num
        Range("AC" & i) = Year(DateValue(Range("i" & i)))
    Next i
    
    For i = 2 To num
        Range("AD" & i) = Month(DateValue(Range("j" & i)))
    Next i
    
    For i = 2 To num
        Range("AE" & i) = Year(DateValue(Range("j" & i)))
    Next i

不幸的是,它没有解决问题。

您能提出任何解决方案吗?

谢谢

支持使用 VBA 代码解决问题

vba database date format excel-365
1个回答
0
投票

尝试

For i = 2 To num
        Range("AB" & i) = Month(Range("i" & i).Value2)
    Next i
    
    For i = 2 To num
        Range("AC" & i) = Year(Range("i" & i).Value2)
    Next i
    
    For i = 2 To num
        Range("AD" & i) = Month(Range("j" & i).Value2)
    Next i
    
    For i = 2 To num
        Range("AE" & i) = Year(Range("j" & i).Value2)
    Next i

这应该有助于应对不同的设置

© www.soinside.com 2019 - 2024. All rights reserved.