Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vba select

Vba select
09.01.2017 10:54:01
Michael
Guten Morgen zusammen,
mit Hilfe von Daniel und Hajo habe ich fol´gendes Modul gestrickt:
Sub Kopieren()
Dim lCol As Integer
lCol = LastColAll()
Union(Columns(lCol - 0), Columns(lCol)).Copy Columns(lCol + 1)
Range(Cells(10, lCol + 2), Cells(59, lCol + 2)).ClearContents
Columns(lCol + 1).SpecialCells(xlConstants) = 0
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=Tru
End Sub
Public Function LastColAll(Optional SheetName As Variant) As Long
ActiveSheet.Unprotect
'letzte Spalte in gesamter Tabelle suchen
If IsMissing(SheetName) Then SheetName = ActiveSheet.Name
LastColAll = Sheets(SheetName).UsedRange.Cells.Find("*", , , , xlByColumns, xlPrevious). _
Column
End Function
Ich möchte das ganze nun aus dem Tabellenblatt B ausführen und ins Tabellenblatt A übertragen.
Habe gestern Abend noch eine Std. versucht, es aber nicht hinbekommen.
Ich hoffe jemand kann mir da nochmal behilflich sein.
Desweiteren habe ich noch diesen Code gestrickt bzw. aus dem Internet gezogen und umgeschrieben.
Sub Spalte_löschen()
ActiveSheet.Unprotect
Dim LastCol As Long
With ThisWorkbook.Sheets("Bilanz")
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Columns(LastCol).Delete
End With
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub Hier möchte ich aber, das die Spalte nur gelöscht wird, wenn in Zeile 3, in der steht folgende Formnel (=DATUM(JAHR(I3)+1;MONAT(I3)+0;TAG(I3)+0) der Tabelle, das Datum nicht kleiner ein Jahr zurück liegt. Also wenn heute 2017 ist darf auch nur bis zum Jahr 2017 gelöscht werden, wenn 2016 dort steht soll eine Meldung kommen, die Spalte kann nicht gelöscht werden.
Gruß Michael

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vba select
09.01.2017 16:35:54
Piet
Hallo Michael
ich kann dir eine Hilfestellung geben, bin aber mit der Funktion und Union nicht klargekommen. Kann sein das mein Excel 2003 Union nicht kennt? Es geht aber auch ohne Funktion. s. meinen Beispiel Code. Den Code must du bitte selbst ergaenzen, weil ich nicht weiss auf welche Tabelle sich löschen bezieht? Ich denke das du mit dem Hinweiss zurecht kommst, lasse den Thread offen.
Warum du Union machst ist mir auch nicht klar, denn: lColB - 0), Columns(lColB ICol-0 veraendert m.E. doch nichts am Bereich?
Oder sehe ich das falsch? (Habe nie mit Union gearbeitet)
mfg Piet

Sub Kopieren()
Dim lColA As Integer, lColB As Integer
ActiveSheet.Unprotect
lColA = Sheets("Tabelle1").UsedRange.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lColB = Sheets("Tabelle2").UsedRange.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
'** Union hat bei mir nicht funktioniert.
Worksheets("Tabelle2").Columns(lColB).Copy Worksheets("Tabelle1").Columns(lColA + 1)
'Worksheets("Tabelle2").Union(Columns(lColB - 0), Columns(lColB)).Copy Worksheets("Tabelle1"). _
Columns(lColA + 1)
Exit Sub
'** hier beendet weil ich nicht weiss in welcher Tabelle du löschen und 0 setzen willst?
'Worksheets("unbekannt").Range(Cells(10, lCol + 2), Cells(59, lCol + 2)).ClearContents
'Worksheets("unbekannt").Columns(lCol + 1).SpecialCells(xlConstants) = 0
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=Tru 
End Sub

Anzeige
AW: @Piet
10.01.2017 01:36:15
Michael
Hallo Piet, vielen Dank für deine Hilfe.
Und auch ein Dank an meienm Namensvetter! für den Hinweis (Union)
Ich nenne mich ab jetzt Michael 2 :-)
Habe den Code folgendemaßen geschrieben:
Sub KopierenPräsentation()
Worksheets("Kennzahlen").Unprotect
Dim lColA As Integer, lColB As Integer
lColA = Sheets("Kennzahlen").UsedRange.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lColB = Sheets("Kennzahlen").UsedRange.Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Worksheets("Kennzahlen").Columns(lColB).Copy Worksheets("Kennzahlen").Columns(lColA + 1)
Worksheets("Kennzahlen").Protect DrawingObjects:=True, Contents:=True, Scenarios:=Tru
Exit Sub
End Sub
Klappt auch! Fügt mir eine Spalte hinzu. Für die Tabelle reicht mir das.
Jetzt möchte ich eventuell Spalten die ich eingefügt habe (mit dem Code oben) wieder löschen. Es sollen aber nur die Spalten wieder gelöscht werden können, wo in der letzten Spalte, Zeile 5 nichts drin steht.
Gruß Michael 2
Anzeige
AW: @Piet
10.01.2017 23:49:13
Michael
Hallo Michael,
die Anleitung ist sehr gut, doch leider bekomme ich es einfach nicht selber hin.
Habe jetzt nochmal alles versucht.
Wäre für Hilfe sehr dankbar.
Eigendlich klappt alles bestens, nur das Problem mit dem löschen bekomme ich nicht hin.
Kann ich in dem Code unten noch eine If Abfrage einbauen? Vor dem löschen soll geprüft werden ob was in der letzten Spalte Zelle 5 drin steht. Wenn ja soll nicht gelöscht werden. Wenn nein, letzte Spalte löschen.
Sub SpalteKennzahlen_löschen()
Worksheets("Kennzahlen").Unprotect
Dim LastCol As Long
With ThisWorkbook.Sheets("Kennzahlen")
LastCol = .Cells(4, .Columns.Count).End(xlToLeft).Column
.Columns(LastCol).Delete
End With
Worksheets("Kennzahlen").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Gruß Michael 2
Anzeige
AW: @Piet
15.01.2017 13:23:05
Michael
Hi,
das geht z.B. so:
Sub SpalteKennzahlen_löschen()
Worksheets("Kennzahlen").Unprotect
Dim LastCol As Long
With ThisWorkbook.Sheets("Kennzahlen")
LastCol = .Cells(4, .Columns.Count).End(xlToLeft).Column
If .cells(5,LastCol) = "" then .Columns(LastCol).Delete
End With
Worksheets("Kennzahlen").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Gruß,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige