2

我是新手,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

导致问题的行是这一行: Cells(val1, val2).Select

我相信我的错误是语法错误。但我不知道我应该在我的两个变量“val1”和“val2”之前、之后或周围添加什么

你怎么看 ?

非常感谢你的帮助。尼古拉斯。

编辑

我的问题现在解决了:

第一个答案正是我的宏观工作所需要的。第二个答案是正确且更快的方法。

4

2 回答 2

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

产生与乔的代码相同的结果。

如果由于某些原因需要切换工作表,Application.ScreenUpdating = False请在宏的开头(和Application.ScreenUpdating=True结尾)使用。这将消除屏幕闪烁 - 并加快执行速度。

于 2013-02-18T07:15:19.830 回答
-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
于 2013-02-18T05:14:30.763 回答