首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >范围宏不起作用

范围宏不起作用
EN

Stack Overflow用户
提问于 2020-08-14 23:26:11
回答 1查看 45关注 0票数 0

下面的宏(CollectProjectItems)的功能与设计一致。在宏(CollectContractorItems)中应用相同的逻辑,但更改了范围,则不能按预期工作。

我假设这个错误是我忽略了的,当然...为了我的生命..。我找不到我的错误。

需要一双全新的眼睛。

提前谢谢你。

代码语言:javascript
复制
Sub UpdateCharts()
    CollectProjectItems
    CollectContractorItems
End Sub

Sub CollectProjectItems()
On Error Resume Next
    MyDate = Format(Date, "mmm") & "-" & Right(Year(Date), 2)
    For Each cl In Range("A3", Range("A" & Rows.Count).End(xlUp))
        wproj = Application.Match(cl.Value, Columns(10), 0)
        
        If IsNumeric(wproj) Then
            MyMonth = Application.Match(MyDate, Rows(wproj + 1), 0)
            Cells(wproj + 2, MyMonth) = cl.Offset(, 1)
            Cells(wproj + 3, MyMonth) = cl.Offset(, 2)
        End If
    Next
End Sub

Sub CollectContractorItems()
On Error Resume Next
    MyDate = Format(Date, "mmm") & "-" & Right(Year(Date), 2)
    For Each cl In Range("E3", Range("E" & Rows.Count).End(xlUp))
        wproj = Application.Match(cl.Value, Columns(25), 0)
        
        If IsNumeric(wproj) Then
            MyMonth = Application.Match(MyDate, Rows(wproj + 1), 0)
            Cells(wproj + 2, MyMonth) = cl.Offset(, 1)
            Cells(wproj + 3, MyMonth) = cl.Offset(, 2)
        End If
    Next
End Sub

第二个宏不会在Col AG中完成所需的编辑。它复制与Col的第一个宏相同的编辑。

我不知道如何更改第二个宏,因此它会影响在列Z:AK中的编辑。

???

下载示例工作簿:Macro Error

EN

回答 1

Stack Overflow用户

发布于 2020-08-15 00:16:00

如下所示:

代码语言:javascript
复制
Sub CollectContractorItems()
    Const COL_CONTRACTORS As Long = 25
    Dim MyDate As String, cl As Range, ws As Worksheet, wproj, MyMonth
    Dim rngDates As Range, dtCol As Long

    Set ws = ActiveSheet 'or some specific sheet
    MyDate = Format(Date, "mmm") & "-" & Right(Year(Date), 2)

    For Each cl In ws.Range("E3:E" & ws.Cells(ws.Rows.Count, "E").End(xlUp).Row).Cells
        wproj = Application.Match(cl.Value, ws.Columns(COL_CONTRACTORS), 0)
        
        If Not IsError(wproj) Then
            'get the range with dates
            Set rngDates = ws.Cells(wproj, COL_CONTRACTORS).Offset(1, 1).Resize(1, 12)
            MyMonth = Application.Match(MyDate, rngDates, 0) 'search only in the specific range
            If Not IsError(MyMonth) Then
                dtCol = rngDates.Cells(MyMonth).Column 'get the column number
                ws.Cells(wproj + 2, dtCol) = cl.Offset(, 1)
                ws.Cells(wproj + 3, dtCol) = cl.Offset(, 2)
            End If
        End If
    Next
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63415677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档