Excel Makro Daten entz. aus anderer Datei + msgbox

Hallo,
ich bin ein VBA Anfänger und brauche Dringend Hilfe.

Und zwar habe ich eine ganz normale Datenbank und eine andere Datei zum Protokollieren.

Das was ich will ist, wenn in der Protokoll Datei (Spalte G) In Bearbeitung steht, soll eine Nachricht (MsgBox) in der Datenbank Datei erscheinen, dass es Daten zur Bearbeitung gibt.
Und dies jedes mal überprüfen wenn ich die Datenbank neu starte.

Protokolldatei: U:\ Modified protocol.xls
Tabellenblatt: Protocol

Datenbank: U:\Database.xls
Tabellenblatt: S. Database

Danke schon mal im voraus

habe gerade leider nicht so die motivation, einen kompletten code zu schreiben, deshalb hier nur die ansätze:

ich nehme an, in deiner datenbank wird irgendwie auf eine zeile zugegriffen, dann in der protokolldatei nachgesehen, ob da besagter eintrag steht? wenn nein, dann fehlt ja noch die information über die zeilennummer…

weiter angenommen, dein script läuft in der datenbank-datei?

du kannst mit

wert = workbooks(„deine protokolldatei“).worksheets(„das worksheet“).cells(zeile, spalte).value

auf die entsprechende zeile zugreifen (zeile und spalte als zahlenwert). „wert“ wäre in deinem fall als string anzulegen.

anschliessend fragst du ab, ob „wert“ deinem string entspricht:

if wert like „in bearbeitung“ then
MsgBox(…)
End if

das für deine dateien anzupassen, überlasse ich dir. die einzelnen funktionen findest du auch in der hilfe (markieren und „F1“ drücken).

hoffe, es hat dir wenigstens etwas geholfen!

Hallo Jens,
erstmal danke es hat mir sehr viel weitergebracht, aber es gibt nur ein kleines Problem :smiley:

Sub Makro_01()

wert = Workbooks(„U:\ Modified protocol.xls“).Worksheets(„Protocol“).Columns(„G“).Value

If wert Like „In_Bearbeitung“ Then
MsgBox („XXX“)

End If
End Sub

Wenn ich es ausführe kommt eine Fehlermeldung " inhalt Index außerhalb des gültigen Bereichs "
es soll nur auf die Spalte „G“ zugreifen keine Zeile.

Für weitere Information wäre ich sehr dankbar.

Gruß

wert = Workbooks(„U:\Modified
protocol.xls“).Worksheets(„Protocol“).Columns(„G“).Value

ok, das kann auch nicht gehen. mit .columns() greifst du ja auch auf die gesamte spalte zu und .value gibt es dafür nicht. außerdem meine ich mich daran zu erinnern, dass .columns() einen zahlenwert - und keinen charakter/string erwartet. in deinem fall also .columns(7)

aber soll das heißen, du willst nur wissen, ob irgendwo in der spalte „In_Bearbeitung“ drin stehe?

dann müsstest du dir den wert jeder zelle in der spalte ansehen und mit deinem string vergleichen.

also erstmal die letzte beschriebene zelle finden:
Dim iRowlast as integer

iRowlast = Workbooks(„U:\Modified protocol.xls“).Worksheets(„Protocol“).Cells(Rows.Count, 7).End(xlUp).Row

dann in der schleife die einzelnen zelleninhalte vergleichen:

for i = 1 to iRowlast
if Workbooks(„U:\Modified protocol.xls“).Worksheets(„Protocol“).Cells(i, 7).Value Like „In_Bearbeitung“ then
MsgBox(„Meldetext“)
end if
next

man könnte natürlich auch mit „find“ arbeiten - ist aber etwas komplexer und sofern du nicht zu viele zeilen hast nicht spürbar schneller

aber soll das heißen, du willst nur wissen, ob irgendwo in der
spalte „In_Bearbeitung“ drin stehe?

ja genau ;D

ich erklär dir kurz was ich will :smiley:

es gibt eine datenbank.
die datenbank enthält daten die ab und zu aktualisiert werden müssen.
ich schätze so eine aktualisierung auf 4-5 im monat.
die datenbank wird nur von mir bearbeitet und von 8-9 leuten benutzt.
da ich nicht jeden tag in die Protcol datei rein schauen will, möchte ich wenn einer ein datensatz anlegt in der protcol datei (spalte G automatisch „in_bearbeitung“) das eine msgbox an die datenbank geschickt wird, das es daten zur aktualisieren gibt.

merci nochmal

Hallo Iso,

Und zwar habe ich eine ganz normale Datenbank und eine andere
Datei zum Protokollieren.
Das was ich will ist, wenn in der Protokoll Datei (Spalte G)

deine Wortwahl, ändere die bitte. Eine Datei ist eine Mappe, die hat Tabellenblätter, Blätter, diese haben Zeilen, Spalten , Zellen.
Und deine Protokolldatei hat keine Spalte G.
Aber ein Blatt in ihr hat Spalten.

Je klarer du dich ausdrückst, desto schneller können wir dir ggfs. helfen.

In Bearbeitung steht, soll eine Nachricht (MsgBox) in der
Datenbank Datei erscheinen, dass es Daten zur Bearbeitung
gibt.
Und dies jedes mal überprüfen wenn ich die Datenbank neu
starte.

Protokolldatei: U:\ Modified protocol.xls
Tabellenblatt: Protocol

Datenbank: U:\Database.xls
Tabellenblatt: S. Database

Genau so, genau das meinte ich. Ich lasse trotzdem mal das oben geschriebene stehen. Lesen ja auch andere.

Was soll das Leerzeichen vor dem „M“ im Ordnernamen? Selbst wenn das aktzepiert wäre als Ordnernamen, schmeiß es raus.
Auch wenn es für mein optisches Empfinden Kacke aussieht, benutze im Ordnernamen (und auch Dateinamen) immer Unterstriche anstatt dem Leerzeichen.

Dann bist du auf der sicheren Seite, Leerzeichen KÖNNEN Probleme machen, zwar lösbare, aber warum potentielle Fehler einbauen von haus aus?

Nachfolgender Code muß in das Modul "DieseArbeitsmappe von Database.xls.

Und zum Vorredner, wird zwar m.E. nur benutzt wenn man Code schreibt den dann Vba-Anfänger leichter verstehen sollen,
MsgBox Columns(„G“).Address
und
MsgBox Columns(7).Address
ist das Gleiche.

Aber normalerweise benutzt man die zweite Variante.

Und zur MsgBox, wenn du eh schon Vba benutzt, rufe doch dann eine Prozedur (=Makro) auf daß dann „bearbeitet“.

Gruß
Reinhard

Option Explicit

Private Sub Workbook\_Open()
Dim Vorhanden As Boolean, wkb As Workbook
For Each wkb In Workbooks
 If wkb.Name = "Modified\_protocol.xls" Then
 Vorhanden = True
 Exit For
 End If
Next wkb
If Vorhanden = False Then Workbooks.Open "U:\Modified\_protocol.xls"
With Workbooks("Modified\_protocol.xls").Worksheets("Protocol")
 If Application.CountIf(.Columns(7), "In Bearbeitung") 

hallo reinhard,
erstmal danke ich dir auch.

aber wenn ich dein code einsetzte kommt auch eine meldung das der „index außerhalb des gültigen bereichs“.

liegt das vllt daran das die excel tabellen im netzlaufwerk sind?

danke im voraus

gruß iso