Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Einfacher Code erwartet Anweisungsende
#1
Hallo Liebes Forum,

ich habe einen einfachen Code und eine Klasse samt Prozedur, die einen Rückgabewert liefert. Das funktioniert soweit.

In meinem Hauptmodul möchte ich nun den Rückgabewert aufrufen. Dies mache ich so:


Code:
Dim Datenbefuellen As New DatenABC
Rückgabewert = Datenbefuellen.MethodDatenbefuellen (a), (b)


DatenABC ist die Klasse, die die Methode MethodDatenbefuellen enthaelt. Die Werte a, b in den Klammern sind die Inputargumente

Dass das Funktioniert erkenne ich daran, dass wenn ich
Code:
Debug.Print Datenbefuellen.MethodDatenbefuellen (a), (b)

schreibe, den korrekten Rückgabewert erhalte. Wohingegen bei der obereren Ausführung ich die Fehlermeldung erhalte:
"Fehler beim Kompilieren: Erwarte Anweisungsende"

VG
Siggi
Antworten Top
#2
Hallo Siggi,

ohne dass du die "lange" Anleitung zu Code-einfügen lesen musst, geht das auch ganz einfach:
Zwischen die beiden händisch einzutragenden Befehle hier
fügst du deinen Code mittels Copy & Paste einfach ein.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
[-] Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:
  • SiegfriedHeldt
Antworten Top
#3
Hallo Siggi,

Deine Angaben sind bissel dünn und der aufgeführte Beispielcode sicher nur für das Forum gebastelt. - Man kann nur raten ...

Zuerst würde ich sagen:


Code:
Dim Datenbefuellen As New DatenABC, Rueckgabewert AS LongStringOderWasWeisIchWas

Rueckgabewert = Datenbefuellen.MethodDatenbefuellen(a, b)

Oder wenn 'a' und 'b' Strings sind:
Code:
Rueckgabewert = Datenbefuellen.MethodDatenbefuellen("a", "b")


Ansonsten poste mal den Originalcode ...


Gruß Carsten
Antworten Top
#4
Hi DbSam,

also das ist mein Code, der im Hauptmodul hinterlegt ist:

Code:
Sub Matching()


'Allgemein benötigte Variablen, welche Unabhaengig von der Bedatung sind
Dim OutputOrdner As String
Dim Typschluessel As String, Testtyp As String, Motortyp As String
Dim fso As Object
Dim Compass As String
Dim xlWBCompass As Workbook
Dim xlWSCompass As Worksheet
Dim TestDat As String
Dim xlAP As Object


Set fso = VBA.CreateObject("Scripting.FileSystemObject")

Set xlAP = CreateObject("Excel.Application")
Set xlWBCompass = xlAP.Workbooks.Open(OutputOrdner & "\compas_input_" & Typschluessel & ".xlsx")
Set xlWSCompassInputs = xlWBCompass.Sheets(2)   'Sheet(2) ist Tabelle "Input"

Testtyp = ActiveWorkbook.Worksheets(1).Range("B6").Value()             'Metadaten, die in "B1:B6" manuell eingetragen werden können
Typschluessel = ActiveWorkbook.Worksheets(1).Range("B1").Value()       'enthalten Informationen zum Fzg, Testfall


                                                                                       
OutputOrdner = ActiveWorkbook.Worksheets("Tabelle2").Range("B14").Value()               'Zielpfad abgelegt in "B14"
Template = ActiveWorkbook.Worksheets("Tabelle2").Range("B13").Value()                   'Template-Datei zur Datenbefüllung abgelegt in "B13"

Compass = OutputOrdner & "\compas_input_" & Typschluessel & ".xlsx"                   'Die Datei, "compas_input.xlsx ist die Outputdatei, die mit Daten befüllt wird
Call fso.CopyFile(Template, Compass)                                                   'Kopieren und Umbenennen der Outputdatei entsprechend des Typschlüssels

TestDat = ActiveWorkbook.Worksheets(1).Range("B4").Text()            


'Daten
Dim Datenbefuellen As New Daten
Motortyp = Datenbefuellen.MethodDatenbefuellen(Test), (Motortyp), (Typschluessel), (OutputOrdner)
Der Code, der in der Klasse hinterlegt ist, sieht wie folgt aus:
Code:
Public Function MethodNATDatenbefuellen(Optional TestDat As String = "", Optional Motortyp As String = "", Optional Typschluessel As String = "", Optional OutputOrdner As String = "") As String

'Variablen, die zum Auslesen der Daten benötigt werden
Dim xlWBSource As Workbook
Dim xlWSSource As Worksheet
Dim xlWBCompass As Workbook
Dim xlWSCompass As Worksheet
Dim xlAP As Object
Dim identifier_Quelle As String
Dim Quellspalte, Quellzeile, Zielzeile As Integer



Set xlAP = CreateObject("Excel.Application")
Set xlWBCompass = xlAP.Workbooks.Open(OutputOrdner & "\compas_input_" & Typschluessel & ".xlsx")
Set xlWSCompass = xlWBCompass.Sheets(2)   'Sheet(2) ist Tabelle "Input"
Set xlWBSource = xlAP.Workbooks.Open(Sheets(4).Range("B9").Value(), ReadOnly:=True)      
Set xlWSSourceNAT = xlWBSourceNAT.Sheets(1) 'Die NAT-Datei hat lediglich eine Tabelle


'Daten:
'Finden der Zellen, die befüllt werden sollen und Befüllung mit Daten aus der Quelle "NAT-Excel.xlsx"
'Finden von "fuel type"
identifier_Quelle = Sheets(2).Cells(8, 6).Text()
Quellzeile = xlWSSource.Range("A:B").Find(identifier_Quelle, LookIn:=xlValues, LookAt:=xlWhole).Row()
Quellspalte = xlWSSource.Cells.Find(NATTest, LookIn:=xlValues, LookAt:=xlWhole).Column()
xlWSSource.Cells(Quellzeile, Quellspalte).Copy
Zielzeile = xlWSCo2mpass.Range("A1:A200").Find(identifier_Quelle, LookIn:=xlValues, LookAt:=xlWhole).Row()
xlWSCo2mpass.Cells(Zielzeile, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'Definieren des Motortyps in Abhaengigkeit von fuel type
Motortyp = xlWSCo2mpass.Cells(Zielzeile, 3).Value()
If InStr(1, Motortyp, "diesel", vbTextCompare) > 0 Then
Motortyp = "Diesel"
Else
Motortyp = "Otto"
End If

MethodNATDatenbefuellen = Motortyp

'Zurücksetzen der Definierten Variablen
Set xlAP = Nothing
Set xlWSSourceNAT = Nothing
Set xlWBSourceNAT = Nothing
Set xlWSCo2mpass = Nothing
Set xlWBCo2mpass = Nothing

End Function


Die von dir aufgezeigte Methode habe ich bereits ausprobiert und die Fehlermeldung erhalten, die ich oben angeführt habe.
Code:
Code:Rueckgabewert = Datenbefuellen.MethodDatenbefuellen("a", "b")
VG
Antworten Top
#5
Ich finde es höchst verwunderlich, dass das funktioniert
Code:
Debug.Print Datenbefuellen.MethodDatenbefuellen (a), (b)

Aber das nicht
Code:
Rückgabewert = Datenbefuellen.MethodDatenbefuellen (a), (b)
Antworten Top
#6
Hallo Siggi,

das funktioniert beides nicht.


Zu dem vorherigen Post:

Sub Matching:
Das ist sicherlich nicht der komplette Code ...


Probiere bitte mit dieser Änderung, wie ich vorhin schon geschrieben hatte:
[
Bild bitte so als Datei hochladen: Klick mich!
]



Zumindest lässt sich das Werk damit kompilieren ...
(Die falsche Methode hattest Du auch aufgerufen oder gepostet.)



Gruß Carsten
[-] Folgende(r) 1 Nutzer sagt Danke an DbSam für diesen Beitrag:
  • SiegfriedHeldt
Antworten Top
#7
Carsten, vielen lieben Dank auch. Die Argumente haetten alle in die Klammern gemüsst. Darauf muss man erst kommen ;)
Antworten Top
#8
Auch Hallo,

es fehlt ein

Code:
End Sub

am Ende des Code von der Sub Matching, was ja auch die Fehlermeldung besagt.
Gruß Stefan
Win 10 / Office 2016
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste