2016-08-10 5 views
0

私は最近、ビジュアル基本スタジオを使用して.NETビジュアルベーシックでプログラミングを開始しました。私もいくつかのマクロを作るためにVBAを使っています。答えは明白であれば、誰かが、謝罪を私は持っている質問に答えることができれば、私は非常に感謝だろう、私は始めたばかりだ:ExcelとVisual Basicの間で変数を共有

基本的に、私はエクセルVBAで変数を設定した場合、例えば:

dim text as string 

text = "hello world" 

Visual Basicでプログラミングするときにその変数を使用し、Excel VBAマクロで設定したときの値を保持することは可能でしょうか。

説明が必要な場合は、ご意見ください。

多くのありがとうございます。

SOLUTION:次のように

オーケー、私はソリューションの助けを借り、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 
+1

値を渡すことは常に可能ですが、どのように行うかは、値で正確に何をしたいかによって決まります。 2つのプログラムが並んで実行されているか、お互いに値を渡してロックステップで実行していますか?または、次の時間に実行されるたびに、実行中のものと別の出力をどこかに保存しておきますか?また、別々に実行する必要がありますか、.NETアプリケーション内からVBAマクロを実行するだけですか? – Mikegrann

答えて

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 

そして、これは他の場所(このマシン上で.NETを実行していない、ただのMicrosoft Office VBAプロジェクト内のコードですあなたはこれを持って悲しい):

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に右^上記のコードの変換を残す(または.NETのコードはExcelを処理するSOのためにここで検索を行うしたいと思いますオブジェクト)を試してみて

+0

返信いただきありがとうございました。私はいくつかの手直しの後にそれを動作させることができました。これは、どのように変数を転送することができ、どのようにVBからExcelを管理するための基本的な考えを私に与えます。私は自分の答えを編集し、私のような他の迷子のコードを投稿します。ありがとうございました。 – Ruthus99

+0

私はこれが助けてうれしいです!特に、実際のVB.Netコードソリューションを紹介するために投稿を更新してうれしいです。 – Busy

関連する問題