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