0

我正在尝试创建一个宏,允许用户选择一列并将该列的功能扩展到工作表的其他区域。不过,我无法理解如何进行这项工作。该例程的基本逻辑是:

(1) Ask user to select column of interest
(2) Listen for cell click event
(3) Extract the features of the column chosen by the user
(4) Apply relevant features in area of the worksheet where the cell was active at the beginning of the macro

Excel 是否能够在这样的函数中“监听”事件?如果是这样,它将如何实施?谢谢。

更新

我的目标是创建一个可以在任何文件中使用的宏。宏的目的是向表中添加一个附加列,其中包含可用于检查表中项目的复选框。唯一让我失望的是在某些情况下,一个表可能包含彼此不同的合并列。例如:

C1    C2
1     A
1     B
2     A

在 Excel 中,上表可能合并了单元格 A1 和 B1。我希望用户能够灵活地确定是否需要两个复选框(将复选框与第 1 列关联)或三个复选框(将复选框与第 2 列关联)。因此,当宏运行时,我希望提示用户选择其中一列,然后将在该列中观察到的合并放在 C3 中。然后在 C3 中,我将在与表格关联的每个单元格中插入一个复选框。

如果知道要复制哪一列以及距表末尾有多少列,则下面的代码将执行列合并复制/粘贴部分。因为我想在各种表上使用这个宏,所以我需要对其进行调整以动态工作。

Sub copyMerges(sourceArea As Range, colOffset As Long)

    Dim row, col As Long
    Dim c, c2 As Range

    col = 1
    For row = 1 To sourceArea.Rows.Count
          Set c = sourceArea.cells(row, col)
          If c.MergeArea.cells.Count > 1 Then
               Set c2 = c.Offset(0, colOffset)
               If c2.MergeArea.cells.Count = 1 Then
                    c2.Resize(c.MergeArea.Rows.Count, 1).Merge
               End If
          End If
    Next col
End Sub
4

1 回答 1

0

Excel-VBA 能够执行您所追求的一切。但是您要求的太多而没有提供任何东西(通常,询问者必须包含代码或任何类型的指示他/她尝试了什么以及为什么失败)。

作为粗略的介绍(一些有助于研究/开始编码/提出更精确问题过程的指南):

  1. 要求用户选择感兴趣的列 -> 消息框 ( MsgBox)。
  2. 侦听由给定工作表的选择更改事件触发的单元格单击 -> 方法(Worksheet_SelectionChange在给定的Worksheet VBA file,即下Microsoft Excel Objects)。
  3. 提取用户选择的列的特征->您必须深入了解Ranges,更具体地说CellsRowsColumns
  4. 在宏开始时单元格处于活动状态的工作表区域中应用相关功能 -> 等效于上述点,您必须对RangesVBA 如何与单元格交互进行一些研究/阅读/试错。

- - - - 更新

Worksheet_SelectionChange每次选择更改时都会调用,但您的代码不需要执行;例如,您可以包括以下内容:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If (Selection.Address = "cell name you want") Then
       'YOUR CODE
    End If

    'OR

    If (Selection = "the range you want") Then
       'YOUR CODE
    End If

    'ETC.

End Sub

我坚持认为,这些都是关于找到解决问题的正确途径的粗略迹象。你的问题是可能吗?答案是:是的+一些迹象。但是不要指望一个完整的工作代码和照顾每一个细节(主要是当你没有提供任何代码时)。我希望现在一切都更清楚了。

-------- 问题更新后更新

现在事情变得更清楚了,但你仍然要求太多事情,并且或多或少地提出问题。我将在上面的行中给出进一步的指示,即帮助您开始研究/编码的初步想法:

  • 在你的情况下,我要做的第一件事是仔细考虑我想要什么,并确保我无法以更简单的方式完成它;例如:只有一个宏并提供它(宏以及逻辑上关联的 Excel 文件)并要求用户在此文件中粘贴他们想要的内容。这个小小的改变会让事情变得轻松很多。
  • 如果您不想考虑上述替代方案,则必须将研究重点放在处理外部工作簿上。最棘手的问题是处理单元选择跟踪和相关事件。Tim Williams 提供的链接肯定会在这方面为您提供帮助。我个人对这种方法的实际可靠性有些怀疑,主要是在同时处理多个工作簿时。您必须进行研究/测试,不仅在实际实施方面,而且在可靠性方面(请记住,这不是一个太常见的实施,因此您不会找到太多的在线支持)。
  • 一旦解决了上述问题(您可以从外部工作簿访问与单元格选择相关的事件),您就可以开始关注上述Ranges以及 VBA 与单元格通信的方式;这次你会在互联网上找到大量的信息:代码、意见等。
  • 此时您不应该担心您在更新的答案中提到的具体问题,一旦您对 VBA 有适当的了解,所有这些都将很容易解决(从外部工作簿中检索事件可能会成为问题;检索存储的信息,例如,表和它们的名称,或多或少是容易的-> 在没有太多信息与大量信息的意义上)。

总之,我在您想要的内容中看到的主要问题是从外部工作簿中检索某些信息;如果您可以避免这种情况(例如,如上所述),该项目将变得非常容易。无论如何,您不能在这里提出如此笼统的问题并期望得到实际适用的答案。此外,您必须非常清楚确切的问题以及您正在寻找的内容(在您的第一个问题中,您甚至没有提到各种工作簿问题)。

我希望在这些(更新的)起始指南之后,您将能够开始自己工作并回到这里(如果需要),并且划定界限(并且理想情况下,整体适用,以帮助尽可能多的人)问题。

于 2013-07-23T16:19:00.197 回答