Registriert seit: 23.02.2017
Version(en): 2013
23.02.2017, 15:59
(Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2017, 16:20 von SiegfriedHeldt.)
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
Registriert seit: 11.04.2014
Version(en): 2021
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.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 28.07.2015
Version(en): 365
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
Registriert seit: 23.02.2017
Version(en): 2013
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
Registriert seit: 23.02.2017
Version(en): 2013
Ich finde es höchst verwunderlich, dass das funktioniertCode: Debug.Print Datenbefuellen.MethodDatenbefuellen (a), (b)
Aber das nicht Code: Rückgabewert = Datenbefuellen.MethodDatenbefuellen (a), (b)
Registriert seit: 28.07.2015
Version(en): 365
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:1 Nutzer sagt Danke an DbSam für diesen Beitrag 28
• SiegfriedHeldt
Registriert seit: 23.02.2017
Version(en): 2013
Carsten, vielen lieben Dank auch. Die Argumente haetten alle in die Klammern gemüsst. Darauf muss man erst kommen ;)
Registriert seit: 11.04.2014
Version(en): Office 2007
Auch Hallo, es fehlt ein am Ende des Code von der Sub Matching, was ja auch die Fehlermeldung besagt.
Gruß Stefan Win 10 / Office 2016
|