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
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
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)
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
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)
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)
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
Top
#8
Hallo zusammen,

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

Besten Dank schonmal!
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)
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)
Top


Gehe zu:


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