2016-09-29 6 views
0

verwenden Entschuldigung, wenn ich bereits behandelt Problem behandelt. Ich versuche die Rechnungsstellung unseres Unternehmens zu automatisieren. Wir haben ein Excel-Arbeitsbuch mit allen Informationen über die Kunden, monatliche Zahlungen usw. Ich habe das System gemacht und es funktioniert super. Ich habe sogar eine E-Mail mit spezifischem Text und der beigefügten Rechnung geschickt. Das Problem tritt auf, wenn mehrere Benutzer das System verwenden, also die Rechnungsnummern duplizieren. Rechnungsnummer wird in der Excel-Arbeitsmappe gespeichert und nach jeder Rechnung wird + 1.vba Umgang Fehler, wenn mehrere Benutzer Zellenwert in Prozedur

Das System funktioniert wie folgt: Login-Formular - Login mit Benutzername. Die Makrokopien von der Master-Tabelle/geändert geschützt/nur die Informationen für die Benutzer-Clients und fügen Sie sie in neue WB-Vorlage. Der Benutzer prüft die Informationen, genehmigt sie und klickt auf Senden. Dann das Makro die Rechnungen mit der Nummer aus dem ersten wb und senden Sie die E-Mail an den Client. Haben Sie Tipps, wie Sie die Rechnungsnummernzelle schützen können, wenn jemand das Makro verwendet? Ich dachte daran, eine Liste von Benutzern zu erstellen, und wenn sich jemand anmeldet, wird seine Variable 1, wenn also die Summe aller Benutzer größer als 1 ist, kann man keine Rechnung ausstellen. Aber das ist lahm. Hoffe, es gibt einen Weg wie - wenn beschäftigt ..... Aber wie kann Benutzer 2 wissen, dass Benutzer1 ausgestellt wird. Schätzen Sie, wenn Sie helfen können.

+3

Kann ich davon ausgehen, dass mehrere Benutzer gleichzeitig ein und dieselbe Excel-Datei öffnen und verwenden können? Wenn das der Fall ist, gehe ich davon aus, dass die Datei auf einem Dateiserver gehostet wird und dass sie von dieser Netzwerkfreigabe aus geöffnet wird.Wenn dies der Fall ist, erstellt Excel im Wesentlichen eine lokale Kopie der Datei und die Leute arbeiten daran. Nur wenn die Datei gespeichert wird, werden diese Änderungen auf den Dateiserver zurückgeschrieben. Gibt es keinen Datenbankserver (d. H. MS SQL), der Ihnen den Zugriff auf mehrere Benutzer erleichtert? Andernfalls würde ich die Verwendung einer MS Access-Datenbankdatei vorschlagen. – Ralph

Antwort

0

Ich bin nicht ganz klar auf den genauen Prozess, den Sie verwenden, um die Rechnungsnummer hier zu bekommen, aber es klingt wie die Nummer aus einem anderen Blatt abgerufen und dann um eins erhöht wird, richtig?

Wenn dies der Fall ist, ist es am besten, wenn Sie jede Rechnung aufzeichnen. Sobald das Makro eine Rechnungsnummer erfasst, zeichnet es eine neue Datenzeile mit der neuen Rechnungsnummer auf. Auf diese Weise würde die nächste Person, die das Makro verwendet, selbst wenn es nur Sekunden später ist, die nächste Nummer in der Sequenz erhalten, anstatt dieselbe Nummer. Der Prozess wäre so etwas wie:

lngLast = wbkOtherWorkbook.range("A" & rows.count).end(xlup).row 
lngInvoiceNum = wbkOtherWorkbook.range("A" & lnglast).value +1 
wbkOtherWorkbook.range("A" & lnglast+1).value = lngInvoiceNum 

ich mir vorstellen würde Sie irgendwo sowieso eine Liste aller Rechnungen behalten wollen - schließen Sie diesen Schritt in den Aufnahmeprozess.

+0

Dies ist im Wesentlichen das Problem: "Ich würde mir vorstellen, dass Sie irgendwo eine Liste all Ihrer Rechnungen aufbewahren wollen." Wo können Sie diese Informationen verfolgen, damit alle Benutzer gleichzeitig auf diese Liste zugreifen können ** **? Wenn Sie dies in Ihrer Excel-Datei tun, geschieht dies * im Speicher * auf Ihrem Computer und niemand sonst wird darüber Bescheid wissen, bis Sie die Änderungen gespeichert haben. Sie müssen also etwas einrichten, das nur von jeweils einer Person geändert werden kann (um zu verhindern, dass dieselbe ID zweimal ausgegeben wird). Dies ist mit einer Excel-Datei fast unmöglich (!). Dafür gibt es DBs. – Ralph

0

danke Jungs, ich werde versuchen, besser zu erklären. Also nur ich kann die Master-Tabelle bearbeiten, jeder öffnet eine schreibgeschützte Kopie des WB. Die Rechnungen nach der Ausgabe werden im entsprechenden Ordner gespeichert - einer für jeden Kunden. Die Nummer für die Rechnung ist der knifflige Teil. Heute machte ich zwei mögliche Lösungen: 1. Ich machte eine Funktion, wenn jemand ausgibt, zählt zuerst sein eigenes Makro die Rechnungen, die er machen wird. Dann öffnet sich ein anderes/drittes wb/mit der Rechnungsnummer, nimmt den Wert und fügt die Anzahl der Rechnungen hinzu, die gemacht werden. Also verliere ich nur 1 Sekunde oder so. Habe auch eine Schleife gemacht, während isworkbookopen (numberInvoice) = true tut wend. Auf diese Weise ist die Nummer immer korrekt. 2. Die andere Option, die ich noch nicht getestet habe, ist das Teilen des Triros wb/numberInvoice/so dass jeder es simultan verwenden und manipulieren kann. Ich verstehe nicht, ob das Teilen eines WB funktioniert, aber das ist ein anderes Thema.

Also werde ich Ralph Rat nehmen und ich freue mich auf einige Access-Datenbank Zeug zu lernen. Alles Gute für dich!

P.S. Arbeiten mit VBA für wie ein oder zwei Monate, so bin ich ein newb. Danke für dein Verständnis.

Verwandte Themen