Mit VBA Spalte einfügen wenn Bedingung erfüllt

cesar

Stammgast
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
 

nochEinAndreas

Stammgast
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
 

cesar

Stammgast
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
 

nochEinAndreas

Stammgast
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
 

cesar

Stammgast
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
 

nochEinAndreas

Stammgast
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
 

cesar

Stammgast
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
 

cesar

Stammgast
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
 

nochEinAndreas

Stammgast
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
 
Oben