Collapse column

Autor Thema: Umbenennung der Spalten/Ranges mit VBA. Falls neue Spalten kommen sollten...  (Gelesen 396 mal)

Offline Lufti

  • Newbie
  • *
  • Beiträge: 1
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2010
Hallo VBA-Experten :)

ich versuche mal mein Glück bei Euch :)

Ich arbeite seit langem an einer Datei mit drei Arbeitsblättern und in jedem Arbeitsblatt befindet sich eine Tabelle und ich habe verschiedene Codes geschrieben, die auch funktionieren, wie ich es möchte. Leider heißt es nun, dass die Tabellen neue Spalten in der Zukunft bekommen könnten und da liegt mein Problem. Die Codes, die ich geschrieben habe, beziehen sich auf bestimmte Spalten oder Ranges der Tabellen. D.h. wenn man neue Spalten in die Tabellen hinzufügen würde, würden meine Codes sehr wahrscheinlich nicht mehr funktionieren.

Ich habe bei verschiedenen Forums gelesen, dass man die Spalten/Ranges benennen kann und so würden neue Spalten meinen Code nicht kaputt machen. Leider blicke ich nicht mehr durch und die Umsetzung funktioniert irgendwie nicht. :( Die Datei darf ich allerdings nicht hochladen.

Die Frage an Euch wäre: Wie könnte ich folgende Teile meiner Codes (rot markiert) umbenennen, damit meine Codes weiter funktionieren, wenn es neue Spalten gäbe? Hier sind meine Codes natürlich nicht komplett geschrieben. Die Teile habe ich aus den Codes rauskopiert. Ich wäre sehr dankbar für jede Hilfe oder Idee!  :D

Beim ersten Code:

With wsfirsttable
        Set rngolddata = .Range("A4:I" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    End With

 With wssecondtable
        Set rngnewdata = .Range("A4:I" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    End With

 With wsfirsttable.Sort
        .SortFields.Clear
        .SortFields.Add Key:=wsfirsttable.Range("A4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange rngolddata
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Dim columns
columns = Array("B", "C", "D", "E", "F", "G", "H", "I")
For j = 1 To 8

n = j + 1
vout = CStr(n)

    rngnewdata.Offset(1, rngnewdata.columns.Count + j).Resize(rngnewdata.Rows.Count - 1, 1).FormulaLocal = _
        "=WENN($J5<>0;" + columns(j - 1) + "5=SVERWEIS(A5;" & wsfirsttable.Name & "!" & rngolddata.Address & ";" + vout + ";WAHR);"""")"

Next j


wssecondtable.AutoFilter = False

    With rngnewdata
   
    For x = 11 To 18
    n = x - 9
        .AutoFilter field:=x, Criteria1:="FALSCH"

        For Each rnghit In .Offset(1, 0).Resize(.Rows.Count - 1, .columns.Count).SpecialCells(xlCellTypeVisible)
            If rnghit.Column = n Then rnghit.Interior.Color = vbRed
        Next rnghit
    Next x
    End With

wssecondtable.AutoFilterMode = False
    With rngnewdata
        .AutoFilter field:=10, Criteria1:="0"                                         
        For Each rnghit In .Offset(1, 0).Resize(.Rows.Count - 1, .columns.Count).SpecialCells(xlCellTypeVisible)
            If rnghit.Column < 10 Then rnghit.Interior.Color = vbRed
        Next
    End With

 With wssecondtable
        .AutoFilterMode = False
        For i = 10 To 18
            .columns(i).ClearContents
        Next i

    End With

Beim zweiten Code:

 With wsfirsttable
        Set rngolddata = .Range("A4:I" & .Cells(.Rows.Count, 1).End(xlUp).Row)                 
        Set rngnewdata = .Range("J5:P" & .Cells(.Rows.Count, 1).End(xlUp).Row)                 
        Set x = .Range(Cells(R, 1), Cells(R, 16))

     End With

 
For R = 5 To 1000

  Blue = RGB(188, 255, 255)

   V = Cells(R, 4).Value
   
  If InStr(V, "Closed") Then
    x.Interior.Color = RGB(194, 194, 194)
   
    ElseIf InStr(V, "progress") > 0  Or InStr(V, "approval") > 0 _
                Or InStr(V, "Fulfillment") > 0  Or InStr(V, "Open") > 0 Then
                    x.Interior.Color = Blue
  End If

With Sheets("firsttable").Range("A5:P" & lRow).Borders           
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
 End With

 For Row = MaxRow To 5 Step -1
        If .Cells(Row, 4).Value = "Closed" And CurrentDate1 > .Cells(Row, 6).Value Then
        .Rows(Row).Delete
        ElseIf .Cells(Row, 1).Value = "" Then
        .Rows(Row).Delete
        n = n + 1
        End If
    Next Row


Beim dritten Code:

With wsthirdtable
    Set rngolddata = .Range("J5:P" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    rngolddata.Select
    Selection.NumberFormat = "0"
End With


Ich bedanke mich schon im Voraus!




Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: Umbenennung der Spalten/Ranges mit VBA. Falls neue Spalten kommen sollten...
« Antwort #1 am: Juni 29, 2018, 12:05:30 Nachmittag »
Hallo,

Zitat
... Wie könnte ich folgende Teile meiner Codes (rot markiert) umbenennen, damit meine Codes weiter funktionieren, wenn es neue Spalten gäbe? ...

Indem Du die Spalten z.B. deren Namen ggf. per Formel in Zellen in einer separaten Excel-Tabelle der Mappe ablegst und diese in Deinen Code einliest.

Gruß

Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.