Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    19.08.2007
    Beiträge
    124

    Mit VBA Spalte einfügen wenn Bedingung erfüllt

    Guten Tag zusammen

    Ich möchte wenn in I3 ein Wert enthalten ist, eine Spalte I einfügen so dass dieser Wert nachher auf K3 ist. Wenn I3 leer ist zu R7 springen. Der Name der Tabelle kann variieren.

    Habe mir das gebastelt, funktioniert aber nicht:

    If Tabelle1.Range("I3").Value <> "" Then
    Columns("I:I").Selection.Insert Shift:=xlToRight

    If Tabelle1.Range("I3").Value = " " Then
    Range("R7").Select
    End If
    End If

    Darf ich auf eure Hilfe hoffen?
    Danke schon im Voraus
    cesar

  2. #2
    Registriert seit
    04.08.2015
    Ort
    in der Geburtsstadt der Gebrüder Grimm
    Beiträge
    237

    So vielleicht?

    Hallo cesar,

    meinst du so etwas?

    Code:
    With Tabelle1
         If Not IsEmpty(.Range("I3")) Then
             .Columns("I:I").Insert Shift:=xlToRight
         Else
             .Range("R7").Select
         End If
    End With
    Grüße, Andreas

  3. #3
    Registriert seit
    19.08.2007
    Beiträge
    124
    Hallo Andreas

    Bei mir passiert nichts. Es wird nichts eingeschoben.

    Dafür erhalte ich bei Else die Fehlermeldung

    Laufzeitfehler '1004', die Select-Methode des Range-Objektes konnte nicht ausgeführt werden

    gruss
    cesar

  4. #4
    Registriert seit
    04.08.2015
    Ort
    in der Geburtsstadt der Gebrüder Grimm
    Beiträge
    237

    Komisch

    du hast das ganze aber schon in einer kompletten Sub? Das in meiner Antwort war ja nur ein Codeschnipsel, so wie in deiner Frage auch. Eine komplette Sub sieht so aus:
    Code:
    Sub irgendwas
    With Tabelle1
         If Not IsEmpty(.Range("I3")) Then
             .Columns("I:I").Insert Shift:=xlToRight
         Else
             .Range("R7").Select
         End If
    End With 
    End Sub
    Und dann muss es natürlich die Tabelle1 in deiner Arbeitsmappe geben. Wenn das ganze auf einem anderen Blatt stattfinden soll, musst du den Code entsprechend ändern.

    Gruß, Andreas

  5. #5
    Registriert seit
    19.08.2007
    Beiträge
    124

    Böse

    Hallo Andreas

    Ja, ja, das ist schon in ein Sub eingebunden.

    Aber ganz sonderbar ist, dass dein Makro in einem neuen File ohne ein Problem abgearbeitet wird, wenn ich es aber in meinem bestehenden File laufen lasse, kommt diese Fehlermeldung und es passiert überhaupt nichts.
    Und dies selbst dann, wenn ich dein Test Makro so übernehme.

    Das ganze bestehende Makro, welches eine ordentliche Grösse hat, läuft soweit ohne irgendwelche Probleme durch.

    Ich werde noch weitere Tests machen.

    cesar

  6. #6
    Registriert seit
    04.08.2015
    Ort
    in der Geburtsstadt der Gebrüder Grimm
    Beiträge
    237
    Hi cesar,

    wie schon gesagt: Eventuell gibt es in deiner Mappe die Tabelle1 nicht. Hierbei handelt es sich um den sog. Codenamen, der im VBA Editor links zu zehen ist. Dahinter steht in Klammern, wie das Blatt benannt ist (das, was auf dem Blattreiter steht).
    Du kannst mal versuchen, das Tabelle1 im Code zu ersetzen durch
    Code:
    Worksheets("BlattnameWieErAufDemReiterSteht")
    Manchmal hilft das.

    Gruß, Andreas

  7. #7
    Registriert seit
    19.08.2007
    Beiträge
    124
    Hallo Andreas

    Ich habe jetzt herausgefunden, warum das Makro nicht läuft.

    Wenn ich es in ein Modul einbinde, funktioniert es bei mir nicht.

    Wenn ich es aber direkt in der Tabelle1 oder weitere speichere, dann läuft es ohne weiteres durch, wenn ich die Benennung ändere, also zB With Tabelle2 oder With Tabelle3 etc. in der jeweiligen Tabelle.

    Gibt es eine Möglichkeit, dieses Makro in ein Modul einzubinden, denn ich erzeuge in einem File täglich 8 Tabellen.

    Danke und Gruss
    cesar

  8. #8
    Registriert seit
    19.08.2007
    Beiträge
    124

    Hallo Andreas

    Es funktioniert!!

    Habe das Makro so abgeändert:

    With ActiveSheet
    If Not IsEmpty(.Range("I3")) Then
    .Columns("I:I").Insert Shift:=xlToRight
    Else
    .Range("R7").Select
    End If
    End With

    Herzlichen Dank
    cesar

  9. #9
    Registriert seit
    04.08.2015
    Ort
    in der Geburtsstadt der Gebrüder Grimm
    Beiträge
    237

    Prima!

    Noch folgendes zur Info. Ich habe das auch erst neulich herausgefunden:

    Wenn du Range oder Cells im Codebereich eines Tabellenblattes benutzt (ohne Vorsätze wie Sheets... oder Tabelle... o.ä.), dann bezieht es sich immer auf dieses Blatt.
    Benutzt du Range oder Cells in einem Modul, dann bezieht es sich immer auf das aktive Blatt.

    Wenn du deinen Code also jetzt in einem Modul stehen hast, sollte er also sogar ohne den Vorsatz ActiveSheet funktionieren und trotzdem immer das aktive Blatt bearbeiten.

    Grüße, Andreas

  10. #10
    Registriert seit
    19.08.2007
    Beiträge
    124

    Guten Morgen Andreas

    Danke für den Hinweis. Werde ich mir merken.

    gruss
    cesar

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •