SoftMaker.de

Deutschsprachiges Diskussionsforum
Aktuelle Zeit: 20.06.2013 03:22:03

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 23.03.2011 14:04:32 
Offline

Registriert: 23.03.2011 13:34:06
Beiträge: 8
Hallo,
habe seit Neuestem SM 2010, und bin grad ein wenig hilflos am Anfang:
Ich habe zwei parallel geöffnete Workbooks: einmal eine erste Tabelle mit 5 Sheets, einmal eine zweite Tabelle mit importierten CSV-Daten.

Nun suche ich eine Möglichkeit, in der zweiten Tabelle nach Texten zu suchen (welche in diesem Fall den Sheet-Namen der ersten Tabelle entsprechen), um dann die Zeilennummer der gefundenen Stelle zurückzubekommen.
Ab dieser Zeile sollen dann meherer Zeilen aus der zweiten in die erste Tabelle kopiert werden.

Wie wäre das möglich? Ich finde keine Suchfunktion. Müsst ich in der zweiten Tabelle jede Zelle durchlaufen, und per InStr() nach dem Text suchen?

Bin um jede Info dankbar.
Dan


Nach oben
 Profil  
 
BeitragVerfasst: 23.03.2011 16:56:39 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 990
Zitat:
Ab dieser Zeile sollen dann meherer Zeilen aus der zweiten in die erste Tabelle kopiert werden
Das geht über den "Umweg" Zwischenablage, kannst du nachlesen bei "Range -> Copy. Je nach Anwendung, könnte man auch die Zelleninhalte in Variablen einlesen, dann Tabelle wechseln und dann in die anderen Zellen schreiben.

Zitat:
Ich finde keine Suchfunktion. Müsst ich in der zweiten Tabelle jede Zelle durchlaufen, und per InStr() nach dem Text suchen
Ja, eine Funktion oder Methode "SEARCH" existiert leider nicht. Vermute auch mal, die würde auch nichts anderes machen.


Nach oben
 Profil  
 
BeitragVerfasst: 24.03.2011 08:20:37 
Offline

Registriert: 23.03.2011 13:34:06
Beiträge: 8
@dewes:
Vielen Dank. Copy funktioniert, nur das "durchschreiten" der Zellen und Suche nach einer Zeichenkette (in meinem Fall StrComp) ist extrem träge.


Nach oben
 Profil  
 
BeitragVerfasst: 24.03.2011 11:09:10 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 990
Wenn du möchtest, kannst du ja mal den Codeschnipsel hier einstellen. Vielleicht lässt sich noch was optimieren.

Wie gross ist denn die Tabelle bzw. der Bereich der durchsucht wird?


Nach oben
 Profil  
 
BeitragVerfasst: 24.03.2011 14:22:14 
Offline

Registriert: 23.03.2011 13:34:06
Beiträge: 8
Hi,

hier ein Codeschnipsel:

Code:
for iRows = 1 to 900    ' Aktuell 900 Zeilen zu durchsuchen
Dim sTmp
sTmp = Trim(pm.Application.Workbooks(2).Sheets(1).Cells.Item(iRows, 2).Value)
if (InStr(sTmp, sName) <> 0) then
iFoundRow = iRows
[...]


900 Zeilen, die durchwandert werden (und das jeweils pro sheet). Ich suche nun mit InStr(), das scheint schneller zu gehen als StrComp(). Dauert zwar immer noch ne Zeit, aber wesentlich schneller. Jetzt bräuchte ich nur noch ne Funktion, die mir Anzeigt, dass das Script gerade arbeitet... (sowas wie ne Eieruhr, oder ein Fortschrittsbalken...)


Nach oben
 Profil  
 
BeitragVerfasst: 24.03.2011 15:27:42 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 990
das Statement
Code:
Dim sTmp
würde ich oberhalb der For-Schleife einfügen. BM ist eine Interpretersprache, d.h. jede Zeile wird bei jedem Durchlauf neu interpretiert, bevor sie ausgeführt wird.

Die Funktion InStr hat drei Parameter "Start, String, Suchstring", bei dir
Code:
if (InStr(sTmp, sName) <> 0) then
fehlt "Start", erstaunlich, dass es trotzdem läuft.

Eieruhr oder Fortschrittsbalken sind nicht möglich, du könntest evtl. am Ende des Durchlaufs eine Messagebox ausgeben oder aber über eine Dialogbox die gerade bearbeite Zeile ausgeben, aber ob sich dieser Aufwand lohnt und das Script wird natürlich noch langsamer.


Nach oben
 Profil  
 
BeitragVerfasst: 24.03.2011 16:34:03 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 06.02.2007 14:01:47
Beiträge: 990
Ergänzung:

bei dem DIM-Statement würd ich noch "as String" anfügen, bringt vielleicht auch einige Millisekunden pro Durchlauf, wenn die Variable nicht als Variant-Variable deklariert ist.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de