Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Makro funktioniert nur auf einer Tabelle (Worksheet)
#1
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
Antworten Top
#2
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
Antworten Top
#3
(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?
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top
#6
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.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
[-] Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:
  • ExcelLearner
Antworten Top
#7
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
@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?
Antworten Top
#9
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • ExcelLearner
Antworten Top
#10
Achso, dann bin ich gespannt ob das klappen wird, ich bin zuversichtlich. Wäre echt klasse.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste