Thema Datum  Von Nutzer Rating
Antwort
Rot Umgang mit Worksheet, Subs in Schleifen
12.01.2016 16:52:39 PeterPan
NotSolved
12.01.2016 17:10:21 Gast40901
NotSolved
13.01.2016 11:05:57 Gast60079
NotSolved
13.01.2016 11:24:11 PeterPan
Solved
13.01.2016 19:20:32 Alex
NotSolved
13.01.2016 19:43:52 Gast52722
NotSolved

Ansicht des Beitrags:
Von:
PeterPan
Datum:
12.01.2016 16:52:39
Views:
1286
Rating: Antwort:
  Ja
Thema:
Umgang mit Worksheet, Subs in Schleifen

Hi Forum.

Mit einem Makro gehe ich eine sehr große Exceltabelle durch. Es wird ein Worddokument erstellt, in welches für jede Zeile der Tabelle abhängig vom Inhalt Einträge gemacht werden. Da ich das Makro vor etwa 2 Jahren geschrieben habe, ist es ein ziemlicher spaghetti copy and paste code geworden.

Beispielzeilen aus dem Code:

... Overhead...  Year = 3 ...  Volume = 13 ...
With ThisWorkbook.Sheets(1)
    For Each rngRow In .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp))                
        If .Cells(rngRow.row, Year) = strJahr Then
            ...
            ...
            If .Cells(rngRow.row, Volume) <> "" Then
                objWord.writeline ("volume = {" & .Cells(rngRow.row, Volume) & "},")
            End If
            ...
            ...
        End If
    Next rngRow
End With
...

Dies wollte ich jetzt ändern und die ewig langen Funktionen splitten. Dafür möchte ich die "writeline-Operationen"(es sind viele xD.. insbesondere insbesondere tauchen ähnliche zeilen häufig auf) in eine externe (public)Sub schreiben. (So als Nebenfrage: Ich habe dafür Module genommen. Ist das ok oder müssen es Class Module sein?)

Nun zum Problem:

Wenn ich das verwendette Sheet und die entsprechende Zeilenzahl an eine Sub übergebe (call doSomething(ThisWorkbook.Sheets(1), rngRow.row, objWord) um dort dann in der entsprechenden Zeile des entsprechenden Sheet Lesevorgänge zu starten, bekomme ich einen runtime error 1004.

Warum dieser kommt ist mir klar.

Aber wie kann ich das umgehen? Mein erster gedanke war, die Zeilenzahl zu nehmen in der Hauptfunktion eine Schleife drüber zu legen und das eigentliche Sheet erst in den Subs zu starten und beenden. Aber ich muss ja erst den Wert in der Spalte für das Jahr überprüfen. Soll ich das auch in eine seperate Funktion packen in der das Worksheet geöffnet und wieder geschlossen wird?

Ist das so ein guter Ansatz oder gibt es bessere herangehensweisen? bzw. ist das so denn performant? Es handeln sich um Tabellen die über 500 Zeilen haben können.

 

Danke schonmal im Voraus für die Hilfe und investierte Zeit.

Grüße.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Umgang mit Worksheet, Subs in Schleifen
12.01.2016 16:52:39 PeterPan
NotSolved
12.01.2016 17:10:21 Gast40901
NotSolved
13.01.2016 11:05:57 Gast60079
NotSolved
13.01.2016 11:24:11 PeterPan
Solved
13.01.2016 19:20:32 Alex
NotSolved
13.01.2016 19:43:52 Gast52722
NotSolved