【问题标题】:Working with Arrays VBA Excel使用数组 VBA Excel
【发布时间】:2017-11-09 03:53:21
【问题描述】:

我正在开发一个宏来消除用于输入自定义订单的工作表中的空白行。假设第 7、8、9 和 12 行有内容。我想把第 12 行的内容移到第 10 行。

到目前为止,我已经找到了 c 列中最后占用的行,然后确定了 e 列中的行中的单元格是否为空白。

现在我想将一个值放入 0(空白)或 1(已占用)的数组中。我在将石头 (1) 的值设置为 1 或 0 的代码行中收到错误(需要对象)。

出了什么问题?

  Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("Belmont")
Set rng1 = ws.Columns("c").Find("*", ws.[c1], xlValues, , xlByRows, xlPrevious)
Dim zen As String
zen = rng1.Address(0, 0)
Range(zen).Select
Set ruby = Window.ActiveCell.Row - 11
Dim stones() As Boolean
ReDim stones(1 To ruby)
If IsEmpty(ActiveCell.Offset(2, 0)) Then
Set stones(1) = 0
Else
Set stones(1) = 1
End If
msg55 = MsgBox(stones(1), vbDefaultButton1, "Gekko")

【问题讨论】:

    标签: arrays excel vba elements


    【解决方案1】:

    我的假设是您这样做是为了学习而不是实用:

    您可以在谷歌上搜索 VBA 数组并获得大量有关该主题的材料。我将从这里开始: http://www.cpearson.com/excel/vbaarrays.htm

    你可以像这样声明你的数组:

    Dim stones(1 To 10) As Double
    

    您将不得不遍历范围内的每个单元格。你也可以谷歌如何做到这一点:

    Loop through each cell in a range of cells when given a Range object

    您可以将数组中第 5 个元素的值设置为 10,如下所示:

    stones(5) = 10
    

    看来您确实需要学习一些基本的 VBA 编程教程。你可以从这里开始:

    http://www.mrexcel.com/forum/excel-questions/667818-tutorials-excel-macros-visual-basic-applications.html

    【讨论】:

    • 谢谢斯捷潘!我现在编辑了我的问题,因为我从你的回答中得到了更多的指导。我想知道为什么在将数组元素设置为一个值时会出现 object required 错误...
    • @RichardPullman 看起来您大致了解了如何使用数组。初级编程教程通常有一整章专门介绍数组。看起来您取得了一些进展 - 您将数组类型从 double 更改为 boolean(这对您的情况更有意义,因为您只是存储 1 和 0)。 - 但你真的会想研究如何使用数组。任何人都可以指导您如何使用它们,但您最好只阅读教程。你会想学习如何迭代。但是,如果您只想完成它,则不需要数组。
    • 是的,谢谢。好点的人。在我带着问题来到这里之前,我应该对某个主题有更好的理解。
    【解决方案2】:

    如果您想删除工作表“Belmont”列 C 中的空白单元格,那么这应该适合您:

    Sub tgr()
    
        Dim rngBlanks As Range
    
        With Sheets("Belmont").Range("C1", Sheets("Belmont").Cells(Rows.Count, "C").End(xlUp))
            On Error Resume Next
            Set rngBlanks = .SpecialCells(xlCellTypeBlanks)
            On Error GoTo 0
            If Not rngBlanks Is Nothing Then rngBlanks.EntireRow.Delete
        End With
    
        Set rngBlanks = Nothing
    
    End Sub
    

    【讨论】:

    • 比这更复杂。我想将单元格的内容移动到工作表顶部到第一个未占用的列。如果第5、6、7、12行有内容,我想把第12行的内容移到第8行。
    • 所以省略 .EntireRow 以便该行是:If Not rngBlanks Is Nothing Then rngBlanks.Delete
    【解决方案3】:

    如果要删除所有C列为空的行,则:

    Sub dural()
        Dim r As Range
        Set r = Range("C:C").Cells.SpecialCells(xlCellTypeBlanks).EntireRow
        r.Delete
    End Sub
    

    将在不循环的情况下完成此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2011-04-07
      • 1970-01-01
      相关资源
      最近更新 更多