Pole listy, dwie kolumny

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
krzys59
Posty: 78
Rejestracja: pt cze 19, 2009 2:59 pm

Pole listy, dwie kolumny

Post autor: krzys59 »

Zrobiłem sobie jakiś czas temu makro pobierające dane do pola listy a następnie wklejające wybraną wartość z pola listy w aktywną komórkę. Wszystko fajnie działa, ale chciałbym je zmodyfikować.
W tej chwili makro pobiera dane z jednej kolumny i wstawia wybraną wartość. A chciałbym to tak zmienić, żeby w polu listy były jedne wartości a wstawione drugie. To znaczy, chciałbym mieć pole listy składające się z dwóch kolumn, w pierwszej numer, w drugiej nazwisko. W polu listy chciałbym wyświetlać numer a wstawiać nazwisko z sąsiedniej kolumny.
Jak zmodyfikować moje makro, żeby tak się dało zrobić?

Kod: Zaznacz cały


Sub WstawNazwisko
oDoc = ThisComponent 
oSheet = oDoc.getSheets.getByName("Arkusz1") 
oForm = oSheet.DrawPage.Forms.getByIndex(0) 
oThisIsMyListBox = oForm.getByName("Nazwiska") 

'fragment pobierający adres aktywnej komórki do której zostanie wpisana wartość z pola listy
oSelection = oDoc.CurrentController.getSelection 
oRangeAddress = oSelection.getRangeAddress 
wiersz = oRangeAddress.StartRow 'current row 
kolumna = oRangeAddress.StartColumn 'current column 


'pętla tworząca pole listy na 30 pozycji
With oThisIsMyListBox 
      .LineCount = 30 
      .HelpText = "Wybierz wartość z tej listy" 
End With 

'zaznacza zakres komórek do pobrania wartosci do pola listy
dim RangeAddr as  new com.sun.star.table.CellRangeAddress 
RangeAddr.EndColumn = 1 
RangeAddr.EndRow = 64 
RangeAddr.Sheet = 0 
RangeAddr.StartColumn = 1 
RangeAddr.StartRow = 35 

'pobranie wartości do pola listy
dim initParam(0) as new com.sun.star.beans.NamedValue 
initParam(0).Name="CellRange" 
initParam(0).value = RangeAddr 
CellRangeListSource=oDoc.createInstanceWithArguments("com.sun.star.table.CellRangeListSource", initParam ) 
oThisIsMyListBox.setListEntrySource CellRangeListSource 

'wpisuje w aktywną komórkę wartość z listbox, przez klinięcie
z_listy=oThisIsMyListBox.CurrentValue
oSheet.getCellbyPosition(kolumna,wiersz).setString(z_listy)
End Sub
Makro pobiera dane z kolumny 2 z podanego zakresu wierszy, wstawia dane do formantu listy "Nazwiska" i po kliknięciu na wybranym nazwisku wstawia je w aktywną komórkę. Jak wybrać dwie kolumny to wiem, ale jeśli wpisuję

Kod: Zaznacz cały

RangeAddr.EndColumn = 1 
.................
RangeAddr.StartColumn = 0
................
Czyli dwie kolumny, to wybiera mi dane do listy z pierwszej kolumny i takie wstawia do aktywnej komórki. To, że tak się da to wiem, ale nie wiem jak to zrobić :D
krzys59
Posty: 78
Rejestracja: pt cze 19, 2009 2:59 pm

Re: Pole listy, dwie kolumny

Post autor: krzys59 »

OK, sam wymyśliłem jak to zrobić :D
Stworzę listbox za pomocą makra w którym będą tylko numerki, wewnątrz makra zrobię array z drugą kolumną danych, po wybraniu w listboxie numerka, będzie pobierana odpowiednia dana z array i to wklejane do arkusza
Wiem, trochę na około ale powinno działać, zwłaszcza że lista jest krótka, tylko 30 pozycji :D
ODPOWIEDZ