Rückschreiben - Zellwert (VBA)

VB, Donnerstag, 19.11.2015, 16:26 (vor 1481 Tagen)

Hallo Zusammen,

ich bin absoluter Anfänger in der Makroprogrammierung.
Ich habe folgendes Problem, aus einer Datei mit Rohdaten, werden Rechnungen generiert, ich möchte mir in den Rohdaten eine Markierung setzten, mit deren Hilfe ich erkennen kann, das bestimmte Datensätze schon bearbeitet sind.

Formal:
A) die Tabelle , mit den bearbeiteten Datensätzen ist in Arbeitsmappe A,
B) die Vergleichsdaten befinden sich in einer anderen Arbeitsmappe B, auf einem Tabellenblatt in einer Spalte, sind nicht sortiert und können mehrfach vorkommen

Ziel: Ganz allgemein formuliert: Schau in auf Tabelle XY in Spalte x nach, ob du den Wert aus der Zelle aus Tabelle A findest und schreibe jedes Mal, wenn der Wert vorhanden ist, diesen in die Spalte Z, der Tabelle XY.

Mein wahrscheinlich zu naiver Ansatz, war der beigefügte Code. Der leider nicht anläuft ich erhalte unterschiedliche Fehlermeldungen im Augenblick "Laufzeitfehler 438, Objekt unterstützt Eigenschaft oder Methode nicht"

Ich bin für jede Hilfe Dankbar.

Option Explicit
 
 
Sub Rückschreiben2()
Dim i As Integer
 
 
For i = 1 To 2222
 
 
If ActiveSheet.Cell(13, 4) Is Workbooks("2015_11_12_SAZ_neuer_Ansatz.xlsm").Sheets("Stundenzettel").Cell(i, 7) Then
Workbooks("2015_11_12_SAZ_neuer_Ansatz.xlsm").Sheets("Stundenzettel").Range("T2:T9999") = ActiveCell.Value
End If
Next
End Sub
 

Rückschreiben - Zellwert

Martin Asal @, Donnerstag, 19.11.2015, 22:04 (vor 1481 Tagen) @ VB

Hallo VB,

ich bin absoluter Anfänger in der Makroprogrammierung

Ich nehme mal an, du kennst dich wenigstens ansonsten etwas mit Excel aus? Im folgenden unterstelle ich einfach, dass du Bereiche mit Namen benennen kannst.

Ich habe das ganze gerade stark vereinfacht bei mir nachgebildet und dabei auch nicht in verschiedenen Workbooks, sondern einfach nur verschiedene Worksheets. Aber wenn du den folgenden Code für deine Zwecke anpasst, sollte das wohl das kleinste Problem sein. Jedenfalls habe ich in Tabelle1 einen Bereich namens "Rohdaten" und Tabelle2 hat einen Bereich "Vorlage" - beide Bereiche nur je eine Spalte breit, aber umfassen jeweils alle Zeilen der Rohdaten bzw des Vergleichs.

Sub finde()
Dim i As Integer
Dim Rohdaten As Range, Vergleich As Range, Wert As Range
 
Set Rohdaten = ActiveWorkbook.Worksheets("Tabelle1").Range("Rohdaten")
Set Vergleich = ActiveWorkbook.Worksheets("Tabelle2").Range("Vergleich")
 
For i = 1 To Rohdaten.Cells.Count             'Gehe einzeln durch die Rohdaten,
    Set Wert = Vergleich.Find(Rohdaten(i))    'suche sie beim Vergleich.
    If TypeName(Wert) <> "Nothing" Then       'Wenn gefunden,
        Rohdaten(i).Offset(0, 1) = "erledigt" 'schreibe was daneben.
    End If
Next
 
End Sub

Martin

Rückschreiben - Zellwert

VB, Freitag, 20.11.2015, 08:09 (vor 1480 Tagen) @ Martin Asal

Hallo Martin,
danke Dir vorab für die Unterstützung :-)
Ja ich kenne mich mit Excel aus und werde es gleich ausprobieren.

Rückschreiben - Zellwert

VB, Freitag, 20.11.2015, 08:46 (vor 1480 Tagen) @ VB

Hallo Martin,

ich habe die Bereiche benannt, und das Makro erst einmal innerhalb einer Arbeitsmappe ausprobiert.

Leider wird nicht "erledigt" in die Zelle neben dem Projekt geschrieben, kann es etwas damit zu tun haben, dass die Werte in der Vergleichszelle alphanumerisch sind(also den Projektnamen enthält)??

Grüße
VB

Rückschreiben - Zellwert

Martin Asal @, Freitag, 20.11.2015, 19:57 (vor 1480 Tagen) @ VB

Ich habe hier in Tabelle1 A4:A17 als "Rohdaten" benannt, mit folgendem Inhalt:

Mo
Di
Mi
Do
Fr
125
So
Mo
Di
Mi
Do
Fr
Sa
So

Und Tabelle2 A4:A11 ist "Vergleich", mit folgendem Inhalt:

a
Di
Do
125
Do
f
g
h

Die Prozedur "finde" schreibt in Tabelle1, Spalte B immer dann "erledigt", wenn der Wert in Spalte A daneben auch in Vergleich zu finden ist.

Martin

Rückschreiben - Zellwert

VB, Samstag, 21.11.2015, 10:41 (vor 1479 Tagen) @ Martin Asal

Hallo Martin,
ich habe es heute Morgen auch noch Mal ausprobiert, innerhalb einer Arbeitsmappe läuft das Makro jetzt auch bei mir, jetzt gehe ich daran und versuche es über die beiden Arbeitsmappen zu erweitern.

Vielen lieben Dank
VB:-)

Rückschreiben - Zellwert

VB, Samstag, 21.11.2015, 13:04 (vor 1479 Tagen) @ VB

Hallo Martin,

es zeigt sich, dass ich noch sehr viel zu lernen habe, selbst so was einfaches,
wie das Erweitern auf zwei Arbeitsblätter gelingt mir nicht, ich habe verschiedene Dinge versucht, dachte aber im Grunde, es wäre damit getan, die Definition des Bereiches von Rohdaten und Vergleich um die entsprechende Arbeitsmappe zu erweitern.

Also so:

Set Rohdaten = 
ActiveWorkbook.Worksheets("Stundenzettel").Range("Rohdaten")
Set Vergleich = Workbooks("C:\Mappe3.xlsm").Worksheets("DLRV 2016_03").Range("Vergleich

")

Da ich auf diese Weise aber die Fehlermeldung "Index außerhalb des gültigen Bereichs" erhalte, findet das Makro wohl die Mappe oder die Tabelle nicht.

Wo liegt mein Denkfehler???
Vielen Dank
VB

Rückschreiben - Zellwert

Martin Asal @, Montag, 23.11.2015, 09:10 (vor 1477 Tagen) @ VB

Hallo VB,

du bist auf dem richtigen Weg, aber hast ein Problem mit dem Namen der zweiten Mappe. Würdest du "C:\Mappe3.xlsm" vorher öffnen und mit seiner Nummer ansprechen, würde es klappen. Probiere folgendes:

Workbooks.Open "C:\Mappe3.xlsm"
 
Set Rohdaten = ThisWorkbook.Worksheets("Tabelle1").Range("Rohdaten")
Set Vergleich = ActiveWorkbook.Worksheets("Tabelle2").Range("Vergleich")
 

ThisWorkbook: Das Workbook mit dem Code
ActiveWorkbook: Durch das Öffnen ist ein anderes Workbook aktiv

Martin

Rückschreiben - Zellwert

VB, Montag, 23.11.2015, 14:27 (vor 1477 Tagen) @ Martin Asal

Hallo Martin,

den herzlichsten Dank für Deine Unterstützung. Jetzt hat es funktioniert.

Grüße
VB

RSS-Feed dieser Diskussion
powered by my little forum