Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Programm-Schleife: wenn-dann -> einfügen in VBA geschrieben





Frage

Hallo da draußen, mein Problem ist folgendes, ich will in Excel ein Makro schreiben / bearbeiten und mir fehlen leider ein paar Programmierkenntnisse. habe mich zwar schon ein wenig in VBA eingearbeitet, nur fehlt mir die Zeit das alles bis "morgen" zu verinnerlichen. Ich möchte mit dem Makro in der Spalte K einen Zustand kontrollieren und wenn der zutrifft, dann in Spalte L etwas hinein schreiben. dabei soll jede Zeile in Spalte K überprüft werden. bisher ist das MAKRO soweit vorhanden: Sub Spalte_L() ´ ´ Spalte_L Makro ´ ´ Tastenkombination: Strg+Umschalt+L ´ Dim rngZelle As Range For Each rngZelle In Column(K) ´soll für jede Zelle in Spalte "K" gelten If rngZelle = 0 Then ´wenn die aktuelle Zelle = 0 If rngZelle - 1 = 1 Then ´und die Zelle darüber = 1 Range("U3:U14").Select Activate Selection.Copy Range(rngZelle - 1 + 1).Select ActiveSheet.Paste ´ soll eine bestimmte Zahlenfolge dann in die Spalte kopieren und den vorhanden Bereich überschreiben End If End If Next rngZelle ´ und weiter mit der nächsten Zelle End Sub Wenn ich das Makro starten will kommt: Fehler beim Kompilliern "Sub oder Function" nicht definert. habe keinen Plan wie ich das machen soll, muß da echt bei Null anfangen, nur fehlt mir da a bissl die Zeit. Für Hilfe wäre ich echt dankbar... MfG Tjalf

Antwort 1 von Saarbauer

Hallo,

ohne im Detail eingestigen zu sein
Zitat:
For Each rngZelle In Column(K)

muß

For Each rngZelle In Column("K")

heissen.

Column(K) ist ein Funktionsaufruf mit Übergabewert K


Gruß

Helmut

Antwort 2 von Tjalf

Jo Stimmt,

aber das Problem kommt immer noch :

Fehler beim Kompilliern! Sub oder Function nicht definert.

ich hab keine Ahnung wie ich den Sub definieren soll, oder welche Function da hin passen könnte, da mir da das Hintergrundwissen fehlt.

Danke trotzdem ^^

Antwort 3 von Saarbauer

Hallo,

Zitat:
Range(rngZelle - 1 + 1).Select


Was machst du eigentlich hier, es fehlt irgendwie die 2. Angabe (Spalte) und rngZelle - 1 + 1 = rngZelle

Gruß

Helmut

Antwort 4 von Event

Hallo
Nachfolgendes macht so etwas (ähnliches) wie von Dir - leider nicht exakt - beschrieben:

Option Explicit

Sub Spalte_L()
Dim rngZelle As Range, z$, s%, uz As Range
Range("k2:k65535").Select ´damit in K1 eine "1" stehen kann
For Each rngZelle In Selection ´soll für jede Zelle in Spalte "K" gelten
If rngZelle.Value = 0 Then ´wenn die aktuelle Zelle = 0
If rngZelle.Offset(-1, 0).Value = 1 Then ´und die Zelle darüber = 1
z = rngZelle.Offset(0, 1).Address(RowAbsolute:=True)
Range("U3:U14").Select
s = Val(Mid(z, 4, Len(z) - 3))
For Each uz In Selection
Range(Left(z, 3) & CStr(s)).Value = uz.Value
´soll eine bestimmte Zahlenfolge dann in die Spalte ´kopieren und den vorhanden Bereich überschreiben
s = s + 1
Next
End If
End If
Next rngZelle
´und weiter mit der nächsten Zelle
End Sub



Gruß

Antwort 5 von tjalf

@ Helmut:

mit " Range(rngZelle - 1 + 1).Select "

meinte ich, das das Makro in die Nachbarspalte gehen soll und eine Zeile nach oben und dann dort die kopierten Zellen einfügen soll.

war nicht ganz glücklich ausgedrückt, i know ...


@ Event

Danke für Deine Mühe, nur habe ich da nicht ganz durchblicken können, da mir noch der tiefere Einblick in VBA fehlt,
woran ich aber arbeite ^^

(der Ansatz ging ja noch und die If-Then-Funktion aber als es dann ans kopieren+einfügen ging war´s zu Ende)

habe noch in einem anderen Forum angefragt und habe dort einen Code bekommen, den ich A verstehe und B der nach leichter Modifikation auch Prima funktioniert.

---

Sub Spalte_L()
´
´ Spalte_L Makro
´
´ Tastenkombination: Strg+Umschalt+L
´

Dim wks As Worksheet
Dim rngZelle As Range
Dim lngZeile&
Dim lngLetzteZeile&
Dim lngSpalteK&
Dim lngSpalteL&
lngSpalteK = 11
lngSpalteL = 12

Set wks = Worksheets("Tabelle 1")

lngLetzteZeile = wks.Cells(Rows.Count,

lngSpalteK).End(xlUp).Row

For lngZeile = 1 To lngLetzteZeile
´soll für jede Zelle In Spalte "K" gelten

If wks.Cells(lngZeile, lngSpalteK).Value = 0 Then

If wks.Cells(lngZeile - 1, lngSpalteK).Value = 1 Then

wks.Range("U3:U14").Copy Destination:=wks.Cells(lngZeile - 1, lngSpalteL)

End If
End If
Next

End Sub

---

werde versuchen, mich beim nächsten Problem besser verständlich auszudrücken, und mich dann mehr an die VBA-Sprache zu halten, wenn ich sie bis dahin verstanden hab ^^

Grüße

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: