[EXCEL][VBA] Zeilen zu einem Bereich hinzufügen

31/05/2010 - 14:27 von Volker Neurath | Report spam
Hallo zusammen,

folgende situation:

ich arbeite an einem Formular, mit dessen Hilfe unsere Aussendienstler
Projektanfragen einreichen sollen.
U.a. ist die angabe eines oder mehrerer Distributoren sowie eines oder
mehrerer Reseller erforderlich.
Da ich deren Anzahl nicht fest vorgeben kann, hatte ich folgende Idee:

vorgegeben ist für beides ein zunàchst nur 2 Zeilen großer Named Range.

Wenn der VB nun einen Distributor erfasst und dann einen Button klickt
(UserForm); dann:

- prüft Excel, ob in diesem Named Range schon etwas steht.
- falls ja, wird die letzte leere Zeile ermittelt und eine weitere
Zeile eingefügt - in diese wird dann der im Userform erfasste
Distributor eingetragen

- wenn nicht, wird der Distributor in die Erste Zelle des leeren
Bereiches eingetragen

Fragen:
1. wie stell ich das an?
2. bessere Ideen?

Named Range ist in diesem Fall der Bereich B24:B25
Für den Bereich B28:B29 habe ich dasselbe mit Resellern vor.

Für Beide Bereiche gilt: in den korrespondierenden Zellen der Spalte C
soll jeweils der Ansprechpartner stehen; Bereich C24:C25 nimmt also die
Ansprechpartner der Distributoren, C28:C29 die der Reseller auf.

Volker

Wenn es vom Himmel Zitronen regnet -- lerne, Limonade zu machen.
 

Lesen sie die antworten

#1 Andreas Killer
31/05/2010 - 17:54 | Warnen spam
Volker Neurath schrieb:

vorgegeben ist für beides ein zunàchst nur 2 Zeilen großer Named Range.


...
- prüft Excel, ob in diesem Named Range schon etwas steht.
- falls ja, wird die letzte leere Zeile ermittelt und eine weitere
Zeile eingefügt - in diese wird dann der im Userform erfasste
Distributor eingetragen

- wenn nicht, wird der Distributor in die Erste Zelle des leeren
Bereiches eingetragen


Das kann man machen. Ein wenig aufwendig wird es wenn man an den
Named-Range ein Zeile anfügen will, aber durchaus machbar.

Dieser wird leider nur dann von Excel automatisch erweitert wenn man
eine Zeile innerhalb des Bereiches einfügt, will man davor oder
dahinter etwas anfügen muss man den Namen manipulieren.

Fragen:


Also zunàchst solltest Du wissen das ein zugewiesener Range
Set R = Range("Name")
oder
Set R = Range("B24:D90")
immer wie ein 2dimensionales Array behandelt wird und die linke obere
Zelle ist immer
R(1, 1)
und die rechte untere immer
R(R.Rows.Count, R.Columns.Count)
völlig egal wo sich R befindet und wie groß es ist.

Mach Dir mal ein leeres Blatt, setzte den Namen "Distributor" auf eine
oder mehrere zusammenhàngende Zelle(n) und teste das angehàngte Makro.

Andreas.

Sub Test()
Dim R As Range, C As Range
Dim I As Long, BereichName As String
Dim Nr As Integer 'Nur zum Test

BereichName = "Distributor"

'Bereich holen
On Error Resume Next
Set R = Range(BereichName)
On Error GoTo 0

'Ist er da?
If R Is Nothing Then
MsgBox "Kein Bereich " & BereichName
Exit Sub
End If

'Durchlaufe alle Zeilen
For I = 1 To R.Rows.Count
'Zelle leer?
If IsEmpty(R(I, 1)) Then
'Ja, dann diese auswàhlen
Set C = R(I, 1)
Nr = I 'Nur zum Test
Exit For
End If
Next

'Wenn keine leere Zelle gefunden
If C Is Nothing Then
'Zeile hinter dem Named-Range einfügen
R(R.Rows.Count + 1, 1).Insert Shift:=xlDown
'Bereich vergrößern
Set R = R.Resize(R.Rows.Count + 1, 1)
'Den Bereich des Named-Range auch erweitern
Names(BereichName).RefersTo = "=" & R.Address
'Die letzte (leere) Zelle verwenden
Set C = R(R.Rows.Count, 1)
Nr = R.Rows.Count 'Nur zum Test
End If

C = "Eintrag " & Nr
C.Offset(0, 1) = "Partner " & Nr
End Sub

Ähnliche fragen