Laden...

Wie kann ich ein VBA Skript in C# migrieren?

Erstellt von Tommylik vor 3 Jahren Letzter Beitrag vor 3 Jahren 787 Views
T
Tommylik Themenstarter:in
51 Beiträge seit 2019
vor 3 Jahren
Wie kann ich ein VBA Skript in C# migrieren?

Hallo,

Habe folgenden VBA Code den ich in C# umändern möchte und da es
keinen Converter gibt der das machen kann muss ich Euch fragen.

Dieser Code erstellt einen Ordner in Windows mit dem Inhalt aus dieser Variable: "PDE_FolderName"


Public Sub Ordner_erstellen()
'Diese Modul erstellt einen Ordner

Dim strNr As String
Dim strText As String
Dim strPfad As String
Dim strOrdner As String
Dim oFSO As Object

strNr = thisProject.Variables.Item("PDE_FolderName").Value
strText = Format(CStr(strNr), "000000000000") 'String 12 für den Ordnernamen

'Exportpfad
strPfad = "D:\S7_Export\AppData"     ' Pfad einstellen
strOrdner = strText
   
Set oFSO = CreateObject("Scripting.FileSystemObject")
        
        If oFSO.FolderExists(strPfad) Then
            If Not oFSO.FolderExists(strPfad & "\" & strOrdner) Then
                oFSO.CreateFolder (strPfad & "\" & strOrdner)
                
                'Rückmeldung Ordner erstellt mit Value = 0
                thisProject.Variables.Item("PDE_CreateFolder").Value = 0
            End If
            
        Else
        'Exportpfad nicht vorhanden mit Value = 1
        thisProject.Variables.Item("PDE_NoFolder").Value = 1
        End If
        
 Set oFSO = Nothing
 
End Sub


Ich habe etwas begonnen kann es aber nicht fertig stellen.
Die in Pluszeichen eingerahmten Zeilen weiß ich nicht um zu schreiben.
Wer von Euch ist so nett und würde das für mich machen.


private void _container_Changed(object sender, ChangedEventArgs e)
        {
            string strNr;
            string strText;
            string strPfad;
            string strOrdner;
            +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
            strNr = thisProject.Variables.Item("PDE_FolderName").Value;
            strText = Strings.Format((string)strNr, "000000000000"); // String 12 für den Ordnernamen
            ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


            // Exportpfad
            strPfad = @"D:\S7_Export\AppData";     // Pfad einstellen
            strOrdner = strText;


            try
            {
                if (Directory.Exists(strPfad))
                {
                    // Try to create the directory.
                    Directory.CreateDirectory(strPfad + "\\" + strOrdner);
               
               +++++++++++++++++++++++++++++++++++++++++++++
               'Rückmeldung Ordner erstellt mit Value = 0
                thisProject.Variables.Item("PDE_CreateFolder").Value = 0
                +++++++++++++++++++++++++++++++++++++++++++++
                }
             
            }
            catch (Exception)
            {
             +++++++++++++++++++++++++++++++++++
             'Exportpfad nicht vorhanden mit Value = 1
             thisProject.Variables.Item("PDE_NoFolder").Value = 1
             +++++++++++++++++++++++++++++++++++   
            }


        }



Es wäre super wenn einer von Euch bereit ist und mir diese Zeilen übersetzt.
Vielen Dank im voraus.

Mfg Tommylik

1
124 Beiträge seit 2012
vor 3 Jahren

Hallo Tommylik,

dass kann man nicht ohne Hintergrundwissen umschreiben.

Da die mit plus eingerahmten Zeilen eine Änderung in S7 (Vermutlich Tia Portal) ist. Es verändert deine S7 Variablen.

Die beiden Variablen:
PDE_CreateFolder wird auf 0 gesetzt
PDE_NoFolder wird auf 1 gesetzt

d.h. du musst uns zeigen, wie du die oben genannten Variablen aus Tia Portal im Programm integriert hast.

Wenn Tia Portal komplett aus der Aktion fällt würde man dies vermutlich komplett wegfallen lassen, da man über if Abfragen raus bekommt, ob der Ordner vorhanden ist.

Gruß Thomas

T
Tommylik Themenstarter:in
51 Beiträge seit 2019
vor 3 Jahren

Hallo Thomas,

Vielen Dank für deine Antwort.

Na klar sollst du bekommen.

Es ist noch S7 Ver. 5.6 wir haben kein TIA

Das ist das ganze Skript. wird über die Visu gemacht.


VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "thisProject"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True

Option Explicit


' Definition der Container mit Onlinevariablen für
' jeden Zugriff auf Runtimevariablen aus dem VBA-Skript heraus.


Public PDE_Container As OnlineVariable

Private Sub Project_Active()
    
    Set PDE_Container = thisProject.OnlineVariables.CreateOnlineVariables("PDE")
 
    PDE_Container.Add "PDE_PraegeCode"
    PDE_Container.Add "PDE_FolderName"
    PDE_Container.Add "PDE_CreateFolder"
    PDE_Container.Add "PDE_NoFolder"
    PDE_Container.Add "PDE_NoFile"
	PDE_Container.Add "PDE_FileCopy"
       
    PDE_Container.Define
        
End Sub


Private Sub Project_Inactive()
     
    PDE_Container.Undefine
    thisProject.OnlineVariables.DeleteOnlineVariables ("PDE")
   
End Sub  


Public Sub Ordner_erstellen()
'Diese Modul erstellt einen Ordner

Dim strNr As String
Dim strText As String
Dim strPfad As String
Dim strOrdner As String
Dim oFSO As Object

strNr = thisProject.Variables.Item("PDE_FolderName").Value
strText = Format(CStr(strNr), "000000000000") 'String 12 für den Ordnernamen

'Exportpfad
strPfad = "D:\S7_Export\AppData"     ' Pfad einstellen
strOrdner = strText
   
Set oFSO = CreateObject("Scripting.FileSystemObject")
        
        If oFSO.FolderExists(strPfad) Then
            If Not oFSO.FolderExists(strPfad & "\" & strOrdner) Then
                oFSO.CreateFolder (strPfad & "\" & strOrdner)
                
                'SPS Trigger rücksetzen.
                thisProject.Variables.Item("PDE_CreateFolder").Value = 0
            End If
            
        Else
        'SPS informieren wenn Exportpfad nicht vorhanden.
        thisProject.Variables.Item("PDE_NoFolder").Value = 1
        End If
        
 Set oFSO = Nothing
 
End Sub

Public Sub FileCopy()

Dim strNrO As Variant
Dim strNrD As Variant
Dim strOrdner As String
Dim strDatei As String
Dim oFSO As Object

strNrO = thisProject.Variables.Item("PDE_FolderName").Value
strNrD = thisProject.Variables.Item("PDE_PraegeCode").Value
strOrdner = Format(CStr(strNrO), "000000000000") 'String 12 für den Ordnernamen
strDatei = Format(CStr(strNrD), "00000000000")     'String 11 für den Dateinamen         

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Fehlerroutine: Datei nicht vorhanden
If oFSO.FileExists("\\TOX210R01\AppData\" & strDatei & "TOX210R01.txt") = False Then
   'File doesn't exist
thisProject.Variables.Item("PDE_NoFile").Value = 1
Else
   'File exist
oFSO.CopyFile "\\TOX210R01\AppData\" & strDatei & "TOX210R01.txt", "D:\S7_Export\AppData\" & strOrdner & "\"
End If

thisProject.Variables.Item("PDE_FileCopy").Value = 0 'SPS Trigger rücksetzen.
         
Set oFSO = Nothing

End Sub

Vielen Dank nochmal für deine Antwort.

Mfg Tommylik

1
124 Beiträge seit 2012
vor 3 Jahren

Hallo Tommylik,

vielen Dank dafür.

So wie ich das sehe werden die Variablen "PDE_PraegeCode" "PDE_FolderName" "PDE_CreateFolder" "PDE_NoFolder" "PDE_NoFile" "PDE_FileCopy" in der VISU benutzt, d.h. du musst ja eine Schnittstelle zwischen der S7 und C# aufbauen, um diese auszutauschen. Ist eine Schnittstelle in deinem Programm schon vorhanden?

T
Tommylik Themenstarter:in
51 Beiträge seit 2019
vor 3 Jahren

Hallo Thomas,

Vielen Dank für deine Antwort.

So funktioniert es zur Zeit mit VBA.

Also die Visu ist Zenon von Copa Data und wenn die Runtime von Zenon startet dann wird alles aus dem VBA Projekt "thisprojekt" mit gestartet und steht zur Verfügung.

Wenn dann z.B. die SPS den Merker PDE_CreateFolder auf True setzt dann wird der Ordner
mit dem Inhalt aus der String Variable PDE_FolderName in Windows erstellt.

Ich denke das Zenon RT die Schnittstelle ist. Im Zenon Editor wurden die Variablen
angelegt die dann durch den Onlinecontainer an VBA übergeben werden.


Public PDE_Container As OnlineVariable

Oder was meinst du genau mit Schnittstelle?? Und welches Programm von mir meinst du?

Das VBA Programm war schon immer da und das was ich vorhin gepostet habe ist das einzige was ich für C# begonnen habe. Mit Sicherheit entspricht es nicht der Logik mit dem Skript zu beginnen der den Ordner erstellt wenn man noch keinen Anfang hat.

Aber das war das einzige was ich geschafft habe zu übersetzen alles andere übersteigt meinen Horizont.

Vielen Dank nochmal für deine Hilfe.

Mfg Tommylik

1
124 Beiträge seit 2012
vor 3 Jahren

Ich denke das Zenon RT die Schnittstelle ist. Im Zenon Editor wurden die Variablen
angelegt die dann durch den Onlinecontainer an VBA übergeben werden.

Korrekt, dass denke ich auch. Und du musst ja nun auf den Onlinecontainer mit C# zugreifen. Und diese Schnittstelle kenne ich nicht. Da musst du dich informieren.

Google doch mal nach API von Zenon.

T
Tommylik Themenstarter:in
51 Beiträge seit 2019
vor 3 Jahren

Hallo Thomas,

Vielen Dank für deine Antwort.

Ich habe nach API von Zenon gegoogelt aber nichts gefunden.

Ich habe aber das hier gefunden.

Schnittstelle

Wenn man mit dem Visual Studio arbeitet dann braucht man anscheinend die

Developer Tools

Dann habe ich das noch

ObjectModel Help

Variablen hinzufügen

Das C# Beispiel AddVariable hat Ähnlichkeiten mit dem VBA Projekt aber ich verstehe noch weniger.
Du liest das wahrscheinlich wie einen spannenden Roman.

Hilft dir das weiter?

Vielen Dank nochmal für deine Hilfe.

Mfg Tommylik

16.827 Beiträge seit 2008
vor 3 Jahren

Tommylik, das Forum ist kein kostenloser Quellcode Generator.
Wenn Du möchtest, dass Dir das jemand programmiert, dann verwende bitte die Jobbörse dafür und entlohne denjenigen.
Siehe auch [Hinweis] Wie poste ich richtig?

T
Tommylik Themenstarter:in
51 Beiträge seit 2019
vor 3 Jahren

Hallo Abt,

Das ist mir auch klar, aber gegen eine höffliche bitte weil ich etwas nicht kann sollte nichts dagegen sprechen. Und wenn dann jemand freiwillig hilft sollte das auch in Ordnung sein.
Wenn niemand auf meine Bitte reagiert dann habe ich noch die Möglichkeit wie du gesagt hast.
Da aber so etwas ein paar Hundert Euro kostet kommt das für mich nicht in Frage.
Und niemand macht so etwas für 10€.

@ Thomas
Vielen Dank nochmal für deine Hilfe.

Wir können dieses Thema hiermit schließen.

Mfg Tommylik

16.827 Beiträge seit 2008
vor 3 Jahren

Und niemand macht so etwas für 10€.

...aber kostenlos, oder wie?
Verstehe die Logik nicht 😉

1
124 Beiträge seit 2012
vor 3 Jahren

Hallo Tommylik,

da bist du leider auf der falschen Fährte. Das was du da gefunden hast ist scheinbar eine Entwicklungsumgebung, damit du dir Plugins in das Tool Zenon einbauen kannst.

Ich mein rein theoretisch kann man sich darüber einen Plugin bauen, welches dann die Schnittstelle herstellt zu dem Container. Aber dies wäre oversized. Daher musst du in der Richtung nochmal weitersuchen. API oder Interface oder ähnliches.

Bist du dir denn sicher, dass das Tool eine Schnittstelle zu C# bereit stellt? Oder bist du einfach mal mit C# angefangen?

R
3 Beiträge seit 2020
vor 3 Jahren

Hallo tommylik,

ich habe in einem anderen Forum schon angemerkt dass du kaum jemanden finden wirst der dir einfach einen Code umschreiben wird vorallem da ZenOn etwas spezifischer ist und hier wohl kaum jemand direkt damit gearbeitet hat (oder eher wenige).

Habe trotzdem mal eine Basisversion für dich hinterlassen und hoffe dass du damit arbeiten kannst:

https://www.sps-forum.de/hochsprachen-opc/102385-wie-vba-scripte-mit-der-s7-verbinden-3.html

Es handelt sich eben um ein AddIn für die Entwicklungsumgebung von ZenOn und eigenen Bibliotheken dahinter.