4

作为记录,我使用的是 Excel 2010。

我正在尝试自学 VBA 以完成工作(他们为实习生提供了 VBA 的东西......),而我却陷入了最简单的事情。

我正在尝试制作一个三列宽的带边框的表格。表中的行数必须基于用户的输入量。在我的代码中,这是用户给出的值Count

我的问题是我不知道如何选择我需要的范围。我知道如何选择范围的唯一方法是使用:

ActiveCell.Range("Top left cell:Bottom right cell").Select

如果是 from A1to C8,我该如何做?我希望它会像这样工作:

ActiveCell.Range("A1:C(count)").Select

这是我到目前为止所拥有的:

Option Explicit
Dim Count As Long
Dim CFLArray() As Variant
Sub TableCreation1()
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Time (days)"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "CFL (measured)"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "De (estimated)"
    ActiveCell.Offset(0, -2).Range("A1:C1").Select
    Selection.Font.Bold = True
    ActiveCell.Columns("A:A").EntireColumn.EntireColumn.AutoFit
    ActiveCell.Offset(0,1).Columns("A:A").EntireColumn.EntireColumn.AutoFit
    ActiveCell.Offset(0,2).Columns("A:A").EntireColumn.EntireColumn.AutoFit
    ActiveCell.Select
End Sub

Sub FindRange()
    Range("A2").Select
    Count = InputBox("How many pairs of data do you have? ")
End Sub

大约一天前,我使用我工作中的一本书自学了 VBA,但我在其中找不到任何类似的内容。我的互联网搜索也失败了。最糟糕的是,我知道这将非常简单。

4

2 回答 2

4

就是这么简单!你只是偏离了一点点。

改变:ActiveCell.Range("A1:C(count)").Select

到:ActiveCell.Range("A1:C" & count).Select

不过,我count在您的代码中看不到任何变量。

如果您知道它始终是同一列,您可以这样做:

Range("A1:C" & ActiveSheet.Range("C1048576").End(xlUp).Row).Select

1048576是 Excel 2010 中的最大行。这可能不适合您的数据,但希望它能让您朝着正确的方向开始......)

Select此外,作为关于 VBA 的补充点,您在大多数情况下不需要使用。例如,这个:

Range("A1").Select

ActiveCell.FormulaR1C1 = "Time (days)"

可以更简单地重写为:

Range("A1").FormulaR1C1 = "Time (days)"

如果您只是使用文本:

Range("A1").value = "Time (days)"

我还想指出 usingActiveCell.Range("A1:C" & count).SelectActiveSheet.Range("A1:C" & count).Select. 根据当前选择的单元格,这些将选择不同的范围。如果您的意思是A1:C8,而不是A1:C8 (relative to the current cell),那么您将要使用ActiveSheet(或省略)版本。

于 2012-07-06T14:00:50.547 回答
3

那将是:

ActiveCell.Range("A1:C" & Count).Select

&字符串连接运算符。


旁注 - 您的第一个过程 (TableCreation1) 可以更简洁地重写:

Sub TableCreation1()

  Range("A1") = "Time (days)"
  Range("B1") = "CFL (measured)"
  Range("C1") = "De (estimated)"
  Range("A1:C1").Font.Bold = True
  Columns("A:C").EntireColumn.EntireColumn.AutoFit

End Sub
于 2012-07-06T13:57:34.427 回答