Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Excel - DropDown-Menü in einer Zelle erzeugen (https://www.delphipraxis.net/182769-excel-dropdown-menue-einer-zelle-erzeugen.html)

Nimmersatt 17. Nov 2014 11:38

Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo,

Wie kann ich über Delphi ein Dropdownmenü in Excel in einer Zelle erzeugen ?

cells[x,y].dropdown ???


Und wie kann ich dieses Menü dann mit Inhalt füllen ?




mfg Nimmersatt

mkinzler 17. Nov 2014 11:39

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Genauso wie aus VBA, da die (COM-)Automatisierung die selbe Schnittstelle verwendet.

Headbucket 17. Nov 2014 11:52

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hier die vorgehensweise mit VBA:
Code:
Dim MyList(5) As String
MyList(0) = 1
MyList(1) = 2
MyList(2) = 3
MyList(3) = 4
MyList(4) = 5
MyList(5) = 6

With Range("A1").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
         Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With
http://msdn.microsoft.com/de-de/libr...ice.15%29.aspx

Das ganze musst du dann natürlich über die Automatisierungsschnittstelle realisieren aber das sollte ja möglich sein, oder?

Grüße
Headbucket

Nimmersatt 17. Nov 2014 13:43

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo Headbucket,

Zitat:


With Range("A1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:=Join(MyList, ",")
End With


Könntest du das in Delphi übersetzen ?


Eine andere Variante

http://www.office-loesung.de/ftopic318697_0_0_asc.php


Erklärung:

Der Input für das DropDown ist im "Tabelle1" R2C1 bis R4C1
Der Vergebene Namen heißt "EOL"
Code:

Zitat:

Range("A2:A4").Select
ActiveWorkbook.Names.Add Name:="EOL", RefersToR1C1:="=Tabelle1 R2C1:R4C1"
ActiveWorkbook.Names("EOL").Comment = ""


Da wäre auch eine Übersetzung in Delphi hilfreich.
Zur Info, ich arbeite mit Delphi 4 und Excel 2007.



mfg Nimmersatt

mkinzler 17. Nov 2014 14:18

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Wie gesagt, verwendet COM/OLE die selbe Schnittstelle
Delphi-Quellcode:
Uses ...,ComObj, ActiveX, ...

...
var
  Excel, WorkBook, WorkSheet, Range: OleVariant;
begin
    try
      Excel := GetActiveOleObject('Excel.Application');
    except
      Excel := CreateOleObject('Excel.Application');
    end;
    WorkBook := Excel.ActiveWorkBook;
    WorkSheet := WorkBook.ActiveSheet;
    Range := WorkSheet.Range['A1:A4'];
    Range.Validation.Delete;
    Range.Validation.Add(3, 1, 1, 'Join(MyList, ",")', null);
...
end;

Nimmersatt 17. Nov 2014 16:17

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo Mkinzler,

Danke !:thumb:

Aber es gibt da noch ein paar Probleme.

In der Excelzelle steht ein Begriff, per Dropdown soll ein mehrzeiliger Text erscheinen, der diesen Begriff erläutert. Es soll keine Auswahl stattfinden !

ich stehe vor 3 Problemen

1) es soll nur der Begriff im Dropdownmenü aktiv bleiben
2) wie bringe ich den mehrzeiligen Text unter ?
3) das DropdwonMenü soll sichtbar sein, wenn eine andere Excelzelle aktiv ist, damit meine ich den Button mit dem Dreieck



mfg Nimmersatt

Jumpy 18. Nov 2014 08:03

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Kann es sein, dass du die Kommentar-Funktion meinst?
Das kleine rote Recheck oben rechts in einer Excel-Zelle, wo so eine Art Sprechblase aufklappt, wenn man darauf klickt?

Nimmersatt 18. Nov 2014 10:26

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo Jumpy,

Ja, das könnte die Kommentarfunktion sein, wo ein nach unten gerichtetes Dreieck enthalten ist.

Mein Problem ist, ich kann kein VBA-Code in Delphi übersetzen, sonst würde ich hier ja nicht nachfragen.


mfg Nimmersatt

baumina 18. Nov 2014 10:35

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Du könntest es uns auch leichter machen, indem du den VBA-Code, den du haben magst, hier postest und wir helfen dir diesen in Delphi umzusetzen.

VBA-Codes kannst du ganz einfach durch Makro-Aufzeichnungen erhalten.

Nimmersatt 18. Nov 2014 11:50

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Das Problem mit dem mehrzeiligen Text ist jetzt gelöst

Zitat:

Range.Validation.Add(3, 1, 1,'erste Zeile;zweite Zeile;dritte Zeile', null);


die anderen 2 Probleme sind

- es soll nur der Begriff im Dropdownmenü aktiv bleiben
- das DropdwonMenü soll sichtbar sein, wenn eine andere Excelzelle aktiv ist, damit meine ich den Button mit dem Dreieck

Jumpy 18. Nov 2014 12:54

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Zitat:

Zitat von Nimmersatt (Beitrag 1280162)
Das Problem mit dem mehrzeiligen Text ist jetzt gelöst

Zitat:

Range.Validation.Add(3, 1, 1,'erste Zeile;zweite Zeile;dritte Zeile', null);


die anderen 2 Probleme sind

- es soll nur der Begriff im Dropdownmenü aktiv bleiben
- das DropdwonMenü soll sichtbar sein, wenn eine andere Excelzelle aktiv ist, damit meine ich den Button mit dem Dreieck

OK. Ich vermute jetzt doch nicht die Kommentarfunktion. Du meinst das 3eck auf das man in einer Combobox klicked, damit diese aufklappt, glaub ich.

Das wird so nur sichtbar sein, wenn die Zelle aktiv ist. Denn du platzierst ja nicht wirklich eine Combobox in der Zelle sondern benutz Excels Datenprüfungsfunktionalität.

Was du somit machen könntest, wäre mit einer echten Combobox zu arbeiten, die du über eine Zelle legst und die du so mit der Zelle verknüpfst, dass der Wert in der Combobox auch in der Excel-Zelle steht.

Nimmersatt 18. Nov 2014 14:16

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo Jumpy,

Wenn ich die Zelle anklicke, möchte ich mir einen mehrzeiligen Infotext ansehen, ich will keine Auswahl treffen. Wie heisst diese Funktion ?

Dropdown oder die Combobox erfüllen nicht ganz diese Anforderungen.


mfg Nimmersatt

Gollum 18. Nov 2014 14:47

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo,

das, was Du suchst heißt Kommentar oder auf Englisch Comment.

Code:
 Range("B3").AddComment
 Range("B3").Comment.Visible = False
 Range("B3").Comment.Text Text:="Nimmersatt:" & Chr(10) & "Zeile 1" & Chr(10) & "Zeile 2" & Chr(10) & "Zeile 3"

Nimmersatt 18. Nov 2014 15:50

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Hallo Gollum,

Ja genau, das war es !:thumb:


der Code in Delphi lautet

Zitat:

cells.item[3,2].AddComment;
cells.item[3,2].Comment.Visible:= False;
cells.item[3,2].Comment.Text (Text:='Nimmersatt:' + Chr(10) + 'Zeile 1'+ Chr(10) + 'Zeile 2');
Nochmals Danke:-D


mfg Nimmersatt

Nimmersatt 18. Nov 2014 16:27

AW: Excel - DropDown-Menü in einer Zelle erzeugen
 
Noch ein Problem !

Ich will den mehrzeiligen Inhalt einer Excelzelle als Kommentar ausgeben.
Wie errechne ich die Länge und Breite des mehrzeiligen Inhaltes, um damit die Länge und Breite des Kommentarfeldes festlegen zu können ?

mfg Nimmersatt


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz