【发布时间】:2018-07-26 09:54:11
【问题描述】:
我有两张床单。工作表 1(客户跟踪器 - OC)有一列,其中每一行都包含是或否。如果值为 yes ,则右侧相邻的两个单元格中有两个值。
我想为每个宏创建一个 do while / 循环遍历 sheet1 中 yes/no 列中的每个单元格,如果值为 yes ,则在空白表 2 中创建一个新行,其中两个相邻的值来自第 1 页。
即
表 1
A B C
1 YES 4 6
2 NO
3 YES 91 42
工作表 2 中的期望结果(“合同”)
A B
1 4 6
2 91 42
我有以下代码,但“溢出”出错。
Sub ForEach_Loop()
Dim TrackerLastRow As Integer
Dim TrackerCurrentRow As Integer
Dim ContractLastRow As Integer
Dim ContractCurrentRow As Integer
TrackerLastRow = Worksheets("Customer Tracker - OC").Range("T1").End(xlDown).Row
TrackerCurrentRow = 1
ContractLastRow = Worksheets("Contracts").Range("A1").End(xlDown).Row
ContractCurrentRow = 1
Do While TrackerCurrentRow <= TrackerLastRow
If Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Value = "Yes" Then
Worksheets("Contracts").Range("A" & ContractCurrentRow) = Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Offset(, 1).Value
Worksheets("Contracts").Range("B" & ContractCurrentRow) = Worksheets("Customer Tracker - OC").Range("T" & TrackerCurrentRow).Offset(, 2).Value
TrackerLastRow = TrackerLastRow + 1
TrackerCurrentRow = TrackerCurrentRow + 1
ContractLastRow = ContractLastRow + 1
ContractCurrentRow = ContractCurrentRow + 1
End If
TrackerCurrentRow = TrackerCurrentRow + 1
ContractCurrentRow = ContractCurrentRow + 1
Loop
End Sub
任何帮助将不胜感激
【问题讨论】:
-
首先将所有 Integer 替换为 Long,然后不再使用 Integer。
-
我尝试替换 Integer,但宏似乎没有做任何事情,看起来还有更多问题。
-
溢出错误意味着您尝试保存的值超出了每种数据变量的限制。示例:您不能将数字 1000 保存在定义为 Byte 的变量中,因为 Byte 数据的限制是 255。所以正如@Jeeped 所说,将所有整数替换为 Long,然后调试代码以查看失败的位置。用 F8 执行它
-
过滤列 A 为“是”,然后一步复制/粘贴列 B:C 不是一种选择吗?
-
为什么要在 while 循环中的 if 语句中增加变量?变量 ContractLastRow 的用途是什么?
标签: vba excel foreach do-while