【发布时间】:2017-02-01 18:39:53
【问题描述】:
Sub Button2_Click()
Dim i As Integer, q As Integer
i = 2
q = 2
Do While i < 468 And q < 3450
If Worksheets("Sheet1").Range("A" & i).Value = Worksheets("Sheet2").Range("A" & q).Value Then
If Len(Worksheets("Sheet1").Cells(i, 4)) < 12 Then
Dim edate As String, adate As String, ed As String, ad As String, n As Integer, x As Integer, y As Integer
edate = Sheets("sheet1").Cells(i, 4).Value
adate = Sheets("sheet2").Cells(q, 2).Value
ed = Right(Sheets("sheet1").Cells(i, 4), 4)
ad = Right(Sheets("sheet2").Cells(q, 2), 4)
n = CInt(ad) - CInt(ed)
If InStr(edate, "Fall") And InStr(adate, "Fall") Then x = 7 + (5 * n)
If InStr(edate, "Fall") And InStr(adate, "Spring") Then x = 9 + (5 * (n - 1))
If InStr(edate, "Spring") And InStr(adate, "Spring") Then x = 9 + (5 * n)
If InStr(edate, "Spring") And InStr(adate, "Fall") Then x = 12 + (5 * n)
y = x - 1
Worksheets("Sheet1").Cells(i, x).Value = Worksheets("Sheet2").Cells(q, 5).Value
Worksheets("Sheet1").Cells(i, y).Value = Worksheets("Sheet2").Cells(q, 3).Value
i= i +1
q=2
Else
i = i + 1
q = 2
End If
Else
If q < 3423 Then
q = q + 1
else
i = 1 + 1
q=2
End If
Else
i = i + 1
q = 2
End If
End If
Loop
End Sub
大家好,上面的代码是我一直在处理的一些重要数据,从 sheet2 到 sheet1。表 2 第 1 列有项目 ID 编号,第 2 列有期限(授予日期),第 3 列有奖励类型,第 5 列有金额。第 1 列第 1 列有项目 ID,第 4 列有期限(入职日期)。表 2 具有按学期授予的奖项并按项目 ID 进行索引,我想重视数据并将它们放入由 if instr 语句给出的列中,并位于文本中间。
此代码的目标是遍历表 1 A 列中的项目 ID 号并检查它们是否存在于表 2 A 列中,然后导入按年份差异排序的奖励类型和金额在表 1 上的输入日期和表 2 上的授予日期之间。日期有春季/秋季和一年,所以我尝试了 left(string, #) 命令只减去年份,然后是上述 if 的块instr 代码应该可以平衡学期之间的差异。
工作表 2 中有多个相同的项目 ID,因此我需要代码在工作表 2 的上一行之后恢复循环,直到工作表 1 上的每个项目 ID 都被交叉引用。
有人能指出我的代码中的错误吗?单击命令按钮时没有任何反应。
问题出在第一个 if 语句中,当我知道至少有 450 个数据匹配时,它会跳过所有需要满足条件的操作。
刚刚编辑了我的代码,它现在还在运行。
由于 cmets 的编辑列表:修复了逻辑语句问题、修复了范围/单元格/单元格问题、修复了循环问题、修复了右/左字符串问题
【问题讨论】:
-
i = i + 1 And q = 2真的是一个逻辑表达式,还是两个语句,即i = i + 1: q = 2? -
当我单击命令按钮时没有任何反应 - 您 是否尝试通过 debugging 指出代码中的错误(运行逐行代码并通过检查变量值等查看结果。
-
在应该使用语句分隔符时不要使用逻辑运算符。
-
在
Sub Button2_Click()之后创建一个MessageBox以确保脚本正在运行。 -
你确定它们是数字吗?将格式切换为一般格式并确保前导零消失,或使用
"#,##0"格式并确保出现逗号。 (附言一旦你越过了那条线,你的.cell方法将失败。它们应该是.Cells属性。)如果它们是 9 位数字,你为什么还要使用Like,你不想检查一下吗?平等?