尝试 select 指定输入之间的单元格以粘贴值时出错

Error while trying to select cells between specified inputs to paste value

我是 excel vba 的新手,但我已经寻找了数周的时间来寻找编写此脚本的方法,但还没有成功。

我有一个 sheet,用户可以在其中输入新项目和详细信息以进行预测。从 K 开始的每一列代表一个财政周。

我想用该行的商店数量填充 "start date" 和 "end date" 之间的每一列。财政周从 201801 到 201952(总共 104 周)。

我尝试做一个 select 案例,为每个可能的开始和结束日期分配一个数值(以便我可以设置 dtRange = Range(cells(r, sdate1), cells(r, edate1))),但无法让它工作。下面是我的其他尝试,但我得到了 Run time error 1004: Application-defined or object-defined error。任何人都可以指出我做错了什么或指出正确的方向来纠正吗?

Sub test()
    Sub PASTEDATES()
    Dim strcnt As Integer
    Dim dtRange As Range
    Dim sdate As Variant
    Dim eDate As Variant
    Dim sdateval As Integer
    Dim eDateVal As Integer
    Dim chkbx As Object
    Dim r As Long
    Dim sdate1 As String
    Dim edate1 As String

    For r = 1 To 2000
        If Cells(r, 1).Value = True Then
            With Worksheets("DIST. INPUT FORM")

                sdate = Cells(r, 9).Value
                eDate = Cells(r, 10).Value
                strcnt = Cells(r, 8).Value

                Select Case sdate
                Case 201801
                sdate1 = 1
                Case 201802
                sdate1 = 2
                Case 201803
                sdate1 = 3
                Case 201804
                sdate1 = 4
                .
                .
                .
                Case 201950
                sdate1 = 102
                Case 201951
                sdate1 = 103
                Case 201952
                sdate1 = 104
                End Select


                Select Case eDate
                Case 201801
                edate1 = 1
                Case 201802
                edate1 = 2
                Case 201803
                edate1 = 3
                Case 201804
                edate1 = 4
                .
                .
                .
                Case 201951
                edate1 = 103
                Case 201952
                edate1 = 104
                End Select


                ActiveSheet.Cells(r, 8).Copy
                Cells(r, sdate1).Select
                ActiveCell.Offset(0, edate1).Select
                   Selection.Paste

            End With
            Exit For
        End If
    Next r
End Sub

您可以将 Select Case 语句简化为简单的 For Loop。类似于:

'/* use the same code to get your sdate and edate */
Dim sVal As Long, eVal As Long

sVal = 201801
For i = 1 to 104
    If sVal = sdate Then sdate1 = i: Exit For
    sVal = sVal + 1
Next

eVal = 201801
For i = 1 to 104
    If eVal = edate Then edate1 = i: Exit For
    eVal = eVal + 1
Next

然后从那里检查您是否获得了正确的变量值。
这不是一个真正的直接解决方案,但请先尝试简化您的代码。