Anzeige
Archiv - Navigation
1044to1048
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

Finde den Fehler im VBA-Prog nicht

Finde den Fehler im VBA-Prog nicht
03.02.2009 03:54:00
San
Hallo an alle,
ich bin neu hier im Forum und bin für jede Hilfestellung dankbar.
Zum Problem
Tabelle:
1. Spalte: enthalten Namen
2. Spalte: enthalten vierstellige IDs
3. Spalte: -
4. Spalte: können Zahlen mit Kommastellen stehen
A B C D
ace 2343 ...
ike 4545 ... =rowcopy(340,00)
fat 3444 ...
Ziel dieses Programms:
1. einen Wert in eine Zelle (hier D2) der 4.Spalte mithilfe der untenaufgeführten
Function rowcopy(double) eintragen
2. mit Eintragung soll der Name, die ID und der Wert in die nächste freie Zeile(oben die 4. Zeile),
aber die gleichen Spalten eingetragen werden.
A B C D
ace 2343 ...
ike 4545 ... 330,00
fat 3444 ...
ike 4545 ... 330,00
Ich finde den Fehler nicht, jedoch wird die dritte Msgbox "3" nicht ausgegeben.

Function rowcopy(numb As Double)
Dim x, y, s, cel As Long
Dim act As Double
Dim name As String
Dim id As Long
'Koordinaten der aktiven Zelle ermitteln
y = ActiveCell.Row
x = ActiveCell.Column
'Bestimmte Werte der Zeile der aktiven Zellzeile ermitteln
act = numb
name = Worksheets("Main").Cells(y, 1).Value
id = Cells(y, 2).Value
MsgBox "1"
'Die y-Koordinate der ersten freien Zeile in der 1. Spalte ermitteln
For cel = 1 To 1000
If Cells(cel, 1).Value = "" Then
s = cel
Exit For
End If
Next
MsgBox "2"
'Der ersten freien Zeile die Werte übermitteln, die in der Zeile der aktiven Zelle stehen
Worksheets("Main").Cells(s, 1).Value = name
MsgBox "3"
Worksheets("Main").Cells(s, 2).Value = id
Worksheets("Main").Cells(s, 4).Value = act
rowcopy = act
End Function


Über eine Antwort würde ich mich freuen

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Finde den Fehler im VBA-Prog nicht
03.02.2009 04:16:00
Hans
Hallo,
das Problem liegt schlicht und einfach darin, dass Du über eine in eine Zelle eingetragene Funktion keinen weiteren Zelleintrag veranlassen kannst.
Wenn Du die Funktion über eine Sub-Prozedur aufrufst oder direkt startest (ohne sie in einer Zelle einzutragen), funktioniert es. Sinnvollerweise solltest Du die Funktion allerdings auch als Sub bedennen, denn es wird ja kein Variablenwert zurückgeliefert, sondern ein Zelleintrag veranlasst.
Gruss hans
Stimmt nicht ganz,...
03.02.2009 04:33:00
Luc:-?
...Hans,
Die Fkt rowcopy liefert schon einen Rückgabewert...
rowcopy = act
Allerdings stimmt der hier mit dem Argument numb überein. Soll wohl bloß ein BspDummy sein, um das Problem zu zeigen...
Gruß & Guten Morgen!
Luc :-?
Besser informiert sein!
Anzeige
...Falsch!!!
03.02.2009 09:33:00
Luschi
Hallo Luc,
sobald man versucht, mittels einer Vba-Funktion, die in einer Zelle aufgerufen wird, einer anderen Zelle einen Wert zu übergeben, ist finito; es gibt keinen Rückgabewert.
Deshalb wird auch
MsgBox "3"
nicht mehr ausgeführt, weil davor mit
Worksheets("Main").Cells(s, 1).Value = name
versucht wurde, in einer anderen Zelle ein Wert reinzuschreiben.
Sowas gelingt nur mit Sub-Prozeduren; da hat Hans W. Herber vollkommen recht; und ich habe mich darüber schon mehr als einmal geärgert!
Gruß von Luschi
aus klein-Paris
Das habe ich doch geschrieben, aber...
04.02.2009 04:07:00
Luc:-?
...hier zählt doch wohl eher, was der Frager beabsichtigt hatte, Luschi!
Das das dann nicht fkt, steht doch auf einem anderen Blatt! Und nach dem Warum des Nichtfunktionierens hatte er ja auch gefragt.
Also bitte etwas genauer lesen (was mir mitunter aber auch nicht gelingt... ;-) )!
Gruß Luc :-?
Besser informiert sein!
Anzeige
AW: Das habe ich doch geschrieben, aber...
04.02.2009 09:04:00
Luschi
Hallo Luc,
Du hast geschrieben: Die Fkt rowcopy liefert schon einen Rückgabewert
und das stimmt eben nicht.
In der Zelle, in der diese Funktion aufgerufen wird, steht nach der Aktualisierung '#WERT!'.
Wenn Du diesen Fehlerwert als Rückgabewert anerkennst, dann hast Du allerdings recht.
Nur damit kann der User nichts anfangen, obwohl sein Vba-Code recht schlüssig aussieht.
Der User wollte 2 Fliegen mit einer Klappe auf einmal erschlagen; neben dem eigentlichen
Rückgabewert für diese Zelle, in der die Funktion steht, auch noch anderen Zellen einen Wert
verpassen.
Und da er muß einfach wissen, das Wertzuweisungen in dieser Form Excel nicht zuläßt.
Gruß von Luschi
aus klein-Paris
PS: Probier es einfach aus!
Anzeige
Weißt du, du diskutierst um "Kaisers Bart",..
05.02.2009 02:51:00
Luc:-?
...Luschi!
Ich schrieb sinngemäß, dass es nicht auf das tatsächliche Ergebnis der Fkt ankommt, sondern darauf, was der User damit bezweckt hatte! Ist das nicht einsehbar? Und was du als Begründung für deine Meinung anführst, haben alle längst erkannt. Du musst also diese allgemeine Wahrheit nicht beständig wiederholen - ich kenne sie! :-(
Luc :-?
AW: Weißt du, du diskutierst um "Kaisers Bart",..
05.02.2009 09:41:00
Luschi
Hallo Luc,
Du hast die Antwort von Hans W.Herber in Frage gestellt, obwohl sie genau des Pudels Kern trifft.
Wenn ich eine Funktion schreibe, dann kommt es immer auf den Rückgabewert an und nicht was der User damit bezweckt. Und deshalb habe ich Deine Antwort kritisiert, weil sie dem Fragesteller NULL Punkte bringt.
Gruß von Luschi
aus klein-Paris
Anzeige
Ich ging davon aus, dass HWH diese Zeile...
07.02.2009 04:19:00
aus,
...übersehen hat, Luschi,
deshalb ist deine uneinsichtige Diskussion, auch nachdem sich der Frager bereits anders entschieden hat, mehr als übrig... :-(
Ich antworte dir nur, weil ich deinen unmöglichen Vorwurf an mich nicht akzeptiere! Du kannst mir gern glauben, dass ich weiß, wovon ich schreibe, weshalb deine "Spitzfindigkeit" nicht angebracht ist...
Basta!
Luc :-?
Ich würde nicht name verwenden, weil...
03.02.2009 04:27:00
Luc:-?
...das ein geschütztes Wort ist, Sebastian!
Wenn du das geändert hast und es immer noch nicht fkt, was äußerst wahrscheinlich ist, liegt's nur noch an der Zuweisung von "name" an eine (fremde) Zelle. Das kann eine Fkt, egal, ob xlStandard oder udF, nämlich nicht leisten. Das kannst du nur indirekt über eine Subroutine erreichen, die durch das von deiner udF ausgelöste Ereignis aufgerufen wird. Direktaufruf aus der udF geht ebenfalls nicht - physische Abkopplung von der Fkt muss erreicht wdn.
Gruß Luc :-?
PS: Bei Bedarf kann ich zur näheren Erläuterung auch einen Hilfe-Auszug zu einer Subroutine posten, die eine derartige Aufgabe zu erfüllen hat. Die Routine selbst will ich auch wg ihrer universalitätsbedingten Länge hier nicht einstellen. Könnten Unbedarfte zu viel Blödsinn treiben...
Besser informiert sein!
Anzeige
AW: Finde den Fehler im VBA-Prog nicht
04.02.2009 05:01:39
San
Vielen Dank für die Diskussion an Hans W. Herber, Luc:-? und Luschi!
Ich habe die Funktion in eine Subroutine geändert und es hat funktioniert.
Zudem änderte ich "name" in "nam" um alle weiteren Fehler auszuschließen.
Bei neuen Fragen wende ich mich wieder vertrauensvoll ans Forum.
Luc, danke für das Angebot die Subroutine zu posten, aber ich lehne ab ;-)
Viele Grüße
Sebastian
Du hättest ja auch nur die Hilfe dazu bekommen,...
05.02.2009 02:53:54
Luc:-?
...Sebastian... ;-)
Gruß Luc :-?

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige