Möglich mit MS Excel?

msycho

Erfahrenes Mitglied
Hallo!

Folgende Idee:
Ich habe eine Excel-Datei mit zwei Sheets.
In dem einen Sheet habe ich eine Liste von Namen.
In dem anderen Sheet nichts.
Wähle ich jetzt einen oder mehrere Namen aus, so sollen diese in dem leeren Sheet angezeigt werden.

Ist das möglich? Wenn ja, wie kann ich das umsetzen, bitte? (Ich will keineswegs eine komplette Lösung, aber vielleicht wäre ja ein Denkanstoß drin)
 
Meinst du mit auswählen - markieren - ?

Dann könntest du die Eigenschaften von Select abfragen - hier sollte ein Range vorgehalten werden, welches auf die markierten Zellen zeigt - dann noch die Values aus diesen Zellen auslesen und anzeigen ....

Dirk
 
Okay - dann doch etwas anders :)

mit
Visual Basic:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
kannste die aktuelle Selection abfragen!

Target enhält ein Range mit deinen markierten Zellen - wenn's nur eine ist, dann den wert auslesen, in deinem Namens-sheet prüfen, ob es den Namen schon gibt, sonst eintragen, am Ende. Bei mehreren Zellen halt für jede die gleiche Prozedur ....


Besser?

Dirk
 
Ich versteh echt null. oO

Das ist VisualBasic, was?

Es gibt nicht irgendwo ein Tutorial, dass sich mit meinem Anliegen beschäftigt, oder? Weil so komm ich glaube ich nicht weit. :)
 
Jo - das ist VisualBasic !

Wenn du allerdings hier nicht so heimisch bist .. mhh, dann wird das ganze schwer. Also nur mit Excel - 'Bordmitteln' wüsste ich keine Lösung.

Allerdings ist VBA recht simpel und durch den integrierten (Extras -> Makro -> ) VBA-Editor auch einfach zu handhaben.

1) im Project-Explorer suchste einer der dort benannte Tabellen (sheets) raus - und klickst die doppelt an

2) im neue erscheinenden Fenster schreibste
Visual Basic:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
rein und drückst enter

3) dann sollte ein end sub hinzugekommen sein

4) dazwischen ein msgbox "hallo world" und schon ist dein erstes VBA fertig.

-> Ändere mal die Markierung im ausgewählten sheet (pkt 1) - und schon sollte ne meldung aufpoppen

VORSICHT - kann sein, dass obiges script nicht ordentlich beendet werde kann, weil immer meldungen kommen ...

Dirk
 
Ha, das klappt schonmal.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim text, titel, showBox
text = "Hallo Welt!"
titel = "test"
showBox = MsgBox(text, , titel)
End Sub

Jetzt erscheint bei jeder Zelle, die ich anklicke, die Meldung "Hallo Welt!".

Das ist schonmal ein Anfang. Danke!

Nur wie krieg ich die Auswahl, also das was ich anklicke, jetzt in das andere Sheet? :(

/EDIT: Ich hab mich nochmal etwas versucht. Das mit dem kopieren bringt allerdings ein Laufzeitfehler 1004.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim text, titel, answer, text1
text = "willst du es rüber haben?"
titel = "test"

If ActiveCell <> "" Then
    answer = MsgBox(text, vbYesNoCancel, titel)
End If

If answer = vbYes Then
    Copy (Tabelle2.Cells(1, A))
End If

End Sub

/EDIT2: So, jetzt kopiert er das ausgewählte rüber in Tabelle2.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim text, titel, answer, text1
text = "willst du es rüber haben?"
titel = "test"

If ActiveCell <> "" Then
    answer = MsgBox(text, vbYesNoCancel, titel)
End If

If answer = vbYes Then
     Selection.Copy
     Tabelle2.Paste
End If

End Sub

Jetzt muss das aber noch mit der Reihenfolge hinhauen.
So soll z.B. die erste Auswahl in Zeile 5 kopiert werden. Das nächste dann in Zeile 6 usw. Kannst Du mir da helfen, bitte?
 
Zuletzt bearbeitet:
Okay - war WE, deswegen der kleine timelag ;)

Und hier mein Vorschlag:
Visual Basic:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim text As String, _
    titel As String, _
    answer As String, _
    text1 As String
Dim src As Worksheet, _
    des As Worksheet
Dim lastRow As Integer
    
Set src = Sheets("Tabelle1")
Set des = Sheets("Tabelle2")

text = "willst du es rüber haben?"
titel = "test"

If ActiveCell <> "" Then
    answer = MsgBox(text, vbYesNoCancel, titel)
End If

If answer = vbYes Then
    Selection.Copy
    des.Activate
    If des.Cells(1, 1).Value = "" Then
      lastRow = 0
    Else
      lastRow = des.Cells(1, 1).End(xlDown).Row
    End If
    des.Cells(lastRow + 1, 1).Select
    des.Paste
    
    src.Activate
    
End If

End Sub

Allerdings würde ich dir empfehlen, den Wert aus dem Parameter Target statt ActiveCell zu nehmen. Hier solltest du auch die Eigenschaft rows abfragen, falls mehr als eine Zelle markiert wurde. Und weiterhin nimm immer .value um die Werte abzufragen - bei Formeln funktioniert der ferkürzte Aufruf sonst nicht so reibungslos ...

So - probiers mal

Dirk
 
Vielen Dank schonmal.

In dieser Zeile kommt es zu einem Überlaufsfehler:

Code:
lastRow = des.Cells(1, 1).End(xlDown).Row

Ist in der destination kein Inhalt, wird lastRow ja auf 0 gesetzt. Später wird der Inhalt dann in die Zelle 0+1,1 eingefügt.
Kommt jetzt ein weiterer Inhalt dazu, sind wir im else-Konstrukt, dort wo es zu dem Fehler kommt.

Ich kann leider mit End(xlDown) nichts anfangen und habe auch nichts gefunden. Eine Idee wie ich den Fehler beheben kann?
 
ups - so ises, wenn man das nicht testet - sorry!

Ergänze mal im dem if - else - block noch einen else-zweig
Visual Basic:
If des.Cells(1, 1).Value = "" Then
lastRow = 0
ElseIf des.Cells(2, 1).Value = "" Then
lastRow = 1
Else
lastRow = des.Cells(1, 1).End(xlDown).Row
End If

Sieht zwar bissel komisch aus, aber so sollte es gehen!

Dirk
 
Zurück