如何通过 VBA 函数填充 Excel 工作表中的单元格?

2024-01-25

我只想通过 VBA 函数填充电子表格中的单元格。例如,我想在单元格中输入 =FillHere(),结果我将在一些单元格中填充一些数据。

我尝试过这样的功能:

Function FillHere()
  Dim rngCaller As Range
  Set rngCaller = Application.Caller
  rngCaller.Cells(1, 1) = "HELLO"
  rngCaller.Cells(1, 2) = "WORLD"
End Function

当我尝试修改范围时它就会中断。然后我尝试了这个(即使这不是我真正想要的行为):

Function FillHere()
    Dim rngCaller As Range
    Cells(1, 1) = "HELLO"
    Cells(1, 2) = "WORLD"
End Function

这也不起作用。但如果我使用 F5 从 VBA 启动此函数,它就会起作用!似乎在调用函数时无法修改电子表格上的任何内容...但有些库会这样做...

我还尝试(事实上这是我的第一个想法)从函数返回一个数组。问题是我只获取数组中的第一个元素(有一个技巧意味着使用左上角的公式+ F2 + CTRL-SHIFT-ENTER 选择整个区域,但这意味着用户需要知道通过提前数组的大小)。

我真的被这个问题困扰了。我不是最终的最终用户,所以我需要一些非常易于使用的东西,最好是完全没有参数。

PS:很抱歉我已经问过这个问题了,但当时我还没有注册,看来我不能再参与其他线程了。


您需要分两步执行此操作:

将您的模块更改为:

Dim lastCall As Variant
Dim lastOutput() As Variant

Function FillHere()
    Dim outputArray() As Variant
    ReDim outputArray(1 To 1, 1 To 2)
    outputArray(1, 1) = "HELLO"
    outputArray(1, 2) = "WORLD"

    lastOutput = outputArray
    Set lastCall = Application.Caller

    FillHere = outputArray(1, 1)
End Function

Public Sub WriteBack()
    If IsEmpty(lastCall) Then Exit Sub
    If lastCall Is Nothing Then Exit Sub

    For i = 1 To UBound(lastOutput, 1)
        For j = 1 To UBound(lastOutput, 2)
            If (i <> 1 Or j <> 1) Then
                lastCall.Cells(i, j).Value = lastOutput(i, j)
            End If
        Next
    Next

    Set lastCall = Nothing
End Sub

然后为了调用 Sub,请进入 VBA 中的 ThisWorkbook 区域并添加如下内容:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Call WriteBack
End Sub

其作用是返回左上角单元格的值,然后在计算完成后填充其余单元格。我编写此代码的方式假设一次只会调用一个 FillHere 函数。如果您想要同时重新计算多个变量,那么您将需要一组更复杂的全局变量。

需要警告的是,当它填充其他单元格时,它不会关心它会覆盖什么。

编辑: 如果您想在 XLA 中的应用程序范围内执行此操作。 ThisWorkbook 区域的代码应类似于:

Private WithEvents App As Application

Private Sub App_SheetCalculate(ByVal Sh As Object)
    Call WriteBack
End Sub

Private Sub Workbook_Open()
    Set App = Application
End Sub

这将连接应用程序级别计算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 VBA 函数填充 Excel 工作表中的单元格? 的相关文章

  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 3D 数组到 3D std::vector

    我在代码函数中用 3D std vector 替换了 3D 数组 它进入了无限循环 你能给我一个提示吗 我真的需要使用向量而不是数组 谢谢 我最初的代码是 arr is a 3D array of a sudoku table the 3
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Fortran 子例程返回错误值

    嘿 我正在开发一个 Fortran 程序 遇到了一个奇怪的问题 当我尝试在调用特定子例程之前直接输出数组的某些值时 我得到了正确的值 然后 我尝试在启动子例程时输出同一数组的一些值 它们都是 0 我最终在子例程之后输出数组的值 并且这些值回
  • 使用 FindElementbyXpath() 获取 Selenium Basic 中可填充框的行和列名称

    我正在使用 Selenium Basic 将电子表格中的文本填充到网站中 网站的html代码是这样的 div table cellspacing 0 border 1 style width 99 tr th style font weig
  • LNK2019 错误,无法解析的外部符号

    错误逐字读取 1 gt yes obj error LNK2019 unresolved external symbol int cdecl availableMoves int const int const 4 int availabl
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • 制作一个js数组,输入框的值用空格分隔

    我正在尝试使用文本框进行用户输入并将它们放入数组中 基本上 如果用户输入像这样的字符串 10 23 4566 234 10 我希望将数字放入 10 23 4566 234 10 等数组中 这可能吗 我只处理数字 字符串可能会很长 你会想要使
  • $0 和 $1 在 Swift 闭包中意味着什么?

    let sortedNumbers numbers sort 0 gt 1 print sortedNumbers 谁能解释一下什么 0 and 1在斯威夫特中意味着什么 另一个样本 array forEach actions append
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • 无法使用 VBA 代码从 Excel 连接到 Teradata - 无法通过网络访问 Teradata 服务器

    我一直在尝试使用 vba 代码从 Excel 连接到 Teradata 但收到以下错误 无法通过网络访问 Teradata Server 我已经能够从 Teradata SQL 助手成功连接 并且还成功 ping 通 Teradata 服务
  • 使用 VBScript 在日期字段值上选择错误的数据

    我有一张包含以下数据的表 现在 Excel 共有 36 个任务 每个任务有 4 列 第一个任务 即 Task1 名称将始终从 L 列开始 144 列描述了 36 个任务 现在我们需要按行进行检查 并需要检查 TNStart 开始日期 你们能
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 如何使用vba复制Excel工作表中的动态范围

    我试图使宏中的范围是动态的 而不指定最后一行x Sheets SheetName Range A2 K1000 Copy在 1000 行中 我想将其更改为动态 因为有时我的数量会更少或更多 尝试这个 Sub Test Dim lRow as
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代

随机推荐