# excel 2010 Listview



## jagga007 (24. Juni 2013)

Hi Leute,

hab ein Problem mit Listview.
Was will ich:
Aus aktuell geöffneter Excel Datei soll eine andere Excel-Datei eingelesen werden. Bestimmte Zellen aller vorhandenen Tabellen in sollen Listview gelistet werden. 
Danach in der Userform durch click auf übernehmen in aktuell geöffnete Datei an die letzte gefüllte Zelle in A+1 springen und das eingelesen in Listview hier anfügen.

In meinem Beispiel hab ich das einlesen geschafft bis auf das die Zellen nicht in der richtigen Spalte des Listview angezeigt werden.

Vieleicht kann mir jemand hier etwas behilflich wäre euch sehr dankbar?



Gruß
jagga007


----------



## Zvoni (24. Juni 2013)

Dein "Fehler ist hier:


```
Set wks = WBo.Worksheets(col(i))
            .ListItems.Add
            .ListItems(.ListItems.Count).SubItems(1) = wks.Range("J1")
            .ListItems(.ListItems.Count).SubItems(2) = wks.Range("B10")
            .ListItems(.ListItems.Count).SubItems(3) = wks.Range("D3")
            .ListItems(.ListItems.Count).SubItems(4) = wks.Range("D4")
```

Korrekt:

```
Set wks = WBo.Worksheets(col(i))
            .ListItems.Add
            .ListItems(.ListItems.Count).Text = wks.Range("J1")
            .ListItems(.ListItems.Count).SubItems(1) = wks.Range("B10")
            .ListItems(.ListItems.Count).SubItems(2) = wks.Range("D3")
            .ListItems(.ListItems.Count).SubItems(3) = wks.Range("D4")
```


----------



## jagga007 (25. Juni 2013)

Hallo Zvoni,

danke zunächst einmal für Deine Hilfe. Bitte sag mir wieso du zu Beginn ".Text" verwendest und bei .SubItem(2) nicht. Ist doch auch Text?

Und kennst du eine möglich, wie man die einzelnen Zellen in Listview editieren kann bevor man die Daten wegschreibt?

Gruß
jagga007


----------



## Zvoni (26. Juni 2013)

Die erste Spalte in einem Listview ist das ListItem selbst, ergo einfach die Text-Eigenschaft.
Alle folgenden Spalten (also ab Spalte 2) sind SubItems beginnend mit 1.
Die haben kein text, weil die SubItems selbst schon als String definiert sind.

In einem Listview kannst du nur die Felder in der ersten Spalte editieren. Willst du die anderen Felder editieren, musst du entweder per separate Textfelder arbeiten, oder ein anderes Grid-Control verwenden


----------



## jagga007 (26. Juni 2013)

Das hab ich nun selbst auch gelesen. Vieleicht kannst du mir ja sagen, was hier am sinnvollsten wäre?

Und wie ich das bewerkstelligen könnte.

Danke für Deine Hilfe. Ohne diese wäre ich aufgeschmissen.


Gruß
jagga007


----------



## Zvoni (27. Juni 2013)

Ich mache solche Sachen immer wie folgt:
Rechts vom Listview (Form verbreitern) ordne ich mir Textfelder mit entsprechender Beschriftung an, sowie auch einen Button "Update" oder so ähnlich (Validierungs-Funktion einbauen!).
Bei Click auf ein Item im Listview (Click-Ereignis) werden die Textfelder per Listview.SelectedItem (oder wie das Ding heisst) gefüllt.
Danach editiere ich die Einträge in den Textfeldern und per Click auf "Update" klopf ich die korrigierten Einträge zurück ins Listview.
Das ist alles (und soweit ich weiss die einfachste Variante). Ich habe schon diverse Lösungen im Internet gefunden, wo die Leute mit dem MSFlexgrid so eine Art Excel nachprogrammiert haben, aber das ist mir für solche Sachen einfach zu viel Aufwand

EDIT: Hier ist mal ein kleines Beispiel wie sowas auch ohne zusätzlichen Update-Button funktionieren kann. (du musst das .txt löschen)
Mappe aufmachen, ALT+F11, die UserForm auswählen, mit F5 starten, einen Eintrag im Listview anclicken, und schau mal was im Listview passiert, wenn du im textfeld einen Eintrag veränderst.

EDIT2: hab was vergessen: Die Änderungen in den Textfeldern werden nur ins Listview übernommen, solange der User wirklich was eintippt. Copy&Paste (STRG+C/STRG+V) funktioniert hier nicht!! Dann brauchst du wirklich einen Update-Button.


----------



## jagga007 (28. Juni 2013)

Tolle Idee.

Wo findet man sowas denn. Ich such mir die Hacken ab und finde nichts dergleichen.

Werd ich wohl auch so machen toller Vorschlag.

Ich hab wie schon erwähnt und auch zu Beginn eine .rar der Inhalt zwei Dateien mit ins Netz gestellt. Die Stundenaufzeichnung13_Forum.xlsm wird geöffnet und links oben einen Button "Tagesberichte übernehmen". Auf diesen geklickt werden aus der TB-2013_Juni für Stundenaufzeichnung13_Forum.xlsm aus allen Tabellenblättern bestimmte Zellen eingelesen und in Listview dargestellt.

Nach dem eventuell korrigiert wurde sollen nun die Zeilen in  Stundenaufzeichnung13_Forum.xlsm an die bereits bestehenden Zeilen angehängt werden.
Die TB-2013.... wird ja eh automatisch geschlossen.

Wie könnte ich denn das umsetzen? Oder wo sind vielleicht Beispiele im Netz?


Gruß
jagga007


----------



## Zvoni (28. Juni 2013)

Ich werds mir heute nochmal anschauen, falls ich dazu komm.


----------



## Zvoni (28. Juni 2013)

So, hab dir mal quick&dirty mal schnell was zusammengebaut. Editieren funktioniert jetzt auch mit Copy&Paste


----------



## jagga007 (30. Juni 2013)

Hi,

ich möchte mich bis jetzt sehr bei die bedanken für die Hilfe alleine hätte noch eine ganze Weile gedauert bis ich dahinter gestiegen wäre.

Ich hoffe das ich die noch ein paar Fragen zu diesem Thema stellen darf

Aber irgendwie hab ich in manchen Zellen von ListView Zahlen mit 0,9999... oder 0,4999... oder 0,2500... obwohl in den Tabellenblättern entweder eiene 1,00 oder 0,5 oder 0,25 steht.

Hast du vielleicht eine erklärung dafür?


Gruß
jagga007


----------



## Zvoni (30. Juni 2013)

Muss die formatierung im quell-excel-blatt sein. Da listview-items strings sind, werden die 1:1 aus der quelle übernommen.


----------



## jagga007 (30. Juni 2013)

Entschuldige die erneute Frage,

in den Quell Excel-Blättern haben die Zellen alle das gleiche Format und zwar Zahl mit zwei Dezimalstellen. Wird dir bestimmt aufgefallen sein als du es getestet hast. Für mich als fast Laie kann ich es nicht nachvollziehen. Da die Zellen ein festes Format haben stellt sich mir doie Frage wo kann ich da ansetzen das es richtig übernommen wird. Denn im gleichen Projekt noch andere Blätter sind bei denen in ListView korrekt eingelesen wird.


Hat keine Eile vieleicht fällt Dir ja noch was ein.


Gruß
jagga007


----------



## Zvoni (1. Juli 2013)

In der Funktion "DatenLesen" ist jetzt die Korrektur drin. Wie ich es mir gedacht hatte. Es gibt einen Unterschied zwischen angezeigtem Format im Excel, und dem was wirklich drin ist. Das kommt meistens bei berechneten Zellen vor. Es gibt glaub ich irgendwo in den Optionen eine Einstellung "Genauigkeit wie angezeigt" oder so ähnlich, womit man das umgehen kann.

Ich hab dir auch die letzten 3 Spalten nach rechts ausgerichtet.


----------

