Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1308to1312
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

Problem bei VBA & freigegebenen Arbeitsmappen

Problem bei VBA & freigegebenen Arbeitsmappen
16.04.2013 09:14:11
Schmitty
Das man in seinem alten Beitrag nicht weiterschreiben kann...
Hier ein link zum alten Beitrag:
https://www.herber.de/forum/archiv/1304to1308/t1307713.htm
@ All: Danke schon mal für Eure Hilfe in dem oben genanten Beitrag.
@ Klaus M.vdT.: Ich hatte das VBA hier aus dem Forum von einem User bekommen, da meine eigenen VBA-Kenntnisse noch sehr rudimentär...
Ich habe dein VBA mal versucht, bekomme in der Zelle aber immer den Fehler #WERT!.
Ich spreche das VBA mit der Formel an:
=Menge(ADRESSE(ZEILE();VERGLEICH($Z$4;$A$4:$X$4;0)))
Leider kann ich die original Excel-Datei nicht hochladen, da es sich um eine umfangreiche Kundendatei handelt.
@ All: Hat sonst noch jemand eine Idee?
Gruß
Christian

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem bei VBA & freigegebenen Arbeitsmappen
16.04.2013 09:21:03
Klaus
Leider kann ich die original Excel-Datei nicht hochladen, da es sich um eine umfangreiche Kundendatei handelt.
Lad mal die Datei hoch.
Lösche vorher alle Tabellenblätter die nicht direkt mit dem Problem zu tuen haben, reduziere Listen auf ein paar dutzend representative Zeilen, ändere Kundennamen gegen "Kunde1, Kunde2 usw", tausche Euro-Beträge gegen Zufallszahlen aus ....
Ohne Datei zu helfen ist immer etwas müßig. Und niemand will die vertraulichen Daten sehen. Du könntest aber deine Kreditkartennummer in Zelle A1 schreiben.
Grüße,
Klaus M.vdT.

AW: Problem bei VBA & freigegebenen Arbeitsmappen
17.04.2013 11:28:52
Schmitty
Hallo,
ich habe mal eine Beispieldatei hochgeladen.
Ich hoffe, dass hilft weiter...
https://www.dropbox.com/s/i34iszy2s1jrg6x/Test.xlsm
Danke im Vorraus und Gruß
Christian

Anzeige
Warum Dropbox?
17.04.2013 13:02:20
Klaus
Hallo Christian,
warum soll ich auf "DropBox" gehen, um eine Datei zu laden? Herber hat eine eigene "Datei-Hochladen" Funktion. Von Seiten wie "DropBox", "Mega" und "Rapidshare" halte ich mich fern, weil ich eine panische Angst vor Spam-Robotern habe.
Grüße,
Klaus M.vdT.

AW: Warum Dropbox?
18.04.2013 10:18:08
Schmitty
Hallo,
ich habe sie bei Dropbox hochgeladen, da die Datei 340 KB hat und ich sie einfach nicht kleiner bekomme... Ich darf hier ja nur 300 KB hochladen...
Ich könnte sie noch zippen, nur da haben auch viele Leute Bedenken und außerdem hat nicht jeder Winzip...
Hab Sie jetzt aber trotzdem mal als *.zip hochgeladen...
https://www.herber.de/bbs/user/84927.zip
Gruß
Christian

Anzeige
AW: Problem bei VBA & freigegebenen Arbeitsmappen
18.04.2013 10:46:36
Klaus
Hi,
anbei deine Musterdatei zurück, die ich zu Testzwecken auf 10 Zeilen und damit 38kb gekürzt habe:

Die Datei https://www.herber.de/bbs/user/84928.xlsm wurde aus Datenschutzgründen gelöscht


Die Funktion "Menge" habe ich rausgeworfen.
Ersatz dafür ist ein Makro, das "on change" aufgerufen wird wenn du die Jahreszahl änderst.
Da kein UDF mehr vorkommt, sollte dies Makro auch im Freigabemodus laufen.
Rückmeldung währ nett!
Grüße,
Klaus M.vdT.

AW: Problem bei VBA & freigegebenen Arbeitsmappen
19.04.2013 10:00:44
Schmitty
Hallo,
die Funktion "funktioniert".
Aber leider rechnet Excel jetzt jedesmal wenn ich meinen Reset-Button klicke, über 2 Minuten dass Makro durch. Ich habe ja in der "richtigen" Kundenliste über 2000 Datensätze...
Da ich zig-Mal am Tag diesen Reset-Button drücke, ist das leider nicht die richtige Lösung für mich... :-(
Gruß
Christian

Anzeige
AW: Problem bei VBA & freigegebenen Arbeitsmappen
19.04.2013 10:56:46
Klaus
Hi,
das Makro soll eigentlich nur durchrechnen, wenn die Zelle Z4 geändert wird.
Allerdings ändert dein Reset-Button eben diese Zelle:
kommentiere diese Zeile komplett aus (mit einem ' davor)!
Oder hast du einen triftigen Grund, 100 mal am Tag die Zahl "2013" per Makro zu schreiben? Falls ja,
bette die Zeile so ein:
Application.EnableEvents = True
Range("Z4") = "2013"
Application.EnableEvents = False

damit verhinderst du die Makro-Ausführung beim Reset-Button.
Grüße,
Klaus M.vdT.

AW: Problem bei VBA & freigegebenen Arbeitsmappen
19.04.2013 11:27:49
Schmitty
Hallo und danke für deine schnelle Antwort.
Ich benutze den Reset-Button, um die Kundenliste halt wieder zurückzuversetzen. Also z.B. die Autofilter zu löschen usw.. Dabei ändere ich in der Statistik das Jahr immer auf das aktuelle, damit wenn ich mal Werte z. B. im Jahr 2011 gesucht habe, beim nächsten Suchen wieder automatisch im Jahr 2013 bin, da das
aktuelle Jahr für mich meist am wichtigsten ist.
Aus diesem Grund habe habe ich ja das andere Makro benutzt, wo für jede Zeile einzeln die Veränderung "geprüft" wird...
Ich habe gerade mal noch einmal gemessen. Dein Makro braucht wirklich ca. 2,5 Minuten. Das ist gefühlt auch zu lang, wenn man es "nur" bei jedem Speichern der Datei aktivieren würde... :-/
Gruß
Christian

Anzeige
AW: Problem bei VBA & freigegebenen Arbeitsmappen
22.04.2013 07:37:52
Klaus
Hi,
ich stimme zu dass eine UDF hier sinnvoller wäre als ein On-Change Makro, aber so wie ich dein Problem verstanden habe kannst du eben diese UDF nicht einsetzen. Mein Makro macht übrigens exakt das gleiche wie die UDF vorher, die relevanten Codezeilen sind 1:1 kopiert.
Du hast hier irgendwie nur die "Friss oder Stirb" Chance ...
Die Dateneingabe zu ändern ist kein Ansatz, oder? Die Art in der bei dir eingegeben wird, mit Bindestrichen und ENTER innerhalb der Zellen, ist ja ein Excel-Unding um das hier herum gearbeitet wird. Vielleicht wäre ein radikaales überdenken deines Mappen / Eingabekonzeptes hier tatsächlich der beste Ansatz.
Dein Makro braucht wirklich ca. 2,5 Minuten
Bei mir nicht.
Die üblichen verdächtigen probiert? Bildschirmaktualisierung aus, Berechung auf manuell geschaltet? Gibt es Verknüpfungen auf das Makro-Ergebniss in andere Formeln? usw ...
Grüße,
Klaus M.vdT.

Anzeige
AW: Problem bei VBA & freigegebenen Arbeitsmappen
22.04.2013 09:19:46
Schmitty
Hallo,
kann man den das VBA so umbauen, dass er die Berechnung nur für die angezeigten Zeilen macht. Sprich:
Ich nutze ja den Autofilter und interessiere mich in der Regel immer nur für die Statistik für einen Kunden.
Ich stelle mir das dann so vor:
1.) Ich wähle einen Kunden Mittels Autofilter aus.
2.) Ich betätige einen Button (Ähnlich des Reset-Buttons) und erst dann aktualisiert er die Berechnung.
Ist das möglich?
Gruß
Christian

AW: Problem bei VBA & freigegebenen Arbeitsmappen
22.04.2013 09:33:16
Klaus
1.) Ich wähle einen Kunden Mittels Autofilter aus.
2.) Ich betätige einen Button (Ähnlich des Reset-Buttons) und erst dann aktualisiert er die Berechnung.

das macht es natürlich einfacher! Schau ich mir mal an, ich melde mich in ner Viertelstunde oder so.
Grüße,
Klaus M.vdT.

Anzeige
neuer Upload
22.04.2013 09:47:28
Klaus
Hi,
hier die Musterdatei mit "Berechnen-Button", Makro wird nicht über gesamten Bereich sondern nur über den gefilterten Bereich ausgeführt:
https://www.herber.de/bbs/user/84989.xlsm
Ich habe auch dein RESET-Button erweitert, so dass es die Mengenberechnungen löscht.
Grüße,
Klaus M.vdT.

AW: neuer Upload
22.04.2013 11:22:12
Schmitty
Hallo,
super das funktioniert doch sehr gut!
Ich bin ja im VBA ein relativer Neuling.
Wie kann ich dein VBA insofern abändern, dass er auch die Menge "0" ausgibt, wenn mal ein Kunde keine Ware bekommen hat?
Gruß
Christian

Anzeige
AW: neuer Upload
22.04.2013 11:26:50
Schmitty
Einen Fehler habe ich noch gefunden.
Wähle ich in deiner Datei mit dem Autofilter die Kunden Nummer "1" aus und zwar nur diese,
dann "rattert" dein VBA dauerhaft...
Gruß
Christian

AW: neuer Upload
22.04.2013 14:28:47
Klaus
Hi Christian,
ops, bei Kunde 1 gibt es einen kleinen Logikfehler im Script. Den habe ich mal ganz unsauber rausgeworfen (den Fehler, nicht den Kunden).
Die Menge "0" hab ich auch eingebaut, wie gewünscht.
Anbei nur das Script (copy - paste über den alten Code) statt die Datei nochmal hochzuladen
Sub OhneFunctionMenge()
Dim iColJahr As Integer
Dim iColMenge As Integer
Dim lRowF As Long
Dim lRowL As Long
Dim l As Long
Dim arrTeil
Dim N As Integer
Dim rFilter As Range
iColMenge = WorksheetFunction.Match("Gesamtmenge der Lieferungen", Range("A5").EntireRow, False) _
iColJahr = WorksheetFunction.Match(Cells(4, iColMenge).Value, Range("A4").EntireRow, False)
lRowF = 6
lRowL = Cells(Rows.Count, 2).End(xlUp).Row
For Each rFilter In Range(Cells(lRowF, iColMenge), Cells(lRowL, iColMenge)).SpecialCells( _
xlCellTypeVisible)
'Bei "nix" einen Nullwert eintragen (vorherige Version: löschen)
Cells(rFilter.Row, iColMenge).Value = 0 '.clearcontents
arrTeil = Split(Cells(rFilter.Row, iColJahr).Value, "-")
For N = 1 To UBound(arrTeil) Step 2
Cells(rFilter.Row, iColMenge).Value = Cells(rFilter.Row, iColMenge).Value + CSng(arrTeil( _
N))
Next N
'Endlosschleife bei Kunde 1 verhindern (Zeile 6 bis 6 wird nie erreicht)
If lRowL = 6 Then Exit For
Next rFilter
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: neuer Upload
22.04.2013 15:47:03
Schmitty
Hallo,
noch mal ganz allgemein: Vielen, vielen Dank für deine Hilfe!!!
Ich traue mich kaum zu fragen, aber wenn ich nur KD-Nr. 1 aufrufe und dann die Statistik berechnen möchte, macht er jetzt gar nichts... :-/
Gruß
Christian

AW: neuer Upload
22.04.2013 16:08:10
Klaus
Hi,
ich habe keine Idee, warum er bei Kunde "1" die Schleife nicht korrekt durchläuft ...
aber SO sollte es gehen, auch wenn ich nicht verstehe weshalb :-)
Sub OhneFunctionMenge()
Dim iColJahr As Integer
Dim iColMenge As Integer
Dim lRowF As Long
Dim lRowL As Long
Dim l As Long
Dim arrTeil
Dim N As Integer
Dim rFilter As Range
iColMenge = WorksheetFunction.Match("Gesamtmenge der Lieferungen", Range("A5").EntireRow, False) _
iColJahr = WorksheetFunction.Match(Cells(4, iColMenge).Value, Range("A4").EntireRow, False)
lRowF = 6
lRowL = Cells(Rows.Count, 2).End(xlUp).Row
If lRowL = lRowF Then
arrTeil = Split(Cells(lRowF, iColJahr).Value, "-")
For N = 1 To UBound(arrTeil) Step 2
Cells(lRowF, iColMenge).Value = Cells(lRowF, iColMenge).Value + CSng(arrTeil(N))
Next N
Else
For Each rFilter In Range(Cells(lRowF, iColMenge), Cells(lRowL, iColMenge)).SpecialCells( _
xlCellTypeVisible)
'Bei "nix" einen Nullwert eintragen (vorherige Version: löschen)
Cells(rFilter.Row, iColMenge).Value = 0 '.clearcontents
arrTeil = Split(Cells(rFilter.Row, iColJahr).Value, "-")
For N = 1 To UBound(arrTeil) Step 2
Cells(rFilter.Row, iColMenge).Value = Cells(rFilter.Row, iColMenge).Value + CSng( _
arrTeil(N))
Next N
Next rFilter
End If
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige