【问题标题】:Incrementing VBA For loop through command button通过命令按钮递增 VBA For 循环
【发布时间】:2015-01-20 15:27:01
【问题描述】:

美好的一天!

我目前在使用命令按钮时遇到了一个小问题,我希望能够执行以下操作:将特定行格式化为特定行高,为相同数量的单元格添加粗边框行并计算并将由此产生的行数添加到文件中的初始数量。基本上,该按钮应该使电子表格的用户能够添加具有特定格式的新行,用户将在其中输入数据并跟踪添加的行数。

我当前的代码原样:

Option Explicit

Private Sub NewLineRedButton_Click()

    Dim i As Long
    Dim y As Long

    For y = ThisWorkbook.Worksheets("Flags").Cells(16.3) To y + 1
        ThisWorkbook.Worksheets("Flags").Cells(16, 3) = y + 1
        For i = 20 To i + y Step 1
            ThisWorkbook.Worksheets("Flags").Rows(i).RowHeight = 45
            ThisWorkbook.Worksheets("Flags").Cells(i, 1).Borders.LineStyle = xlContinuous
            ThisWorkbook.Worksheets("Flags").Cells(i, 1).Borders.Weight = xlMedium
        Next
    Next

End Sub

目前代码只执行下面两行并停止。我不太确定,为什么...?

【问题讨论】:

  • 可能是因为某些值是硬编码的?
  • 我不知道你所说的硬编码是什么意思。我几乎没有编程知识,我非常无知,但愿意学习。
  • @BOB 那么Cells(16, 3) 有什么特别之处呢?又名C16?
  • 显示此工作表上的行数。这里的行是指机器操作员填写的数字。正在填充的行顶部还有其他行标题和绒毛,这些不算数。初始值设置为 1。

标签: vba for-loop increment activexobject


【解决方案1】:

像这样写一个for循环

For y = ThisWorkbook.Worksheets("Flags").Cells(16.3) To y + 1

和这样写是一样的

For y = ThisWorkbook.Worksheets("Flags").Cells(16.3) To 1

我猜单元格中的值为零,因此它将执行 0 和 1 的循环 - 即您看到的两次。

你需要类似的东西

lEndRow = lStartRow + (lRowCount - 1)
For y = lStartRow to  lEndRow

【讨论】:

  • 我不确定您的代码背后的逻辑。这就是我所掌握的:我应该创建一个变量,它是最后一行(lEndRow)。我应该创建一个变量,它是起始行 (lStartRow)。然后使用 Row.Count 函数在函数中循环循环有多少行...?
  • 我认为我真的不需要开始行,因为我只需要知道最后一行在工作表上的位置,这样我就可以在它下面加上一个新行。谢谢你的帮助!
  • 如果您只需要工作表上的最后一行,则存储此值。当您插入新行时,将值加一。这将使您不必担心行数等。
  • 不完全是,我需要最后一行,以便我可以在它下面添加另一行,添加的行数 + 1。
【解决方案2】:

我现在一切顺利。只是不能让它用正确的边框来做所有的列......我不知道如何在使用单元格(#,#)符号时调用它们,我看不到如何使用 Range(' 'Z#,Z#'') 表示法,我的 i 变量是 Long...

无论如何:这是目前的结果:

Option Explicit

Private Sub NewLineRedButton_Click()

        Dim i As Long
        Dim y As Long
        Dim RowEnd As Long


        RowEnd = ThisWorkbook.Worksheets("Flags").Cells(Rows.Count, 1).End(xlUp).Row

    For y = 19 To RowEnd
        ThisWorkbook.Worksheets("Flags").Cells(16, 3) = y - 17 ' First row which is already on the sheet is on row 19, first row appearing by button clicking is on row 20 and the program is counting the header hence the y - 17 for the value of the number of rows.
        For i = 19 To RowEnd + 1 Step 1
            ThisWorkbook.Worksheets("Flags").Rows(i).RowHeight = 45
            ThisWorkbook.Worksheets("Flags").Cells(i, 1).Borders.LineStyle = xlContinuous
            ThisWorkbook.Worksheets("Flags").Cells(i, 1).Borders.Weight = xlMedium

        Next
    Next

End Sub

感谢您的帮助和想法,终于四处转转,​​并从此处提供的线索中找到了其他资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多