我有一个链接到外部源的模板。Excel VBA - 粘贴到可见单元格
我的前任创建了它,并且为了让眼睛“轻松”,他/她通过跳过一行来创建它。即行1,行3,行5,行9,行13等等。
我创建了一个打开工作簿并复制我想要的工作表的vba。
如果我使用下面的代码,它运行速度非常慢,并且出于某种原因,它不止一次地循环。
for each cell in usedrange
if cell.hasformula = true and instr(cell.formula, "SUMIF") > 0 then
cell.formulaR1C1 = "='\\tel\folder1\folder2\[xlsheet.xlsx]SheetName'!RC
end if
next cell
因此,我所做的是实际分配一次,复制它,然后粘贴到相应的单元格(如下所示)。
Workbooks(desWB).Sheets(maxSheet + 1).Range("J5").FormulaR1C1 = fullPath
Workbooks(desWB).Sheets(maxSheet + 1).Range("J5").Copy
Workbooks(desWB).Sheets(maxSheet + 1).Range("J6:J12,E48:J55,E57:J58,E61:J79,E84:J93,E96:J96,E99:J103").PasteSpecial Paste:=xlPasteFormulas
后一种方法的工作原理和它的绝对比第一次更快。但是,现在我面临的情况是,由于模板的设置,某些行具有公式,有些行不具有公式,并且会有数千行。行的跳跃也有时不是2的增量,也可能是3,5等
所以想知道如果有一种方式,是更有效和更高效:
- 看的使用范围
- 如果范围有公式和公式有“SUMIF”
- 改变配方到别的
- 否则跳过检查下一个单元格
如果一行最左边的单元格是空白的,那么这是否意味着应该跳过整个行? –
这是正确的...当这一行是空白时,整行都是空白的。 –