【问题标题】:Excel VBA Button - Fast way to change reference cellExcel VBA 按钮 - 更改参考单元格的快速方法
【发布时间】:2018-12-23 19:35:52
【问题描述】:

你好 stackoverflow,我刚开始学习 excel VBA 的工作,我发现一个问题是我必须为我想要制作的 500 个按钮手动更改按钮的参考单元格。为简单起见:

在 A 列中说我通常隐藏了一些信息。

我在 B 列的每个单元格中放置了一个按钮,它将 Ax 列(x 是单元格编号)中的信息显示到单元格 Cx。说:

Range("C1").Value = Range("A1").Value

我放在 B1 中的按钮会执行上述操作,即显示 C1 的值是放在 A1 中的值。

现在,我有 500 行这样的数据。是否可以制作一个动态按钮来知道它所在的单元格,并且当移动/复制粘贴到另一个单元格时,引用其新位置以动态更改其代码中的参考单元格(该示例中的 Ax 和 Cx)?所以如果我把按钮放在 cel B67 中,按钮代码中的引用单元格将分别变为 C67 和 A67。

【问题讨论】:

标签: excel vba button


【解决方案1】:

[在回答之前,这是我对事情的看法:]

我认为您在这里要问的问题是“如何找到最后一个非空行”。 我之所以没有将其标记为一个,是因为您可能没有意识到您实际上应该问这个问题。

一般来说(听起来没有居高临下的意思)你可能应该先学习编程基础知识,然后再在这里提出这样的问题。在某个地方学习一些基础课程(有很多),然后才开始尝试一些编码,因为如果您缺少编码基础,那么您将永远无法理解其背后的更大图景


您在这里试图描述的是编程语言中的一个基本循环。 循环如何工作? 假设我们是一台计算机,我们也可以说话(用人类语言,而不是二进制 1 和 0)。

  1. 我想遍历动态范围内的所有单元格
  2. 我需要知道动态范围从哪里开始和结束(取我的结束点)
  3. 我将从起点开始,在终点结束(呃,愚蠢的人类应该知道...)
  4. 对于范围内的每个和每个单元格,我都会执行特定操作。
  5. 就是这样,相当简单。只需几秒钟。

如果我们试图准确地代表我在这里描述的内容:

Option Explicit ' < prevents you from typos, undeclared variables and so on...
Private Sub eachActiveCell()
   Dim actionrange as Range
   Dim lastrow as Long

   lastrow = Sheets("Your Sheet Name").Cells(Rows.Count, "A").End(xlUp).Row 
   'finds last (active) row ^
   Set actionrange = Sheets("Your Sheet Name").Range(Cells(1, "A"), Cells(lastrow, "A")) 
   ' this sets our range to (A1:A <lastrow>) ^

   Dim cell as Range
   For each cell in actionrange
       cell.Offset(0, 2) = cell.Value2 ' utilizes offset, A1 offset by 2 columns = C1
   Next cell

End Sub

其他选择,因为使用行而不是范围可能更容易理解。

Option Explicit
Private Sub foriinA()

    Dim ws as WorkSheet: Set ws = Sheets("Your Sheet Name")
    Dim lastrow As Long
    lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Dim i As Long
    For i = 1 To lastrow
        ws.Cells(i, "C") = ws.Cells(i, "A")
    Next i

End Sub

【讨论】:

  • 我真的很好奇谁不赞成为什么。我并不特别介意业力,但我会欢迎对你不喜欢答案的地方提出一些建设性的批评,因此你会感到强烈反对它,否则它对我未来改进我的答案并没有太大帮助。
  • 你好。是的,我同意我可能应该学习基础知识,但办公室的经理并不关心我有 0 VBA 或编程经验。 Prolly 会在周末带他们去,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多