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.

VBA | Ergänzung von Zelleneigenschaft (Format)
#1
Hallo zusammen,

ich habe mal eine Frage bzgl. eines Formatübertrags. Ich habe folgende Formel die auch soweit funktioniert (siehe unten). Diese sorgt dafür das in einem Ordner alle vorhandenen Exceltabellen in eine Tabelle übertragen werden (ausgewählte Zellen -> .Cells(ZeileZ, 1) = wksQuelle.Cells(1, 2).Value). Es werden jedoch die Zellen ohne Formatierung übernommen (z.B. nicht die Farbe, oder wenn der text durchgestrichen wurde.) Ich habe zwar schnipsel für formatübertragung gefunden, bin aber irgendwie zu ungeschickt dieses hier anzuwenden. 

Kann mir diesbezüglich jemand Hilfestellung geben damit die Zellen 1:1 mit Formatierung übernommen werden?

BESTEN DANK im Voraus!
Code:
Sub ordner_auslesen()
  Dim sVerzeichnis$, sDatei$
  Dim wbZiel As Workbook, wbQuelle As Workbook
  Dim wksZiel As Worksheet, wksQuelle As Worksheet
  Dim ZeileZ&, FileCount&
  Dim Zelle As Range
  Const StartZelle$ = "A1" '1. Auszulesende Zelle in Tabelle 1
  Const Schritt& = 3 'Spaltenabstand der auszulesenden Zellen
 
  On Error GoTo Fehler
  'Suchverzeichnis auswahlen
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Bitte Ordner mit zu durchsuchenden Dateien wählen"
    .ButtonName = "Auswälen"
    If .Show = -1 Then
      sVerzeichnis = .SelectedItems(1)
      sDatei = Dir(sVerzeichnis & Application.PathSeparator & "*.xl*")
      If sDatei <> "" Then
        'neue Datei mit einem Tabellenblatt für Ergebnisdaten erstellen
        Set wbZiel = Workbooks.Add(Template:=xlWBATWorksheet)
        'Zieltabellenblatt Objektvariable zuweisen
        Set wksZiel = wbZiel.Worksheets(1)
        ZeileZ = 1
        With wksZiel
          'Titelzeile ausfüllen
          .Cells(ZeileZ, 1) = "überschrift 1"
          .Cells(ZeileZ, 2) = " überschrift 2"
          .Cells(ZeileZ, 3) = "Überschrift 3"
        End With
      End If
      Application.ScreenUpdating = False
      Do Until sDatei = ""
        FileCount = FileCount + 1
        Application.StatusBar = "Datei, laufende Nr. " & FileCount & " wird bearbeitet."
        'Quelldatei schreibgeschützt öffnen
        Set wbQuelle = Workbooks.Open( _
          Filename:=sVerzeichnis & Application.PathSeparator & sDatei, _
          ReadOnly:=True)
                Application.AskToUpdateLinks = False
        'Tabelle1 Objektvariable zuweisen
        Set wksQuelle = wbQuelle.Worksheets(1)
        'Werte aus Blatt 1 auslesen
        Set Zelle = wksQuelle.Range(StartZelle)
        Do Until IsEmpty(Zelle)
          If Zelle.Value <> 0 Then
            ZeileZ = ZeileZ + 1
            With wksZiel
              'ebene3
              .Cells(ZeileZ, 1) = wksQuelle.Cells(1, 2).Value
              'ebene 4
              .Cells(ZeileZ, 2) = wksQuelle.Cells(2, 2).Value
              'kürzel
              .Cells(ZeileZ, 3) = wksQuelle.Cells(3, 2).Value
            End With
          End If
          'Nächste Zelle setzen
          Set Zelle = Zelle.Offset(0, Schritt)
        Loop
        wbQuelle.Close savechanges:=False
        Set wksQuelle = Nothing
        Set wbQuelle = Nothing
        sDatei = Dir
      Loop
      Application.ScreenUpdating = True
      MsgBox "Alle Dateien ausgelesen"
    End If
  End With
Fehler:
  With Err
    Select Case .Number
      Case 0 'alles OK
      Case Else
        Application.ScreenUpdating = True
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
        If Not wbQuelle Is Nothing Then wbQuelle.Close savechanges:=False
    End Select
  End With
  Set wbZiel = Nothing
  Set wbQuelle = Nothing
  Application.StatusBar = False
  Application.AskToUpdateLinks = False
End Sub
Antworten Top
#2
Hallo Ronn,

jetzt sollen wir zum Test usw. aus dem Quelltext deine Datei rekonstruieren?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Hallöchen,

so

Code:
With wksZiel
              'ebene3
              .Cells(ZeileZ, 1) = wksQuelle.Cells(1, 2).Value

übernimmst Du, wie die Übersetzung ins deutsche auch ergibt, den Wert einer Zelle.

Willst DU die Formate übertragen, musst Du selbige entweder auslesen und setzen, oder Du kopierst die Zelle und fügst hinterher die Formate ein. Einen beispielhaften Code dazu kannst Du ggf. aufzeichnen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Hallo,

danke für deine Rückmeldung. Nein natürlich nicht. :) Ich gehe in meiner Naivität davon aus, dass an irgendeiner Stelle ein "Anhängsel" rangebracht werden muss, was dafür sorgt, dass die Formatierung übernommen wird. Ich bin überhautp nicht stark in VBA. Daher lasse ich mich auch gerne eines besseren belehren. :)

Viele Grüße
Antworten Top
#5
im Prinzip dann jeweils zweizeilig was in der Art:

wksQuelle.Cells(1, 2).Copy
.Cells(ZeileZ, 1).PasteSpecial Paste:=xlformats


(aber dabei die Datenübernahme nicht vergessen Smile bzw. drin lassen)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Moin!
Wobei die PasteSpecial-Methode ja auch den benannten Parameter Paste:=xlPasteAll kennt.
(und All hat nix mit dem Universum zu tun)
Wink

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
Hallo Ralf,


Zitat:(und All hat nix mit dem Universum zu tun)


nicht???
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#8
Hallo zusammen,

danke für die Antworten.Ich probiere es nachher aus und gebe wieder Rückmeldung :)

Besten Dank schonmal!
Antworten Top
#9
Hallöchen,

Zitat:Paste:=xlPasteAll

da wünsch ich Dir recht viele Formeln im Quellbereich Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Mir?  19
An den TE:
Suche Dir das entsprechende aus:
xlPasteType-Enumeration
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


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