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.

Tabellen Namen zuweisen VBA
#1
Hallo liebes Forum,

Ich bin Neuling im Bereich VBA und Markos.
Mit der Unterstützung hier habe ich mein erstes Marko geschrieben, mit dem ich aus einer Quelldatei Daten in eine Datenbank kopieren kann.

 Nun habe ich ein Problem, was ich leider nicht gegoogelt bekomme da ich keine Ahnung habe wie der richtige Begriff für mein Problem lautet....

Ich möchte meinen beiden Tabellen feste Namen zuweisen im Marko um sie anzusprechen.  Ich habe vor irgendwann aus 10 Quelldateien in eine Datenbankdatei Dateien zu übertragen. Jetzt würde ich gerne am Anfang des Markos etwas sagen wie:

Die jetzt aktive Tabelle heißt für dich "Name1" .

Jetzt öffne die Datei unter "Pfad" (das wird dann die Datenbank) , hier nimm folgendes arbeitsblatt und dies heißt für dich nun "name2".

Jetzt aktiviere name1, kopiere a1. Aktiviere nun Name 2 und füge bei b 12 ein. 

Momentan spreche ich dir datei immer mit dem Namen an....also aktiviere Dateiname"Quellen" und kopiere dies, aktiviere dann Dateiname"Datenbank" und füge ein. 

Wenn ich jetzt die Datei aber 10 Mal kopiere und die Quelle 1 bis 10 nenne müsste ich jedes marko Quelldatei ja einzeln benennen, das würde ich gerne umgehen.

Ich hoffe ihr versteht was ich meine....leider habe ich keine Idee wie man dieses Namen festlegen bezeichnet....

Dankeschön

Gruß Torben
Antworten Top
#2
Hallo,

der Fachterminus, den du suchst, heißt "Referenzieren".


Code:
Dim Name1 As Workbook
Dim Name2 As Workbook
Dim WS1 As Worksheet
Dim WS2 As Worksheet

Set Name1 = ActiveWorkbook
Set WS1 = Name1.ActiveSheet

Set Name2 = Workbooks.Open("C\DeinPfad\DeineDB.XLSX")
Set WS2 = Name2.Worksheets("Datenbank")

With WS1
    .Range("A1").Copy Destination:=WS2.Range("B12")
End With

Den Rest kriegst du jetzt sicher selbst hin.
Außerdem hab ich die Bemerkung mit dem 10 mal kopieren, nicht begriffen.
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • Newby81
Antworten Top
#3
Hallöchen,

Zitat:Außerdem hab ich die Bemerkung mit dem 10 mal kopieren, nicht begriffen.
Ja, da sollen 10 Blätter kopiert werden Smile

Das kopieren könnte dann in einer Schleife passieren, damit man nicht 10 Makros oder 10 Aktionen in einem Makro braucht.
Wenn die Namen sich nur in einer Zählnummer unterscheiden, kann man das ganz gut über den Schleifenzähler regeln.

For iCnt = 1 to 10
workbooks.open filename="c:\Test\Name" & icnt & ".xlsx")

Next

Wenn die Daten alle 12 Zeilen eingefügt werden sollen, also in 12, 24, 36 usw, kann man den Schleifenzähler auch nutzen.

Statt
Range("B12")

könnte man z.B.
Range("B" & iCnt*12)

schreiben (oder man nimmt besser Cells(icnt*12, 2).
.      \\\|///      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:
  • Newby81
Antworten Top
#4
Danke erstmal dafür das ihr euch die Mühe gemacht habt! :)

Ich werde das mit dem Referizieren am WE gleich Mal testen! 

Für mich zum Verständnis (Sorry ihr klatscht euch gleich bestimmt mit der Flachen Hand an die Stirn)....
Ich habe bis hier ja immer nur bisschen mit dem Marco Recorder gespielt, der sagte mir dann sowas wie: 

Windows"Quelle"activate
Range("b9").Copy
Windoes" Daten"activate
Range("B12").Paste

Kann ich das jetzt so umformulieren das ich sage:
With WS1
Range("B9").Copy
With WS2
Range ("B12").Paste 

Oder müsste es dann

Destination WS2
Range ("B12").Paste 

lauten? 
Die nächste Frage, wenn ich jetzt noch einen Kopierbefehl einleiten möchte, kann ich dann direkt sagen with ws1 und wieder starten oder muss ich jeden Kopiervorgang mit end with beenden und den neuen Kopiervorgang wieder mit with WS1 einleiten?

Zu dem 10 Mal kopieren das ich im ersten Post meinte.... Ich möchte für 10 Kollegen jeweils eine eigene Datei erstellen (inhaltlich natürlich gleich) die dann die Daten auf die Datenbank speichert. Damit meinte ich also, dass ich meine Exeldatei 10 Mal kopieren möchte und dann halt die Dateien von 1 bis 10 benenne....

Vielen Dank für Eure Unterstützung!:)

Grus

Torben
Antworten Top
#5
Hallo,

Zitat:ja, da sollen 10 Blätter kopiert werden [img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]

@André ... geringfügig daneben, "mit vollem Anlauf ausgerutscht und so richtig auf die Fre..e geklatscht." ... sagt da meine Freundin immer.
Ich habe es wenigstens zugegeben, dass ich nicht verstanden habe, was er will.

@Torben:
lies dir doch erst mal die Hilfe durch und schmeiß nicht alles durcheinander. Nicht hektisch werden. Probiere den Code in aller Ruhe aus, den du bekommen hast und versuch ihn mit der Hilfe und durch googlen zu verstehen und auszubauen.
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
[-] Folgende(r) 1 Nutzer sagt Danke an Flotter Feger für diesen Beitrag:
  • Newby81
Antworten Top
#6
Hallo liebes Forum, ich habe die letzten Tage probiert mich in das ansprechen von Arbeitsmappen einzulesen,
aber leider macht es bei mir im Kopf einfach nicht Klick.... Ich hoffe ihr könnt mir (wieder einmal) den richtigen Weg zeigen... quelle ist die datei, i welcher ich Daten reinschreibe (mauell) die dann in die Datenbank kopiert werden sollen (testbuch), dann soll eine laufende Nummer aus der Datenbank in meine Quelle kopiert werden um die Einträge zuordnen zu können.

Mein Marko sieht bis jetzt so aus:

Code:
Sub Synchronisieren()
'Daten kopieren
    'Ticket
    [C9].Copy
    Workbooks.Open Filename:="G:\Datenbank VBA\testbuch.xlsx"
    i = Cells(Rows.Count, 2).End(xlUp).Row + 1
        Windows("testbuch.xlsx").Activate
    Cells(i, 2).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        'Auftragsnummer
       ActiveCell.Offset(0, -1).Range("A1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("quelle.xlsm").Activate
    [j6].PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
      
        'Datum
        Windows("quelle.xlsm").Activate
  [J7].Copy
    Windows("testbuch.xlsx").Activate
    i = Cells(Rows.Count, 3).End(xlUp).Row + 1
        Cells(i, 3).Select
        Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

ClearClipboard = True

End Sub


soweit funktioniert das auch gut, jetzt wollte ich ja gerne die quelle und mein testbuch reverenzieren, damit ich die Exel Datei auch anders nenne kann, ohne das es nicht mehr funktioniert...

Da komme ich leider nicht weiter :( Probiert habe ich bis hier folgendes:


Code:
Sub Synchronisieren2()

Dim quelle As Workbook
Dim testbuch As Workbook
Dim WS1 As Worksheet
Dim WS2 As Worksheet

Set quelle = ActiveWorkbook
Set WS1 = quelle.ActiveSheet

Set daten = Workbooks.Open("G:\Datenbank VBA\testbuch.xlsx")
Set WS2 = Worksheets("Tabelle1")

Wenn ich es richtig verstanden habe, habe ich ihm jetzt gesagt, das quelle immer das aktive workbook ist und WS1 die 
Arbeitsmappe1 der quelle, testbuch soll er öffnen, WS2 ist die erste tabelle des testbuches....?


      'Daten kopieren

hier hänge ich total, eigentlich dachte ich der Befehl würde jetzt lauten:


Code:
with WS1
.Range("C1").copy
with WS2
 i = Cells(Rows.Count, 3).End(xlUp).Row + 1
        Cells(i, 3).Select
        Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

End sub


Hier sagt er mir aber direkt, das er anstatt End sub ein End with erwartet....tausche ich das aus, sagt er mir er will ein End sub :(

Wie kann ich die Tabellen jetzt richtig ansprechen? Da ich ja immer Dateien von der Quelle in das testbuch kopieren möchte muss ich ihm ja sagen, aus welcher Datei er kopieren soll und in welche es rein soll....

Ich hoffe auf eure Unterstützung und wünsche schon mal ein schönes WE!!!

Gruß

Torben
Antworten Top
#7
Hallo Torben,

(15.02.2019, 11:11)Newby81 schrieb: Wenn ich es richtig verstanden habe, habe ich ihm jetzt gesagt, das quelle immer das aktive workbook ist
nicht immer das aktive Workbook, sondern das momentan aktive Workbook

(15.02.2019, 11:11)Newby81 schrieb: und WS1 die 
Arbeitsmappe1 der quelle
WS1 ist ein Worksheet (Tabellenblatt) von quelle

(15.02.2019, 11:11)Newby81 schrieb: WS2 ist die erste tabelle des testbuches....?
nur, wenn Tabelle1 zufällig das erste Worksheet (Tabellenblatt) ist

(15.02.2019, 11:11)Newby81 schrieb: Hier sagt er mir aber direkt, das er anstatt End sub ein End with erwartet....tausche ich das aus, sagt er mir er will ein End sub :(
setze doch einfach mal den Cursor auf ein With  und drücke die Taste F1.

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Newby81
Antworten Top


Gehe zu:


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