【问题标题】:How can I fill a dynamic range with formulas in VBA如何用 VBA 中的公式填充动态范围
【发布时间】:2019-05-05 14:41:49
【问题描述】:

我在 VBA 中使用以下代码使用公式将一列填充到所选的某个单元格(可以通过更改单元格值来更改):

Worksheets("Deelnemersbestand").Range("B2:B"&aantalDeelnemers).Formula="=RAND()"

我也希望清除 B 列的其余部分。

但它不起作用。有什么建议?我是新来的。

【问题讨论】:

  • 你能比“它不起作用”更具体吗?相反会发生什么,aantalDeelnemers 的值是什么?
  • 我收到一个错误:运行时错误'1004'应用程序定义或对象定义错误我已将 aantalDeelnemers 的值设置为 10
  • 您可能只是打错了 DeelnemersbestandaantalDeelnemers。可能在错误的活动工作簿下操作。将"B2:B"&aantalDeelnemers 更改为"B2:B" & aantalDeelnemers 并将.Formula="=RAND()" 更改为.Formula = "=RAND()" 会发生什么?
  • 间距似乎无关紧要。我也没有错别字……太令人沮丧了
  • 你的完整代码是什么?您如何清除 B 列的其余部分以及要清除和保留的内容?我还建议使用显式选项并正确声明变量

标签: excel vba range formula


【解决方案1】:
Sub test()

Dim aantalDeelnemers, aantalDeelnemersLegen As Integer


aantalDeelnemers = Worksheets("Interface").Range("aantalDeelnemers").Value
aantalDeelnemersLegen = aantalDeelnemers + 1
Worksheets("Deelnemersbestand").Range("B2:B" & aantalDeelnemers).Formula = "=RAND()"
Worksheets("Deelnemersbestand").Range("B" & aantalDeelnemersLegen & 
":B1000").ClearContents

End Sub

【讨论】:

  • 非常感谢!!
  • 您也许知道为什么 Worksheets("Deelnemersbestand").Range("B2:B" & aantalDeelnemers).Formula = "=RANDBETWEEN(21;50)" 不起作用?这里我只把 RAND() 改成了 RANDBETWEEN(21;50)
  • @tam,.Formula 期望美国逗号不是分号。如果要使用分号,请使用逗号或 .FormulaLocal
  • 在上述 Dim 语句中,aantalDeelnemers 是一个变体。如果您希望两者都作为整数类型变量,请使用 Dim aantalDeelnemers As Integer, aantalDeelnemersLegen As Integer。 (对@Tam,注意整数而不是整数s)。
【解决方案2】:

兰德与兰德之间

要启用RANDBETWEEN,您必须在 Excel 中转到工具>加载项并检查分析工具库。

Sub Bestand()

  Const cWs1 As String = "Interface"            ' First Worksheet
  Const cWs2 As String = "Deelnemersbestand"    ' Second Worksheet
  Const cRngName As String = "aantalDeelnemers" ' Cell Range in First Worksheet
  Const cColumn As Variant = "B"                ' Column Letter/Number
  Const cFirstRow As Integer = 2                ' First Row of Data
  Const cFormula As String = "=RAND()" '"=RANDBETWEEN(21,50)"

  Dim i As Integer

  i = Worksheets(cWs1).Range(cRngName).Value

  With Worksheets(cWs2)
    .Range(.Cells(cFirstRow, cColumn), .Cells(i, cColumn)).Formula = cFormula
    .Range(.Cells(i + 1, cColumn), .Cells(.Rows.Count, cColumn)).ClearContents
  End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多