Microsoft Excel

Herbers Excel/VBA-Archiv

Excel 2003 macht auf 2010 probleme

Betrifft: Excel 2003 macht auf 2010 probleme von: Jorgi
Geschrieben am: 08.11.2014 16:13:36

Hallo,
ich hatte schon mal einen Beitrag:

mein erster Code "freielagerplätze2 " wandelt Lagerplätze in der Tabelle1 von der Tabelle3 um.

z.B.
Tabelle1
1-69-69-69
1-69-69-70

Tabelle 3 sagt
SpalteA.........SpalteB
1-69-69.........1-70-70

Dann macht der Code eine umwandlung

Sub freieLagerplätze2()

Dim lngZeile As Long
Dim lngLetzte As Long
lngZeile = 1
With Worksheets("Tabelle1")
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows. _
Count)
With .Range(.Cells(1, 1), .Cells(lngLetzte, 1))
Do
.Replace What:=Worksheets("Tabelle3").Cells(lngZeile, 1).Value, _
Replacement:=Worksheets("Tabelle3").Cells(lngZeile, 2).Value, LookAt:=xlPart _
, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
lngZeile = lngZeile + 1
Loop While Worksheets("Tabelle3").Cells(lngZeile, 1) <> ""
End With
End With
End Sub
Ergebnis

1-70-70-69
1-70-70-70

2.
mein zweiter Code löscht Lagerplätze die in Tabelle1 von Tabelle2 drin sind.
Sub löschenvonTabelle()


With Sheets("Tabelle1")
With .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Offset(, 1)
.FormulaR1C1 = "=if( isnumber(match(RC[-1],'Tabelle2'!C1,0)),#n/a,0)"
On Error Resume Next
.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
.Clear
End With
End With
End Sub
z.B
Tabelle1
1-69-40-99
1-99-99-99
1-99-99-20

Tabelle2
1-99-99-99

Ergebnis:
1-69-40-99
1-99-99-20

Bei Excel 2003 hatte ich nie Probleme. Durch Excel 2010 reagiert der Code nicht. Wenn ich ein neues Arbeitsblatt nehme und teste den Code mit händische zahlen , dann geht es ohne Probleme. Aber die liste kommt vorher über ein Programm ->( Wird dann auf "txt" gespeichert) . Irgendwie eine versteckte Formation ?

Hoffe mir kann jemand helfen?

Hab schon Text in Splalten probiert
Spalten Formation usw.

Besten Dank

Jorgi

  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: Jorgi
Geschrieben am: 08.11.2014 16:16:13

Sorry Datei vergessen

https://www.herber.de/bbs/user/93623.xlsm

Danke nochmal

Liebe Grüße
Jorgi


  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: fcs
Geschrieben am: 08.11.2014 16:48:59

Hallo Jorgi,

das Problem ist, dass in Tabelle3 in Zeile 2 und 3 keine Daten stehen. Dadurch wird die Do-Loop-Schleife, die wiederholt wird solange in Spalte A die Zellen nicht leer sind, schon in Zeile 2 abgegrochen.

Mit nachfolgenden Ergänzungen/Anpassungen sollte es wieder funktionieren.

Gruß
Franz

Sub freieLagerplätze2()

Dim lngZeile As Long
Dim lngLetzte As Long, lngLetzte3 As Long
lngZeile = 1
With Worksheets("Tabelle3")
    lngLetzte3 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, _
        .Rows.Count)
End With
With Worksheets("Tabelle1")
    lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, _
        .Rows.Count)
With .Range(.Cells(1, 1), .Cells(lngLetzte, 1))
Do
    If Worksheets("Tabelle3").Cells(lngZeile, 1).Value <> "" Then
        .Replace What:=Worksheets("Tabelle3").Cells(lngZeile, 1).Value, _
            Replacement:=Worksheets("Tabelle3").Cells(lngZeile, 2).Value, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    End If
    lngZeile = lngZeile + 1
Loop While lngLetzte3 >= lngZeile
End With
End With
End Sub



  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: Jorgi
Geschrieben am: 10.11.2014 06:35:57

Hallo Franz,
Der code funktioniert super. Danke dir.
Der zweite code macht probleme.
Der soll alle Daten in tabelle1 SpalteA löschen die sich in Tabelle2 Spalte A befunden
Die Zeilen in der Tabelle 1 sollen komplett gelöscht werden und die Zeilen nachrutschen

Hättest du eine idee?
Besten Dank
LG jorgi


  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: fcs
Geschrieben am: 10.11.2014 07:58:25

Hallo Jorgi,

das Problem ist, dass die Daten Spalte A der beiden Tabellen nie identisch sind.

In allen Zeilen inTabelle 2 stehen hinter den sichtbaren Zeichen noch Leerzeichen. Deshalb funktioniert die VERGLEICH-Funktion nicht und das Ergebnis in Tabelle1 ist in Spalte B in allen Zeilen = 0.

Du musst in Tabelle2 in Spalte A alle Leerzeichen durch einen Leerstring ersetzen, dann sollte es funktionieren.

Gruß
Franz


  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: Jorgi
Geschrieben am: 10.11.2014 09:30:22

Hallo franz ,
Danke, kann man den Code so anpassen, das er nur Spalte A in der Tabelle2 vergleicht, egal was dahinter steht.
In 2003 hatte ich diesen code:
Der löscht alle Zeilen in der Tabelle1 raus wenn in der Spalte A das gleiche drin steht wie in der Tabelle2 Spalte A

Sub freieLagerplätze3()

    Dim loLetzte1 As Long

    Dim loLetzte2 As Long

    Dim i As Long, j As Long

    Dim raA As Range

    Dim wksA As Worksheet

    Dim wksB As Worksheet

    Set wksA = Sheets("Tabelle1") ' Tabellennamen anpassen; Tabelle in der gelöscht wird

    Set wksB = Sheets("Tabelle2") ' Tabellennamen anpassen; Tabelle in der die Werte in Spalte  _
A gelistet sind

    With wksB

        loLetzte2 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)

    End With

    With wksA

        loLetzte1 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)

        For i = 2 To loLetzte1

            For j = 2 To loLetzte2

                If .Cells(i, 1) = wksB.Cells(j, 1) Then

                    If raA Is Nothing Then

                        Set raA = Rows(i)

                    Else

                        Set raA = Union(raA, Rows(i))

                    End If

                End If

            Next j

        Next i

    End With

    If Not raA Is Nothing Then

        raA.Delete

        Set raA = Nothing

    End If

End Sub

Warum der nicht mehr geht, das weiss ich leider nicht. Vielleicht kannst du mir helfen
LG Jürgen


  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: fcs
Geschrieben am: 10.11.2014 10:42:52

Hallo Jürgen,

deine Makros funktionieren nicht, weil in Tabelle1 am Ende der Werte keine Leerzeichen stehen und in Tabelle2 stehen am Ende der Werte immer Leerzeichen - warum auch immer?

Du musst also irgendwie dafür sorgen, dass in Tabelle2 in Spalte A die Leerzeichen am Ende der Werte verschwinden, wenn du mit der Formel arbeiten willst, um doppelte zu löschen

Dein altes Makro könnte evtl. funktionieren mit folgenden Anpassungen in der inneren For-Next-Schleife:

            For j = 2 To loLetzte2
                If Trim(.Cells(i, 1)) = Trim(wksB.Cells(j, 1)) Then
                    If raA Is Nothing Then
                        Set raA = Rows(i)
                    Else
                        Set raA = Union(raA, Rows(i))
                    End If
                    Exit For
                End If
            Next j

Alerdings geht die Laufzeit des Makros hoch, wenn zu sehr viele Zeilen in den Tabellenblättern hast.
Gruß
Franz


  

Betrifft: AW: Excel 2003 macht auf 2010 probleme von: Jorgi
Geschrieben am: 10.11.2014 11:41:18

Hallo franz,

Dein code geht und es stürzt nicht ab.
Ich könnte dich jetzt nur noch knuddeln:-)
Danke danke für deine hilfe

LG Jürgen