myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie kann ich ein VBA Skript in C# migrieren?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich ein VBA Skript in C# migrieren?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Tommylik
myCSharp.de-Mitglied

Dabei seit: 30.10.2019
Beiträge: 22
Herkunft: Löwenstadt


Tommylik ist offline

Wie kann ich ein VBA Skript in C# migrieren?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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"

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
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.

C#-Code:
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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tommylik am 05.01.2021 09:48.

Neuer Beitrag 05.01.2021 07:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
123thomas
myCSharp.de-Mitglied

Dabei seit: 21.12.2012
Beiträge: 123
Entwicklungsumgebung: Visual Studio 2017 Community


123thomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 05.01.2021 09:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Tommylik
myCSharp.de-Mitglied

Dabei seit: 30.10.2019
Beiträge: 22
Herkunft: Löwenstadt

Themenstarter Thema begonnen von Tommylik

Tommylik ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Tommylik am 05.01.2021 10:35.

Neuer Beitrag 05.01.2021 10:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
123thomas
myCSharp.de-Mitglied

Dabei seit: 21.12.2012
Beiträge: 123
Entwicklungsumgebung: Visual Studio 2017 Community


123thomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
Neuer Beitrag 05.01.2021 11:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Tommylik
myCSharp.de-Mitglied

Dabei seit: 30.10.2019
Beiträge: 22
Herkunft: Löwenstadt

Themenstarter Thema begonnen von Tommylik

Tommylik ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Code:
1:
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
Neuer Beitrag 05.01.2021 12:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
123thomas
myCSharp.de-Mitglied

Dabei seit: 21.12.2012
Beiträge: 123
Entwicklungsumgebung: Visual Studio 2017 Community


123thomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Tommylik:
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.
Neuer Beitrag 05.01.2021 15:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Tommylik
myCSharp.de-Mitglied

Dabei seit: 30.10.2019
Beiträge: 22
Herkunft: Löwenstadt

Themenstarter Thema begonnen von Tommylik

Tommylik ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 05.01.2021 16:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.447
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
Neuer Beitrag 05.01.2021 19:59 Beiträge des Benutzers | zu Buddylist hinzufügen
Tommylik
myCSharp.de-Mitglied

Dabei seit: 30.10.2019
Beiträge: 22
Herkunft: Löwenstadt

Themenstarter Thema begonnen von Tommylik

Tommylik ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Neuer Beitrag 05.01.2021 23:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.447
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Tommylik:
Und niemand macht so etwas für 10€.

...aber kostenlos, oder wie?
Verstehe die Logik nicht ;-)
Neuer Beitrag 06.01.2021 19:33 Beiträge des Benutzers | zu Buddylist hinzufügen
123thomas
myCSharp.de-Mitglied

Dabei seit: 21.12.2012
Beiträge: 123
Entwicklungsumgebung: Visual Studio 2017 Community


123thomas ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?
Neuer Beitrag 07.01.2021 07:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rabi Rabi ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.04.2020
Beiträge: 3
Entwicklungsumgebung: Visual Studio
Herkunft: Österreich


Rabi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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-op...erbinden-3.html



Es handelt sich eben um ein AddIn für die Entwicklungsumgebung von ZenOn und eigenen Bibliotheken dahinter.
Neuer Beitrag 07.01.2021 21:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.01.2021 04:06