4

VBA(Excel)で記述された膨大な量のコードをVB6に変換する必要があります。しかし、私は自分が何をしなければならないのか、どこから始めればよいのか本当にわかりません。したがって、ここでVB6の専門家からいくつかのヒントを得るのは素晴らしいことです。

すでにMSVisualStudioをインストールして、少し遊んでみました。しかし、私はVB6の専門家ではなく、自分が何をしなければならないのか本当にわかりません。

最終的な目標は、現在1つのexcel vbaマクロに配置されているすべてのVBAコードをVB6プロジェクトに入れ、そこから.dllを作成することです。この.dllはExcelによって参照され、Excelは現在と同じように実行される必要があります:-)

たとえば、このvbaコードをVB6に変換するにはどうすればよいですか。

Public Function getParameterNumberOfMaterial() As Integer
10        On Error Resume Next
          Dim a As String
20        a = Sheets("Parameters").name

30        If IsNumeric(Application.Worksheets(a).range("C3").Value) Then
40            If Application.Worksheets(a).range("C3").Value > 0 Then

50                getParameterNumberOfMaterial = Application.Worksheets(a).range("C3").Value
60            Else
70                MsgBox "Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero"
80                MsgBox "Parameter Number of Material/Cost is set to the default value of 10"
90                getParameterNumberOfMaterial = 10
100           End If
110       Else
120           MsgBox "Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero"
130           MsgBox "Parameter Number of Material/Cost is set to the default value of 10"
140           getParameterNumberOfMaterial = 10
150       End If
160       On Error GoTo 0
End Function

編集:はい。vbaコードを.dllに変換できる場合は、これでも問題ありません。そうすれば、コードを変換する必要はありません。しかし、vb6コードから.dllを作成することしかできないと思います。

4

3 に答える 3

5

@トム

わかりました、私は実際にあなたとこれを学んでいるので、ここに行きます、

VB.Netコード(私は.net 2.0を使用しています)


Visual Studio 2005で、新しいクラスライブラリプロジェクトを開き、そこに既に書き込まれているすべてのガベージを削除して、コードを貼り付けます

'最初に行うことは、Excelランタイムへの参照を追加することです

Microsoft.Office.Interop.Excelをインポートします
System.Runtime.InteropServicesをインポートします


名前空間ExcelExample

'以下は、クラスが管理されていない(.net以外の)方法でアクセスできることを示す属性です。

Microsoft.Office.Interop.Excelをインポートします
System.Runtime.InteropServicesをインポートします


 パブリッククラスExcelVB


    パブリック関数getParameterNumberOfMaterial()As Integer
        エラー時に次を再開
        文字列として暗くする
        Dim appInst As New Microsoft.Office.Interop.Excel.Application
        a = appInst.Sheets( "Parameters")。name

        If IsNumeric(appInst.Worksheets(a).range( "C3")。Value)Then
            appInst.Worksheets(a).range( "C3")。Value>0の場合Then

                getParameterNumberOfMaterial = appInst.Worksheets(a).range( "C3")。Value
            そうしないと
                MsgBox("シート'パラメータ'のセルC3を確認してください。ゼロより大きい数値を含める必要があります")
                MsgBox( "材料/コストのパラメータ番号はデフォルト値の10に設定されています")
                getParameterNumberOfMaterial = 10
            終了する場合
        そうしないと
            MsgBox("シート'パラメータ'のセルC3を確認してください。ゼロより大きい数値を含める必要があります")
            MsgBox( "材料/コストのパラメータ番号はデフォルト値の10に設定されています")
            getParameterNumberOfMaterial = 10
        終了する場合
        エラー時GoTo0
    終了機能
エンドクラス

名前空間の終了



F6キーを押してソリューションを構築し、[プロジェクト]-> [プロジェクトプロパティ]に移動して、COm相互運用機能の登録を確認します

したがって、出力は.DLLと.tlbであり、Excelファイルは.tlbファイルを参照する必要があります。

regasm / codebase c:\ Excel\dllname.dllでDLLを登録する必要があります

次に、Excelから関数にアクセスできます。

ここに私のプロジェクトフォルダへのリンクがあります。これは、.tlbを介した.dllへの参照を含むExcelワークブックを見つけることができます。

http://cid-4af152a1af4d7db8.skydrive.live.com/self.aspx/Documents/Debug.rar

ここに別の素晴らしい記事があります

http://richnewman.wordpress.com/2007/04/15/a-beginner%E2%80%99s-guide-to-calling-a-net-library-from-excel/

于 2010-01-11T19:10:28.700 に答える
2

VB6への変換は簡単です。

  1. VB6DLLプロジェクトを作成します。これを行う方法と、メソッド、クラス、および関数を公開する方法については、Webで検索してください。

  2. 「MicrosoftOfficeExcel##ライブラリ」への参照を追加します。

  3. DLLのメソッドとして公開されるプロジェクトのプロシージャに、次のコードを追加します。

    Dim E As Excel.Application
    Set E = GetObject(, "Excel.Application")
    'or if Excel is not running use CreateObject("Excel.Application")
    'You can use error handling to figure out which one you need.
    
  4. 通常のVBAコードを続行しますが、1つの変更を加えます。またはなどのグローバルにアクセスされるオブジェクトは、、ActiveSheetおよびにActiveWorkbookなるSheets必要があります。E.ActiveSheetE.ActiveWorkbookE.Sheets

VBAプロジェクトにフォームがある場合、VB6とVBAではフォームが完全に異なるため、フォームを変換するのに少し手間がかかります(長い目で見れば同じようには機能しません)。

于 2012-12-21T20:09:39.397 に答える
0

@トムトム

コードを.VBAからvb6に変換するのに問題はないはずです。実際のところ、実際にはそうする必要はありません。

問題はVB6のコンテキストにあり、langugaeは何を理解できません

「Application.Worksheets(a).range( "C3")。Value)」は、

オブジェクトアプリケーションは、VB6では異なる意味を持っています

VBA(お持ちのVBAバージョン)は、Excel(またはword、またはMSOに付属するもの)でのVB6のほぼカスタマイズされた実装です。

VB6からExcelUIにアクセスしようとするのは悪い考えです(それが可能かどうかさえわかりません)

あなたがすべきことは、ビジネスロジックをコードから分離し、それをVB6ライブラリにすることです。

たとえば、あなたのコードは(私が理解しているように)セルC3の値を返します

これはExcelUIと非常に密接に関連しているため、コードをVB6に変換することは不可能ではないにしても、非常に逆効果になります。

コードを変換しても、(Application.Worksheets(a).range( "C3")。Value)のようなほとんどの変数はVBAから呼び出す必要があるため、これは無意味です。

ただし、他の純粋なBussinessロジックがある場合は、簡単に移植できます(移植するものが実際にはないため面白い)

于 2010-01-11T11:30:41.617 に答える