Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1396to1400
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sub aufrufen

Sub aufrufen
04.12.2014 07:56:07
Larissa
Hallo zusammen,
ich möchte gerne einen Sub oder Function in einem anderen Sub aufrufen.
Leider erhalte ich dabei den Laufzeitfehler 1004 - Anwendungs- oder objektdefinierter Fehler.
Hab schon unterschiedliche "Zusammensetztungen" oder Google-Ergebnisse ausprobiert, bin aber leider nicht weiter gekommen.
Hier mein Code:
Sub freie_zeile()
Dim erste_freie_zeile As Long
erste_freie_zeile = [A:Z].Find(What:="*", After:=[A1], LookIn:=xlValues, SearchDirection:= _
xlPrevious).Row + 1
MsgBox "Angelegte Zeile:" & " " & erste_freie_zeile
End Sub
Function i_max_Durchmesser()
If Not ((TextBox15.Text = "") And (TextBox18.Text = "")) Then
Dim lichter_Durchmesser As Double
lichter_Durchmesser = TextBox15.Value
Dim IRH As Double
IRH = TextBox18.Value
Dim i_max As Double
i_max = lichter_Durchmesser + 2 * IRH
End If
End Function
Function Kernrohr_Durchmesser()
If Not ((TextBox58.Text = "") And (TextBox17.Text = "")) Then
Dim Außendurchmesser As Double
Außendurchmesser = TextBox58.Value
Dim ARH As Double
ARH = TextBox17.Value
Dim KernrohrDurchmesser As Double
KernrohrDurchmesser = Außendurchmesser - 2 * ARH
End If
End Function

Private Sub CommandButton3_Click() ' Übernehmen
Call freie_zeile
Call i_max_Durchmesser
Call Kernrohr_Durchmesser
Sheets("Daten").Cells(erste_freie_zeile, 37) = KernrohrDurchmesser
Sheets("Daten").Cells(erste_freie_zeile, 24) = i_max
Sheets("Daten").Cells(erste_freie_zeile, 91) = TextBox1.Text
Sheets("Daten").Cells(erste_freie_zeile, 92) = TextBox2.Text
End Sub

Bei Debuggen springt er in die erste Zeile von
Sheets("Daten").Cells(erste_freie_zeile, 37) = KernrohrDurchmesser
egal was dort hinter dem "=" steht.
Wenn ich mit der Maus dann auf "KernrohrDurchmesser" gehe, steht dort "Leer"
Wenn ich die ganzen Subs, die ich aufrufen möchte, mit ins "Hauptsub" nehme, funktioniert das ganze... Da ich diese aber noch öfters verwenden muss, wäre ein "einfacher" Aufruf sinnvoller als so ein Kopiermarathon.
Danke für eure Hilfe =)
Grüße Larissa

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sub aufrufen
04.12.2014 07:58:34
Hajo_Zi
Hallo Larissa,
Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
Ein Nachbau sieht bestimmt anders aus als das Original.
Ein Link zur Datei wäre nicht schlecht.

AW: Sub aufrufen
04.12.2014 08:07:29
Larissa
Puh ich hab gedacht, des vllt n einfacher Anfängerfehler...
Ich weiß nicht, ob ich des einfach verlinken darf. Bin Praktikant hier^^
Das erste Sub frägt nach der letzten freien Zeile, und die zwei weitere Functions berechnen zwei Durchmesser.
Im Hauptsub möchte ich dann die Daten von einer Eingabemaske in das Sheets Daten in die letzte Zeile einlesen.
Wie gesagt, das funktioniert alles, solange ich das nicht mit Call mache...
Grüße Larissa

Anzeige
AW: Sub aufrufen
04.12.2014 08:32:01
hary
Moin
Ungetestet. Mit Call kannst du nur Subs aufrufen, Funktionen sind eigenstaendig und liefern ein Ergebniss. Wenn's funzt, vergleich deinen alten Code mit diesem dann siehst du die Unterschiede.
In der if Pruefung musst du beide Faelle mit not pruefen.
Bin gleich weg.
Dim erste_freie_zeile As Long 'muss ausserhalb Subs
Sub freie_zeile()
erste_freie_zeile = [A:Z].Find(What:="*", After:=[A1], LookIn:=xlValues, SearchDirection:= _
xlPrevious).Row + 1
MsgBox "Angelegte Zeile:" & " " & erste_freie_zeile
End Sub
Function i_max_Durchmesser() As Double
Dim lichter_Durchmesser As Double
Dim IRH As Double
If Not ((TextBox15.Text = "") And Not (TextBox18.Text = "")) Then
lichter_Durchmesser = TextBox15.Value
IRH = TextBox18.Value
i_max_Durchmesser = lichter_Durchmesser + 2 * IRH
End If
End Function
Function Kernrohr_Durchmesser() As Double
Dim ARH As Double
Dim Außendurchmesser As Double
If Not ((TextBox58.Text = "") And Not (TextBox17.Text = "")) Then
Außendurchmesser = TextBox58.Value
ARH = TextBox17.Value
Kernrohr_Durchmesser = Außendurchmesser - 2 * ARH
End If
End Function
Private Sub CommandButton3_Click() ' Übernehmen
Call freie_zeile
Sheets("Daten").Cells(erste_freie_zeile, 37) = Kernrohr_Durchmesser
Sheets("Daten").Cells(erste_freie_zeile, 24) = i_max_Durchmesser
Sheets("Daten").Cells(erste_freie_zeile, 91) = TextBox1.Text
Sheets("Daten").Cells(erste_freie_zeile, 92) = TextBox2.Text
End Sub

gruss hary

Anzeige
AW: Sub aufrufen
04.12.2014 08:53:31
Larissa
Hm also jetzt sieht das ganze schon mal ordentlicher aus.
Funktionieren tuts noch nicht...
aber vielen Dank =)

AW: Sub aufrufen
04.12.2014 08:57:26
hary
Moin
Du kannst die Werte die du brauchst auch direkt an die Function uebergeben.
Ungetestet Bsp.
Function Kernrohr_Durchmesser(A, B, C As Double, D As Double) As Double
If Not ((A = "") And Not (B = "")) Then 'evtl. brauchst du ja doch nicht das zweite Not k.A.
Kernrohr_Durchmesser = C - 2 * D
End If
End Function
Private Sub CommandButton3_Click() ' Übernehmen
Sheets("Daten").Cells(erste_freie_zeile, 37) = Kernrohr_Durchmesser(TextBox58, TextBox17,  _
TextBox58, TextBox17)
End Sub

Kann dir aber ncht weiterhelfen, der Flieger geht gleich.
gruss hary

Anzeige
AW: Sub aufrufen
04.12.2014 09:32:56
Larissa
Okey, danke, das probiere ich gleich aus.
Guten Flug!

AW: Sub aufrufen
04.12.2014 09:34:36
hary
Moin
Zum letzten.
Zur Sicherheit nimm:
Kernrohr_Durchmesser = Cdbl(C) - 2 * Cdbl(D)
gruss hary

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige