【问题标题】:Share variables between excel and visual basic在 Excel 和 Visual Basic 之间共享变量
【发布时间】:2016-08-11 18:02:49
【问题描述】:

我最近开始使用 Visual Basic Studio 使用 .NET Visual Basic 进行编程。我也在使用 excel VBA 来制作一些宏。如果有人能回答我的问题,我将不胜感激,如果答案很明显,我很抱歉,我才刚刚开始:

基本上,如果我在excel VBA中设置了一个变量,例如:

dim text as string

text = "hello world"

我是否可以在 Visual Basic 中编程时使用该变量,并让它保留在 Excel VBA 宏中设置时的值。

如果您需要澄清,请发表评论。

非常感谢。

解决方案:

好的,我在解决方案的帮助下设法弄清楚了,在 VB 中工作的代码如下:

Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Core

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim oxl As excel.application
        Dim owb As excel.workbook
        Dim osheet As Excel.worksheet
        Dim orng As excel.Range
        Dim strtext As String



        oxl = CreateObject("Excel.application")
        owb = oxl.Workbooks.Open(Filename:="C:\Users\USERNAME\Documents\Variable Passing Test.xlsm")

        oxl.Run("dosomethingtostrtext")

        strtext = oxl.Run("getstrtext")

        MsgBox(strtext)

    End Sub
End Class

【问题讨论】:

  • 传递值始终是可能的,但你将如何做取决于你想对这些值做什么。两个程序是否并排运行,在彼此之间传递值并以锁定步骤运行?还是一个正在运行并在某处存储一些输出以供另一个在下次运行时获取?它们是否必须单独运行,或者您可以在 .NET 应用程序中执行 VBA 宏吗?

标签: vba excel visual-studio-2012


【解决方案1】:

访问另一个工作簿的 VBA 代码中的变量的一种方法是创建将这些值返回给您的函数。然后从您的其他应用调用这些函数。

例如,让它成为您 Excel 文件中的模块中的代码,其中包含宏:

Option Explicit

Private strText As String

' Say you have a routine that manipulates strText (or not, even!)
Public Sub doSomethingToSTRTEXT()
    strText = "Hello World!"
End Sub

' This is the function to call to retrieve strText
Public Function getSTRTEXT() As String
    getSTRTEXT = strText
End Function

这是其他地方的 VBA 项目中的代码(不在这台机器上运行 .Net,只是 microsoft office sad),你有这个:

Option Explicit

Sub Test()
    ' Declare
    Dim WBK As Workbook
    ' Open the workbook in question
    Set WBK = Workbooks.Open(Filename:="C:\Path\To\File\With\VBA.xls")

    ' This code's own variable
    Dim strText As String

    ' Call the routine (or not) that does something to that workbook's vba's strText
    Application.Run (WBK.Name & "!doSomethingToSTRTEXT")

    ' Now let's retrieve that value via function!
    strText = Application.Run(WBK.Name & "!getSTRTEXT")

    ' Show it to me
    MsgBox strText
End Sub

我想将 ^ 上方的代码转换为 VB.Net 留给您(或在 SO 上搜索用于处理 Excel 对象的 .Net 代码)并尝试一下

【讨论】:

  • 非常感谢您的回复,经过一番修改,我设法让它工作了。这让我对如何传输变量以及如何从 VB 管理 excel 有了基本的了解。我将编辑我的答案并为像我这样的其他迷路者发布代码。再次感谢非常感谢!!!
  • 我很高兴这有帮助!特别高兴您更新了帖子以展示实际的 VB.Net 代码解决方案。
猜你喜欢
  • 1970-01-01
  • 2020-04-08
  • 2012-10-27
  • 2018-04-25
  • 2020-09-11
  • 2011-09-14
  • 2013-07-26
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多