【问题标题】:VBA for Excel 2007 and aboveExcel 2007 及更高版本的 VBA
【发布时间】:2014-01-22 18:46:18
【问题描述】:

我编写了一些查看列的 VBA 代码,找到该列中包含数据的下一个单元格,并将两者之间的单元格设置为一个范围。这最初是为 Excel 2003 工作簿编写的。当然,相同的命令不适用于 2007 年及更高版本的工作簿。任何人都可以帮助为 2010 Excel VBA 翻译此内容。

这是原始代码:

Dim first As Integer
Dim Last As Integer
Dim i As Integer
Dim n As Integer

n = Worksheets("Sheet1").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count - 2
Range("A3").Select

For i = 1 To n
    first = (ActiveCell.Row + 1)
    Selection.End(xlDown).Select
    Last = (ActiveCell.Row - 1)
    Range("J" & first & ":J" & Last).Select
    Selection.Value = "=J$" & (first - 1)
    Range("A" & Last + 1).Select
Next i

当我在 Excel 2010 中运行它时。不是在 A 列中查找包含数据的下一个单元格,而是选择整个列。

提前致谢。

【问题讨论】:

  • 该代码并没有按照您的想法执行。你能展示一些示例数据和示例输出吗?
  • 我会尽量清除它。它是更大宏的一部分。当我这样做时,让我更好地解释一下它在做什么:
  • 让我稍微解释一下它在做什么:从单元格 A3 开始。将 A3 (A4) 下面的单元格分配给变量 First。向下移动到 A 列中包含信息的下一个单元格,然后备份 1 行。将该行号分配给变量 First。在 J 列中 - 选择 - J(First) : J(Last)。在每个单元格中,使单元格值等于 J(First)。

标签: vba select excel-2007 excel-2010


【解决方案1】:
Sub GoDownList()
Dim first As Integer
Dim Last As Integer
Dim i As Integer
Dim n As Integer

first = Range("A3").Row
Last = Range("A3").End(xlDown).Row
Range("J" & first & ":J" & Last).Value = "=J$" & (first - 1)

Do
    first = Range("A" & Last).End(xlDown).Row
    Last = Range("A" & first).End(xlDown).Row
    Range("J" & first & ":J" & Last).Value = "=J$" & (first - 1)
    If Range("A" & Last).End(xlDown).Row > 1000000 Then
        Exit Do
    End If
Loop
End Sub

我认为您的代码不起作用,因为您使用了Selection.Value 而不是Selection.Formula

【讨论】:

  • 谢谢,我发现了问题——它不在代码中,而是在报告下载中。当我们以 .XLSX 格式下载报告时(它是 SSRS 报告),由于某种原因,空单元格未显示为空单元格。只是为了测试,我运行了 Goto Special-Blanks,没有突出显示。我不得不欺骗它才能看到列中有空白。除此之外,代码运行良好。它在 2003 格式下也能完美运行。谢谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-08-06
  • 2013-04-17
  • 1970-01-01
  • 2020-07-18
  • 2013-05-02
  • 2021-11-17
  • 2015-05-10
  • 2016-03-28
相关资源
最近更新 更多