我是VBA
的新手,虽然很简单,但我无法做我想做的事。
我需要自动修改大(333x333)空(满零)电子表格的单元格。
在单独的电子表格中,我有要修改的所有单元格的行和列。 (其中5000人)
for
循环似乎适用于此目的。
这是我宏的代码。问题出现在最后一行之前的行上。
Dim val1 As String, val2 As String, i As Integer
For i = 1 To 333
Sheets("Feuil2").Activate
ActiveSheet.Cells(i, 1).Select
val1 = Cells(i, 1).Value
val2 = Cells(i, 2).Value
Sheets("Classeur2.csv").Select
Cells(val1, val2).Select
ActiveCell.FormulaR1C1 = "1"
Next i
导致问题的一行是:Cell(val1,val2).Select
我相信我的错误是语法错误。但我无法找到我应该在我的两个变量“val1”和“val2”之前或之后添加的内容
你怎么看?非常感谢你的帮助。 尼古拉斯。
修改
我的问题现在已经解决了:
第一个答案正是我对男性宏观工作所需要的。 第二个答案是正确而快捷的方法。
答案 0 :(得分:4)
如果您使用VBA,则无需激活或选择工作表或单元格。您可以直接访问它。 代码:
Dim rng As Range
For Each rng In Sheets("Feuil2").Range("A1:A333")
Sheets("Classeur2.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"
Next rng
产生与Joe的代码相同的结果。
如果由于某些原因需要切换工作表,请在宏的开头使用Application.ScreenUpdating = False
(并在最后使用Application.ScreenUpdating=True
)。这将删除屏幕闪烁 - 并加快执行速度。
答案 1 :(得分:-1)
VAL1和VAL2需要变为整数,而不是字符串,以用作Cells的参数,它将整数而不是字符串作为参数。
Dim val1 As Integer, val2 As Integer, i As Integer
For i = 1 To 333
Sheets("Feuil2").Activate
ActiveSheet.Cells(i, 1).Select
val1 = Cells(i, 1).Value
val2 = Cells(i, 2).Value
Sheets("Classeur2.csv").Select
Cells(val1, val2).Select
ActiveCell.FormulaR1C1 = "1"
Next i