Excel-VBA-Makro

Hallo zusammen,

für mein Vorhaben habe ich bisher das Folgende gebastelt:

Sub Kopieren_nur_Werte() MsgBox („Are you sure?“) Range(„A1:smiley:14“).Select Selection.Copy Range(„A17:stuck_out_tongue:31“).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ True, Transpose:=False Application.CutCopyMode = False Range(„D2“).Select End Sub

Hierzu mein Probleme/2 Fragen:

  1. Bei der MessageBox möchte ich gerne, dass eine Ja-Nein-Schaltfläche erscheint mit der Möglichkeit, das bei „Nein“ die Operation abgebrochen und bei „Ja“ die Operation durchgeführt wird. Wie kriege ich dies hin?

  2. Ganz entscheidend ist für mich, dass bei dieser Operation nur dann eine automatisch Kopier-Einfügoption geschehen soll, wenn sich in den betreffenden Zellen Werte befinden. Muss ich hier mit einen  Schleife arbeiten, bzw, wie bekomme ich es hin. Das Problem liegt auch darin, dass in den Zellen A1:smiley:14 Formeln drinstehen, weshalb ich mich überhaupt für eine Makro-Lösung entschieden habe.

Ich hoffe, Ihr könnte mir helfen - vielen Dank dafür im Voraus!

Viele Grüße

Michael

Nachtrag | Re: Excel-VBA-Makro
…das Problem 1 habe ich gelöst, aber das Problem 2 lässt sich einfach nicht lösen.

Ich möchte eben nur Werte (keine Texte, keine Leerzeichen; keine Formeln) automatisch kopiert und in den definierten Bereich eingefügt haben. Arbeite ich innerhalb des VBA-Editor mit If-/Then bekomme ich jedes Mal irgendeine Fehlermeldung. Kann ich den nicht einen ganzen Bereich auswählen, ihn gleichzeitig mit der If-Funktionalität überprüfen, wie im Beispiel (dort aber noch ohne If-Bedingung)?

Nochmals Danke!

Hallo Michael,

ein Tipp vorne weg, wenn du hier Code postest:
benutze den PRE-Tag. Sonst kommt evtl. so eine völlig unlesbare Bandwurmzeile raus, wie du sie hier produziert hast.

Was mir in deinem Code nicht klar ist:
A1:smiley:14 sind 14 Zeile x 4 Spalten.
A17:stuck_out_tongue:31 sind aber 15Zeilen x 16 Spalten.
Was macht das für einen Sinn?

„…wenn sich in den betreffenden Zellen Werte befinden.“
Was meinst du mit Werten? Numerische Werte, oder auch Text?

Ich geh jetzt mal davon aus, dass „keine Werte“ bei dir heißt, dass der Zellwert="" ist, egal, ob die Zelle wirklich leer ist, oder eine Formel darin den Leerwert „“ erzeugt.
Dann kannst du das kopieren mit einer einzigen Zeile erledigen:

Range("A17:smiley:30").Value = Range("A1:smiley:14").Value

Es braucht keine Abfrage, ob der Zellwert „“ ist. Die Zelle wird einfach mit kopiert und die Zielzelle ist dann auch „“.
Wenn du es anders gemeint hast, erkläre es bitte etwas genauer.

Gruß, Andreas

Noch mal hallo,

also wenn ich es richtig verstanden habe, dann brauchst du eine kleine Schleife, die Zelle für Zelle durchläuft. Sie testet, ob:

  1. die Zelle keine Formel enthält

  2. die Zelle einen numerischen Wert enthält.
    Wenn ja dann wird der Wert in die Zelle 16 Zeilen weiter unten geschrieben.
    Hier der Code:

    Option Explicit

    Sub kopieren()
    Dim zelle As Range

    For Each zelle In Range(„A1:smiley:14“)
    If (Not zelle.HasFormula) And IsNumeric(zelle) Then Cells(zelle.Row + 16, zelle.Column).Value = zelle.Value
    Next zelle
    End Sub

Gruß Andreas

Hallo Andreas,

ein Tipp vorne weg, wenn du hier Code postest:
benutze den PRE-Tag. Sonst kommt evtl. so eine völlig
unlesbare Bandwurmzeile raus, wie du sie hier produziert hast.

Sorry - selbst gesehen, dass es nicht gerade leserlich aussieht, wusste aber gleichzeitig nicht, wie ich dies entsprechend in eine schönere Form nachträglich bringen könnte. Daher vielen Dank für den Hinweis!

Was mir in deinem Code nicht klar ist:
A1:smiley:14 sind 14 Zeile x 4 Spalten.
A17:smiley:30 sind aber 15Zeilen x 16 Spalten.
Was macht das für einen Sinn?

Mist - soll natürlich folgendermaßen lauten:
A1:smiley:14
A1:stuck_out_tongue::30 (P ist schon richtig)

Range(„A17:smiley:30“).Value = Range(„A1:smiley:14“).Value

Es braucht keine Abfrage, ob der Zellwert „“ ist. Die Zelle
wird einfach mit kopiert und die Zielzelle ist dann auch „“.
Wenn du es anders gemeint hast, erkläre es bitte etwas
genauer.

Genau das soll vermieden werden: Wenn im Ausgangszellbereich eine bzw mehrere Zellen „“ sind, dann sollen diese entsprechend nicht berücksichtigt werden. Es kann nämlich durchaus vorkommen, dass in den betreffen Zielzellen schon entsprechende Werte stehen, die jedoch dann nicht überschrieben werden soll.

Nochmals vielen Dank & viele Grüße

Michael

Hallo Andreas,

also wenn ich es richtig verstanden habe, dann brauchst du
eine kleine Schleife, die Zelle für Zelle durchläuft. Sie
testet, ob:

  1. die Zelle keine Formel enthält
  2. die Zelle einen numerischen Wert enthält.
    Wenn ja dann wird der Wert in die Zelle 16 Zeilen weiter unten
    geschrieben.
    Hier der Code:

Option Explicit

Sub kopieren()
Dim zelle As Range

For Each zelle In Range(„A1:smiley:14“)
If (Not zelle.HasFormula) And IsNumeric(zelle) Then
Cells(zelle.Row + 16, zelle.Column).Value = zelle.Value
Next zelle
End Sub

Genau das habe ich gemeint! :wink: Also braucht man doch eine kleine Schleife…
Damit kann nun eine automatische Copy+Paste-Funktionalität gewährleistet werden, oder? Also sobald das File entsprechend geöffnet wird, soll das Makro entsprechend automatisch starten - hoffe dies funktioniert.

Schönes Wochenende!

Viele Grüße

Michael

Hallo Andreas,

Hi Michael,

Damit kann nun eine automatische Copy+Paste-Funktionalität
gewährleistet werden, oder? Also sobald das File entsprechend
geöffnet wird, soll das Makro entsprechend automatisch starten

  • hoffe dies funktioniert.

Nein, davon war bisher nicht die Rede.
Wenn der Code beim Mappe-Öffnen automatisch loslaufen soll, müssen wir ihn ändern:

Private Sub Workbook\_Open()
 Dim zelle As Range

 With Sheets("Tabelle1")
 For Each zelle In .Range("A1:smiley:14")
 If (Not zelle.HasFormula) And IsNumeric(zelle) Then .Cells(zelle.Row + 16, zelle.Column).Value = zelle.Value
 Next zelle
 End With
End Sub

Der Code muss in den Codebereich von DieseArbeitsmappe. Außerdem musst du dort, wo „Tabelle1“ steht, den Namen es Blattes einsetzen, auf dem das Koiperen stattfinden soll.

Schönes Wochenende!

Viele Grüße

Dito

Michael

Andreas

herzlichen Dank! --eom–
.