【问题标题】:VB: Highlight Excel cell in worksheetVB:突出显示工作表中的 Excel 单元格
【发布时间】:2014-01-15 05:44:25
【问题描述】:

我想知道是否可以创建一个 vbs 文件来突出显示 Excel 工作簿中的单元格。

我有一个包含多个计算机主机名的 excel 工作表,我还批量运行一个脚本,对文本文档中的每个主机名进行 ping 操作。如果 ping 结果成功,我想调用 vbs 文件以突出显示 excel 中的单元格。这可能吗?

谢谢!

迪米特里

【问题讨论】:

  • 是的,一切皆有可能(几乎!)。
  • 我不只是用批处理 ping 计算机,如果它回复 ping 请求,我也会用批处理修补计算机。话虽如此,我想按照你的方式做,比尔,我将不得不更改我的批处理文件并将计算机名称传递给批处理以执行修补过程。我真的只是想要一种通过执行 vb 脚本来突出显示已完成的方法。希望这能回答一些问题。
  • 好的,使用我提供的任何一种方法,您也可以在 Excel 中进行修补。也就是说,如果您想继续使用批处理文件,那么您仍然可以使用我的代码,您只需将其迁移到 VBScript 并从脚本中创建一个 Excel 对象即可使用它。然后您可以使用此处找到的任何方法批量调用 VBS:stackoverflow.com/questions/11899730/…
  • 抱歉,我需要进一步澄清您遇到的问题的具体部分。它是从批处理中调用 VBS 吗?是否打开 Excel 并在 VBScript 中修改工作表?它是突出显示单元格的代码吗?我在回答中要说的是,您会发现 ping 和修补所有主机名、存储该过程的结果、然后返回并根据这些存储的结果突出显示工作表而不是尝试管道您在批处理中的任何时间点处理的任何主机名到 VBS 脚本并仅更新该单元格。
  • 我只有批处理文件,以前从未在 excel 中使用过 VB。我想让批处理调用 excel 文件并在成功时突出显示计算机名称列的原因是因为我们有数百个计算机名称,如果脚本运行,我最终会得到数百个成功的补丁。现在这一切都很好,花花公子,但是手动返回并突出显示成功的组合是一个手痛。我认为 excel 执行脚本不起作用的另一个原因是因为脚本需要以管理员身份而不是用户身份执行,因此可能会导致问题。

标签: excel vbscript vba


【解决方案1】:

有很多方法可以做到这一点,但我必须问你为什么要使用批处理脚本和文本文件来 ping 主机名,而你可以在 Excel 中做到这一点?

有两种方法可以做到这一点......一种更复杂和正确,另一种快速而肮脏。坦率地说,我推荐快速和肮脏的。

正确方法: 从您的 Windows kernel32.dll 中声明 ReadConsole 和 WriteConsole 方法,并利用它们来获取您的 ping 结果。这里描述得很好:

http://visualbasic.about.com/od/learnvb6/l/bldykvb6dosa.htm

问答方式: 使用 VBA 中的内置 Shell() 函数并将 ping 的输出通过管道传输到文本文件。解析所述文本文件并在完成后将其删除。

例如

for each currCell in hostnameRange
   ' Ping each hostname and pipe the results to a file
   shell "ping " + currCell.value + " >> ping_result.txt"
next currCell

inFile = FreeFile()
Open "ping_result.txt" for Input as #inFile

fileBuffer = Input$(LOF(inFile ), inFile) ' Open and read the file to a buffer

for each currCell in hostnameRange
   ' Search for ping failures in the buffer
   if instr(1, fileBuffer, "could not find host " + currCell.value) = 0 then
        debug.print "Ping successful."
   end if
next currCell

【讨论】:

  • 比尔......这是一个答案而不是评论?
  • 评论如何?它为问题提供了两种可能的解决方案?你对答案有什么期望?为这个人完成的全部工作?我想这不像你的 cmets 看起来那么有动力。
  • 您提供了基于假设的可能解决方案,这些假设没有得到证实。其次,你刚刚提供了别人作品的链接……又是怎么回答的?
  • 唯一的假设是他们通过批处理文件而不是直接在电子表格中执行主机名来完成比他们需要的更多的工作。我觉得这是一个安全的假设来回答,无论他们是否想调用 VBS 文件来做这件事,它仍然是可用的。另外,别人的工作是指在kernel32.dll中编写API的程序员吗? ...因为这就是我提供的所有链接解释。我还提供了一个替代解决方案,顺便说一下,我建议他们使用外部引用的方法。
  • 看看this,同意不同意。
猜你喜欢
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 2014-10-18
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多