Autor Thema: Excel-VBA: Logik-Problem  (Gelesen 3112 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Excel-VBA: Logik-Problem
« am: 04.05.04 - 20:09:08 »
Hi,

ich habe in Excel-VBA ein kleines Logikproblem. Habe da folgende Function:

Code
Public Sub MoveColumn(iQuelle As Integer, iZiel As Integer, strTitle As String)

    If iQuelle < iZiel Then 'Spalte wird um mindestens 1 Zelle nach rechts verschoben
        Columns(iZiel + 1).Select
        Selection.EntireColumn.Insert
        Columns(iQuelle).Cut (Columns(iZiel + 1))
        If Not strTitle = "" Then Cells(1, iZiel + 1).Value = strTitle
        Columns(iQuelle).Delete
    End If

    If iQuelle > iZiel Then 'Spalte wird um mind. 1 Zelle nach links verschoben
        Columns(iZiel).Select
        Selection.EntireColumn.Insert
        Columns(iQuelle + 1).Cut (Columns(iZiel))
        If Not strTitle = "" Then Cells(1, iZiel).Value = strTitle
        Columns(iQuelle + 1).Delete
    End If

    If iQuelle = iZiel Then
        If Not strTitle = "" Then Cells(1, iZiel).Value = strTitle
    End If

    Cells(1, 1).Select
    
End Sub

Die Sub rufe ich auf mit:
Code
    iColAusgang = 3
    iColZiel = 6
    Call MoveColumn(iColAusgang, iColZiel, "3auf6")

Was passiert:
Excel geht zur Spalte 6, fügt eine neue Spalte ein (also zwischen Spalte 5 und 6), und verschiebt die Spalte 3 zur neu eigefügten Spalte 6 und löscht zum Schluss die leere Spalte 3.

Das klappt auch alles fein.

Nun möchte ich aber weitere Calls der Sub machen, also danach z.B. Spalte 37 in Spalte 3 verschieben, dann Spalte 4 zu Spalte 10 etc.

Nur habe ich ja im ersten "Call MoveColumn(iColAusgang, iColZiel, "3auf6")" die Spalte 3 verschoben, d.h. in der 3. Spalte (C) steht nun die 4.Spalte (D). D.h. ein Aufruf
Code
   iColAusgang = 4
    iColZiel = 10
    Call MoveColumn(iColAusgang, iColZiel, "3auf10")
klappt so nicht mehr, weil nun ein anderer Bezug vorliegt.

Wie kann ich intelligenterweise diese Spaltenverschiebung mitschreiben (Zähler erhöhen/verringern z.B.) und dies dann in die Public Sub einfliessen lassen?

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Excel-VBA: Logik-Problem
« Antwort #1 am: 04.05.04 - 20:23:07 »
Wie wäre es, wenn Du statt absoluter Adressen Bereichsnamen verwendest? Die sollten das leisten, da sie sich bei solchen Umstellaktionen in der Regel mitbewegen (wenn sie nicht gerade selber von einer Löschung betroffen werden).
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Excel-VBA: Logik-Problem
« Antwort #2 am: 04.05.04 - 20:30:06 »
also ich würde bevor ich irgendwas verschiebe erst die komplette Reihenfolge ermitteln und dann loslegen. Dann sollte das problemlos machbar sein.

Außerdem würde ich mit nem Range-Objekt arbeiten, um die Verschiebeaktionen durchzuführen, dann verliert der Benutzer nicht ungewollt seinen Inhalt im Clipboard.
Aber das ist Geschmackssache.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Excel-VBA: Logik-Problem
« Antwort #3 am: 04.05.04 - 20:32:58 »
Wie wäre es, wenn Du statt absoluter Adressen Bereichsnamen verwendest? Die sollten das leisten, da sie sich bei solchen Umstellaktionen in der Regel mitbewegen (wenn sie nicht gerade selber von einer Löschung betroffen werden).
Da habe ich auch schon dran gedacht. Wenn man "normal" direkt ohne VBA Zellen kopiert, einfügt etc. werden diese Bezüge ja entsprechend in anderen Formeln mitgezogen (wenn nicht die $ verwendet werden also $A$3 z.B.).

Aber: Im VBA-Code steht diese A1 - Schreibweise doch fix drin? Oder gibt es da in VBA eine Möglichkeit?

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Excel-VBA: Logik-Problem
« Antwort #4 am: 04.05.04 - 20:39:56 »
also ich würde bevor ich irgendwas verschiebe erst die komplette Reihenfolge ermitteln und dann loslegen. Dann sollte das problemlos machbar sein.

Wie würdest Du das angehen?

Angenommen ich starte so:

iSpalteQuelle1 = 10
iSpalteZiel1 = 3
iSpalteQuelle2 = 5
iSpalteZiel2 = 8
iSpalteQuelle3 = 15
iSpalteZiel3 = 4
iSpalteQuelle4 = 11
iSpalteZiel4 = 18

Mein Ziel ist es - wenn ich dann mal was ändern muss an der Reihenfolge - dass ich das an einer zentralen Stelle machen kann.....





Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Excel-VBA: Logik-Problem
« Antwort #5 am: 04.05.04 - 20:56:06 »
Das ist nicht was ich meine, hat aber die gleichen Auswirkungen. Gehe mal unter Einfügen - Namen - Erstellen, dort kannst Du beliebige Zellen oder Bereiche(Range) mit Namen versehen. Diese Namen kannst Du dann aus VBA heraus mit einem GoTo ansprechen. Da diese Namen in der Tabelle und nicht im VBA liegen, sind sie genauso dynamisch, wie die Adressierung in den direkten Formeln auch. Im VBA wird das wie Du richtig sagst leider nicht angepasst. Namen und Adressen lassen sich aber gegeneinander austauschen. Ich weiss nur nicht auswendig, über welches Objekt man die Namen ansprechen kann (aber da hilft die VBA-Hilfe weiter).
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Excel-VBA: Logik-Problem
« Antwort #6 am: 04.05.04 - 20:59:14 »
Das ist ein sehr interessanter Tipp, Jens  :)

Ich denke so wird es einfach klappen.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:Excel-VBA: Logik-Problem
« Antwort #7 am: 04.05.04 - 21:05:17 »
[Unwichtiges gelöscht]

Da fällt mir gerade auf, dass das Mapping eigentlich gar nicht nötig ist.
wenn du in deinem Bsp. insg. 20 Spalten hast, dann verschiebst du die

 1. an die 21 Position
 2. an die 22 Position
10. an die 23 Position
15. an die 24 Position
usw.
und löschst danach die ersten 20 Spalten.

kann so auch funktionieren.
« Letzte Änderung: 04.05.04 - 21:07:31 von Thomas Völk »
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Excel-VBA: Logik-Problem
« Antwort #8 am: 04.05.04 - 21:08:11 »
Da fällt mir gerade auf, dass das Mapping eigentlich gar nicht nötig ist.
wenn du in deinem Bsp. insg. 20 Spalten hast, dann verschiebst du die

 1. an die 21 Position
 2. an die 22 Position
10. an die 23 Position
15. an die 24 Position
usw.
und löschst danach die ersten 20 Spalten.

Das ist fast noch interessanter  :)

Danke Thomas und Jens, ich werfe erstmal einen Blick in die VBA-Hilfe zu "Namen" und entscheide mich dann was ich nehme.
Ihr habt mir sehr geholfen.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz