Clever-Excel-Forum

Normale Version: Makro funktioniert nur auf einer Tabelle (Worksheet)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo, 
ich habe ein Makro der aus zwei Teilen besteht, zu einem löscht er Duplikate im Worksheet1 (in 3 verschiedenen Tabellen) und zum anderen überträgt er Daten in das Worksheet2. 
Wenn ich mich im Worksheet1. befinde kann ich den Makro ausführen. Wenn ich mich im Worksheet2. befinde kann er nicht ausgeführt werden. Ein Fehler tritt auf.

Ich poste den einfach mal hier rein, sorry weiß nicht wie ich es mache das der Code in einem extra Kasten angezeigt wird.

PS: Ich habe weder VBA noch noch irgendein Makro davor in Excel benutzt, ich weiß könnte bestimmt schöner, einfacher und kürzer sein.


Sub NET_DUPLICATE__RSSI__FILTER()
'
' RSSI FILTER Makro
'


Application.CutCopyMode = False
ActiveSheet.Range("Tabelle1[NET NAME]").RemoveDuplicates Columns:=1, Header:=xlYes

Application.CutCopyMode = False
ActiveSheet.Range("Tabelle2[NET NAME]").RemoveDuplicates Columns:=1, Header:=xlYes

Application.CutCopyMode = False
ActiveSheet.Range("Tabelle3[NET NAME]").RemoveDuplicates Columns:=1, Header:=xlYes

'
   
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=MIN(Tabelle1[RSSI (-dBm)])"
    Range("C3").Select
   
    ActiveCell.FormulaR1C1 = "=MIN(Tabelle2[RSSI (-dBm)])"
    Range("C4").Select
   
    ActiveCell.FormulaR1C1 = "=MIN(Tabelle3[RSSI (-dBm)])"
    Range("C5").Select
   
    ActiveCell.FormulaR1C1 = ""
    Range("B2").Select
   
    ActiveCell.FormulaR1C1 = _
        "=INDEX(Tabelle1[NET NAME],MATCH(RC[1],Tabelle1[RSSI (-dBm)],0))"
    Range("B3").Select
   
    ActiveCell.FormulaR1C1 = _
        "=INDEX(Tabelle2[NET NAME],MATCH(RC[1],Tabelle2[RSSI (-dBm)],0))"
    Range("B4").Select
   
    ActiveCell.FormulaR1C1 = _
        "=INDEX(Tabelle3[NET NAME],MATCH(RC[1],Tabelle3[RSSI (-dBm)],0))"
    Range("B5").Select
End Sub
Hallo ExcelLearner,

an welcher Stelle bekommst Du einen Fehler? Wie lautet der Fehler?

Wo überträgt Dein Makro Daten in das Worksheet2?

Zum Posten von Code hast du in der unteren Icon-Zeile eine Button (5. von rechts).

Für die ersten Hilfe probier mal als erste Zeile deines Makros:
Code:
Sheets("MeinTabellenblatt").Select
wobei du "MeinTabellenblatt" durch den Namen deine Workshetts1 ersetzt.
Dein Makro arbeitet mit ActiveSheet, d.h. es arbeitet alles auf dem aktiven Blatt ab. Ist da keine Tabelle1, gibt's wahrscheinlich nen Fehler. Springst Du vorher auf das richtige Blatt ist alles gut.
Grundsätzlich geht das Ganze natürlich schöner, aber das ist ein anderes Thema.

Gruß,
Lutz
(16.09.2020, 07:58)Lutz Fricke schrieb: [ -> ]
Code:
Sheets("MeinTabellenblatt").Select

Vielen Dank, hiermit hat es geklappt. habe jetzt den Makkro erweitert, er besteht aus 3 Schritte.

1. Schritt: Automatisch intelligente Tabellen erzeugen (Worksheet 1)
2. Schritt: Duplikate aus den Tabellen löschen (Worksheet 1)
3. Schritt: Daten in Worksheet 2 übermitteln.

An sich würde auch alles funktionieren, doch da es sich um eine importierte CSV Datei handelt, kommt immer die Fehlermeldung "Ihre Auswahl überlappt mindestens einen externen Datenbereich" wenn ich es manuell mache, kann ich einfach Enter drücken und es funktioniert trotzdem. Aber den Makro hält es leider auf. Kann ich das irgendwie umgehen?
Hallo ExcelLearner,

Du kannst versuchen, vorm Import der Daten die Fehleranzeige auszuschalten:
Code:
Application.DisplayAlerts = False

Und, gaaaaanz wichtig, nach dem problematischen Schritt wieder einschalten:
Code:
Application.DisplayAlerts = True

Gruß,
Lutz
Hi danke für die Hilfe. Ich habe nun aber festgestellt, das es doch nicht an der Fehlermeldung liegt. Wie ich ja schon meinte habe ich einfach das Makro aufgenommen, wie ich aus einem Bereich eine intelligente Tabelle gemacht habe. Das Problem ist, das im VBA irgendwas davon drin steht das aus der CVS Datei "..." eine Tabelle gemacht wurde. Heißt ich kann das gar nicht auf jede CVS Datei anwenden. Das ist mir aber wirklich wichtig. 
Gibt es einen weg das zu umgehen? Vielleicht kann man ins VBA rein schreiben, das er sich auf die Importierte Datei beziehen soll.

Code:
Sub Makro1()
'
' Makro1 Makro
'

'
   
    'hier muss ich noch mit Offset arbeiten
    Range("A24").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
   
     ' die Zahlen ist der Datei Name
    ActiveSheet.QueryTables("09100914").Delete
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$24:$O$47"), , xlYes).Name = _
        "Tabelle1"
    Range("Tabelle1[#All]").Select
End Sub
Hallo,

bitte nicht unnötig vollzitieren; vor allem dann nicht, wenn sich die Antwort auf den vorherigen Beitrag bezieht. In allen anderen Fällen genügt meistens eine Anrede, damit klar ist, wessen Beitrag beantwortet wird.

Zum Antworten den Button auf der rechten Seite unterhalb des Antwortformulars benutzen.
Hallöchen,

wenn Du eine csv importierst / öffnest, ist das entsprechende Blatt das aktive Blatt.
Den entsprechenden Code hast Du auch schon in Deiner Aufzeichnung:

Code:
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$24:$O$47"), , xlYes).Name = _
        "Tabelle1"

nur dass eventuell der Bereich nicht passt.

Im Prinzip könnte es, wenn Du alle Daten einbeziehst, auch so reichen:

Code:
Sub test()
   ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = _
        "Tabelle1"
End Sub
@schauan
Leider kann ich es gerade nicht ausprobieren, erst morgen wieder. So wie ich es verstanden habe,  wird mit deinem Code eine einzige intelligente Tabelle mit den ganzen Daten erstellt. Aber ich muss ja aus einer CVS Datei immer 3 Intelligente Tabellen machen. Und das ganze muss unabhängig von der jeweiligen CVS Datei sein, damit es mit jeder CVS Datei klappt.

Für mich sieht es so aus, dass dein Code auch für jede CVS Datei gehen würde. Ist es möglich jetzt noch bestimmte Bereiche festzulegen?
Hallöchen,

bei verschiedenen Bereichen musst Du zumindest auch verschiedene Tabellennamen vergeben.

Code:
Sub test()
   ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1:A10"), , xlYes).Name = _
        "Tabelle1"
   ActiveSheet.ListObjects.Add(xlSrcRange, Range("C1:C10"), , xlYes).Name = _
        "Tabelle2"
   ActiveSheet.ListObjects.Add(xlSrcRange, Range("E1:E10"), , xlYes).Name = _
        "Tabelle3"
End Sub
Achso, dann bin ich gespannt ob das klappen wird, ich bin zuversichtlich. Wäre echt klasse.
Seiten: 1 2