Konvertieren von vba nach vb6 und erstellen Sie eine .dll - how-to - Hinweise, Tipps und Risiken
Sollte ich konvertieren eine große Last von code, der geschrieben wurde in VBA (Excel) zu VB6. Aber ich weiß wirklich nicht, was ich zu kümmern oder wo zu beginnen. Deshalb wäre es toll, einige Tipps hier aus dem VB6-Experten.
Ich bereits installiert-MS Visual Studio und spielte ein wenig herum. Aber ich bin nicht ein VB6-Experte und weiß nicht wirklich, was ich zu tun habe.
Das Ziel ist, die haben alle den VBA-code, die derzeit in einem excel-vba-makro in ein VB6-Projekt und erstellen Sie eine .dll draus. Diese .dll referenziert werden soll, indem Sie die excel und die excel ausführen soll, wie Sie es jetzt tut 🙂
Z.B. was muss ich tun, um zu konvertieren, das vba-code zu 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
Edit: ja und wenn es möglich ist, zu konvertieren vba-code in eine .dll wäre dies auch in Ordnung. Dann würde ich nicht zu konvertieren, Sie den code. Aber ich denke, es ist nur möglich zu erstellen .dll aus vb6 code.
- Können Sie zu prüfen, mit .NET?
- Eigentlich ja. Aber das vba-Projekt hat über 8000 loc. Ich denke, es wäre eine schreckliche Arbeit umwandeln .NET. Ich dachte, vb6 hat eine ähnliche syntax, und deshalb wäre es nicht zu viel Arbeit ist. Tun Sie thiink, es wäre eine gute Idee zu wählen .NET?
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Tom
Ok, bin ich eigentlich lernen dies bei Ihnen, so geht hier,
VB.Net code den ich verwende .net 2.0)
In Visual Studio 2005 öffnen Sie ein neues Class Library-Projekt
Dann entfernen Sie alle den Müll schon dort geschrieben und füge den code
Bauen die Lösung durch drücken von F6
gehen Sie zu Projekt->Projekt Proerties und Prüfen für COm-interop Registrieren
Also die Ausgabe ist eine .DLL und eine .tlb , die Excel-Datei sollte die Referenz .der tlb-Datei,
müssen Sie die DLL registrieren, die von regasm /codebase c:\Excel\dllname.dll
Dann können Sie auf die Funktion von Excel aus.
Heres ein link zu meinem Projekt-Ordner Entpacke es,
und finden Sie eine excel-Arbeitsmappe, die enthält einen Verweis auf die .dll über die .tlb
http://cid-4af152a1af4d7db8.skydrive.live.com/self.aspx/Documents/Debug.rar
Heres ein weiterer großer Artikel
http://richnewman.wordpress.com/2007/04/15/a-beginner%E2%80%99s-guide-to-calling-a-net-library-from-excel/
Umwandlung in VB6 ist einfach.
Erstellen Sie eine VB6-DLL-Projekt. Suchen Sie auf der Website für Anweisungen wie Sie dies tun und wie aussetzen, Methoden, Klassen und Funktionen.
Fügen Sie einen Verweis auf "Microsoft Office Excel - # # - Bibliothek".
In einem Verfahren des Projekts, die ausgesetzt sein wird als eine Methode in der DLL, fügen Sie den folgenden code:
Fahren Sie mit Ihrem normalen VBA-code, mit einer änderung: Global zugegriffen Objekte wie
ActiveSheet
oderActiveWorkbook
oderSheets
mussE.ActiveSheet
,E.ActiveWorkbook
undE.Sheets
.Wenn Sie Formulare in Ihrem VBA-Projekt wird es ein bisschen mehr Arbeit, Sie zu bekehren, denn die Formen sind völlig unterschiedlich in VB6 und VBA (Sie nicht die gleiche Arbeit durch eine lange erschossen).
@Tom Tom
Sollten Sie keine Probleme bei der Umwandlung des code aus .VBA nach vb6.als eine Angelegenheit von Tatsache, dass Sie praktisch nicht.
Ist das problem in VB6 Kontext, der langugae kann nicht verstehen, was
"Anwendung.Worksheets(a).range("C3").Wert)" bedeutet,
die Objekt-Anwendung hat eine andere Bedeutung in VB6
VBA (VBA-version) ist fast eine maßgeschneiderte Umsetzung von VB6 in Excel(oder word , oder alles, was mit MSO).
Wäre es eine schlechte Idee, zu versuchen, Zugriff auf Excel-Benutzeroberfläche von VB6 (ich bin mir auch nicht sicher ob das möglich )
was Sie tun sollten, teilen Sie die bussiness-Logik aus dem Code dann machen Sie es in ein VB6-Bibliothek.
Zum Beispiel Ihren code (so wie ich das verstehe) gibt den Wert der Zelle C3
Es ist sehr gebunden an die Excel-Benutzeroberfläche, so wäre es sehr kontraproduktiv, wenn nicht unmöglich, konvertieren Sie den code zu VB6.
denn selbst wenn Sie konvertieren Sie den code, die meisten der Variablen, wie z.B. (Antrags.Worksheets(a).range("C3").Wert) muss aus VBA aufgerufen wird, das ist sinnlos
jedoch, wenn Sie irgendwelche anderen reinen Bussiness Logik, dass portiert werden kann (es ist witzig, weil theres wirklich nichts zu port) leicht
Dim Ex As Excel.Application
und dann alle Ihre Automatisierung dagegen. Es ist vollkommen gültig!