Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将VBA函数中的单元格值与变量一起使用_Excel_Vba - Fatal编程技术网

Excel 将VBA函数中的单元格值与变量一起使用

Excel 将VBA函数中的单元格值与变量一起使用,excel,vba,Excel,Vba,我不熟悉VBA,虽然它很简单,但我不能做我想做的事情 我需要自动修改一个大的(333x333)空(满是零)电子表格的单元格 在单独的电子表格中,我有要修改的所有单元格的行和列。(其中5000人) for循环似乎适合于此目的 这是我宏的代码。问题出现在最后一个问题之前的行上 Dim val1 As String, val2 As String, i As Integer For i = 1 To 333 Sheets("Feuil2").Activate ActiveSheet.Cel

我不熟悉
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
导致问题的行是:单元格(val1,val2)。选择

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

你觉得怎么样

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

编辑

我的问题现在解决了:

第一个答案正是我需要做的。
第二个答案是正确且快速的方法。

VAL1和VAL2需要暗显为整数,而不是字符串,以用作单元格的参数,单元格以整数而不是字符串作为参数

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

如果使用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.screenUpdate=False
(在结尾使用
Application.screenUpdate=True
)。这将消除屏幕闪烁,并加快执行速度。

您还可以尝试将该循环作为FOR EACH循环的一部分。差别不大,但读起来容易一点。谢谢彼得,很高兴知道。下次我会试试的。嗯,我欠你一个大大的谢谢!今天我必须缩放我的宏来考虑5000行。通过前3000条线路需要20多分钟。我知道这一点,因为我必须停止宏并尝试您的解决方案。我用这20分钟来理解“范围”符号。它快多了(现在大约一分钟)。您可以通过插入
Application.screenUpdate=False
Application.Calculation=xlCalculationManual
来进一步加快速度!在宏结束时,使用
Application.screenUpdate=False
Application.Calculation=xlCalculationAutomatic
:-)将其重置刚刚意识到我在回答中已经提到了屏幕更新…:-/