Microsoft Excel

Herbers Excel/VBA-Archiv

Wie Range Bezug in andere xls Datei

Betrifft: Wie Range Bezug in andere xls Datei von: AStis
Geschrieben am: 18.08.2014 01:09:59

Hallo, vielleich kann mir jemand von euch helfen.

Mit folgendem Code befülle ich eine Datenmaske im Arbeitsblatt "Drucken" und drucke diese entsprechend aus.

Wie kann ich nun diesen Code verändern, um auf eine ander Datei(Namen.xlsx) zugreifen zu können? (Das Tabellenblatt dort lautet 119)

Aus ActiveCell.Value = "=Datenblatt!R[" & z - 1 & "]C[0]" habe ich jetzt mal
ActiveCell.FormulaR1C1 = "='[Namen.xlsx]119'!R[" & z - 1 & "]C[6]" gemacht.

Als Ergebnis bekomme ich aber nun nicht den Zellinhalt aus Namen.xlsx sondern nur die Formel in die Zelle geschrieben... :-(

- So sieht der laufende gesamt Code aus... -

Sub Drucken()

Dim z As Long

For z = 1 To Worksheets("Datenblatt").Range("a65536").End(xlUp).Row

Worksheets("Vorbereitung").Select


    Range("A1").Select 'Vorname
    ActiveCell.Value = "=Datenblatt!R[" & z - 1 & "]C[0]"
    
    Range("b1").Select 'Nachname
    ActiveCell.Value = "=Datenblatt!R[" & z - 1 & "]C[0]"
        
    Range("c1").Select 'Strasse
    ActiveCell.Value = "=Datenblatt!R[" & z - 1 & "]C[1]"
    
    Range("d1").Select 'PLZ
    ActiveCell.Value = "=Datenblatt!R[" & z - 1 & "]C[5]"
    
    Range("e1").Select 'Ort
    ActiveCell.Value = "=Datenblatt!R[" & z - 1 & "]C[9]"


Worksheets("Druckbild").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1

Next z

End Sub
Vielen Dank

  

Betrifft: Das ist ja auch klar, denn du hast ja auch ... von: Luc:-?
Geschrieben am: 18.08.2014 02:13:30

…einen FmlText dem ZellWert (.Value) zugewiesen, AStis;
willst du Werte direkt eintragen (keine FernBezugsFmln), geht das prinzipiell so:
Range("A1") = Workbooks("Namen.xlsx").Sheets("119").Cells(z - 1, 6)
Allerdings ist hier die reale ZellNummerierung (Zeile, Spalte) zu verwenden. Außerdem kannst du dir die Selectiererei sparen und dafür besser alles sauber referenzieren. Für die ZielZelle kannst du auch einen Zyklus verwenden.
Morrn, Luc :-?


  

Betrifft: AW: Das ist ja auch klar, denn du hast ja auch ... von: astis
Geschrieben am: 18.08.2014 06:27:47

Hallo und besten Dank für die Hilfe. Ich werde das gleich mal probieren. Allerdings verstehe ich nicht richtig wieso es innerhalb der einen tabelle geklappt hat dann nicht mehr funzt sobald ich mich auf eine andere datei beziehe. Vermutlich fehlt mir noch einiges an Grundwissen.


  

Betrifft: Formel oder Wert, andere Mappe von: Erich G.
Geschrieben am: 18.08.2014 08:43:51

Hi,
einige Bemerkungen/Fragen:

a)
Was soll eigentlich nachher in den Zielzeilen stehen?
Sollen da Formeln stehen (deren Werte sich später ändern können, wenn sich Quelldaten ändern)?
Oder sollen feste Werte in den Zielzellen geschrieben werden?

b)
Oben im Text deines Beitrags schreibst du "ActiveCell.FormulaR1C1",
im Code verwendest du weiter nur "ActiveCell.Value".
Warum?

c)
"Als Ergebnis bekomme ich aber nun nicht den Zellinhalt aus Namen.xlsx sondern nur die Formel in die Zelle geschrieben."
Die Ursache kann sein, dass die Zielzellen das Zahlenformat "Text" ("@") haben.
Dann wird eine Formel nicht als Text erkannt, sondern als irgend ein Text in die Zelle geschrieben.
Ist per Hand genauso.

d)
Statt
Range("A1").Select
ActiveCell.Value = ...
ist sicherer, kürzer, übersichtlicher, besser...:
Range("A1").Value = ...

Zum Spielen auf einem neuen Tabellenblatt:

Option Explicit

Sub Formeltext()           ' In [Namen.xlsx]119!B2 sollte ein Wert stehen.
   Dim z As Long
   z = 1
   Cells(2, 1).FormulaR1C1 = "='[Namen.xlsx]119'!R[" & z - 1 & "]C[1]"
   Cells(3, 1).FormulaR1C1 = "='[Namen.xlsx]119'!R[-1]C[1]"
   Cells(4, 1).Value = "='[Namen.xlsx]119'!R[-2]C[1]"    ' nicht zu empfehlen
   Cells(5, 1).FormulaR1C1 = "='[Namen.xlsx]119'!R2C2"
   
   Cells(5, 2) = Workbooks("Namen.xlsx").Sheets("119").Cells(2, 2) ' keine Formel
   
   Rows(8).NumberFormat = "@"
   Cells(8, 1).Value = "='[Namen.xlsx]119'!R2C2"         ' nicht zu empfehlen
   Cells(8, 2).FormulaR1C1 = "='[Namen.xlsx]119'!R2C2"
   
   Rows(9).NumberFormat = "General"
   Cells(9, 1).Value = "='[Namen.xlsx]119'!R2C2"         ' nicht zu empfehlen
   Cells(9, 2).FormulaR1C1 = "='[Namen.xlsx]119'!R2C2"

   Cells(11, 1).Value = 17 + 4
   Cells(12, 1).Value = "=17+4"                    ' eine Formel als Value...
End Sub
@Luc:
Auch mit .Value kann man eine Formel in eine Zelle schreiben. Schrecklich, aber es geht!

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: Das weiß ich, Erich, sie wird nur nicht immer ... von: Luc:-?
Geschrieben am: 18.08.2014 15:53:48

…sofort wirksam und ggf als einfacher Text behandelt, was unter den von dir genannten Bedingungen aber auch passiert, wenn man sie in .Formula[R1C1] schreibt, denn auch hier kann man Werte eintragen, was dann weniger „schrecklich“ als mitunter sinnvoll ist. ;-)
Gruß, Luc :-?


  

Betrifft: AW: Formel oder Wert, andere Mappe von: Astis
Geschrieben am: 19.08.2014 22:17:20

a)
also wie gesagt ich habe eine "Quelldatei" in der Kundennamen, Adressen etc. stehen.
Diese sollen von prinzip einfach nur übertragen werden. Es kann sein dass in einer
anderen Quelldatei mal die selben Daten (Name, Anschrift etc.) in einer anderen Spalte stehen.

b)
hmmm keine Ahnung warum ich das so schreibe... ich lerne VBA Quasi aus dem was mir der Makrorecorder
ausspuckt und reime mir dann so bissel was zusammen. Klingt sicherlich schrecklich, ist aber leider so :-(

c)das mit dem Format ist mir auch aufgefallen, irgendwie steht tatsächlich immer Text als Format,
auch wenn ich es vorher auf "Standart" formatiere. Nach Programmdurchlauf eben wieder Text... ???

d)
Statt
Range("A1").Select
ActiveCell.Value = ...
ist sicherer, kürzer, übersichtlicher, besser...:
Range("A1").Value =

Hmmm ja klingt logisch... scheinbar heisst Programmiersprache Programmiersprache weil man ein und das selbe in unterschiedlicher Weise sagen kann? Mein VBA Wissen reicht sichlich nicht mal aus mir damit ien Bier zu bestellen... :-(


 

Beiträge aus den Excel-Beispielen zum Thema "Wie Range Bezug in andere xls Datei"