Dzień Dobry,
Poprzez panel do wyszukiwania zaznaczam komórki posiadające dany znak. W moim przypadku jest to prefix "BRW" no. BRW0203, BRW11320. Poprzez opcję wyszukaj wszędzie lub wszystkie (?) wynajduje mi je w całym arkuszu i jest ok.
Problem polega na tym, że nie jestem w stanie znaleźć możliwości rozszerzenia tego zaznaczenia o kolejne dwie komórki. Można zrobić to przy pomocy shift strzałka ale nie wtedy kiedy chce się owe rozszerzenie zaimplikować we wszystkich zaznaczeniach które są oddzielone między sobą tzn. rozrzucone po całym arkuszu. Oczywiście chodzi mi o skrót klawiaturowy. Ewentualnie może ktoś mógłby mi pomóc czy istnieje na coś takiego jakaś formuła w duchu znajdź wszystkie komórki z BRW i rozszerz o dwie kolumny w lewo. W załączniku grafika ewentualnie gdybym nie był zbyt konkretny w tym pyatniu
Specyficzne rozszerzenie zaznaczenia komórek
Re: Specyficzne rozszerzenie zaznaczenia komórek
Powiedz jeszcze co zamierzasz robić z tym zaznaczeniem?
Jeśli już pisać funkcję, to może się okazać, że oznaczenie bloku jest półśrodkiem do dalszej ręcznej pracy, która zazwyczaj przebiega schematycznie, a którą funkcja mogłaby wykonać po cichu. Nie zawsze tak jest, więc warto spytać o okoliczności.
Jeśli już pisać funkcję, to może się okazać, że oznaczenie bloku jest półśrodkiem do dalszej ręcznej pracy, która zazwyczaj przebiega schematycznie, a którą funkcja mogłaby wykonać po cichu. Nie zawsze tak jest, więc warto spytać o okoliczności.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Specyficzne rozszerzenie zaznaczenia komórek
Dziękuję za zainteresowanie. Drugim etapem jest skopiowanie i przeklejenie do innej kolumny w innym arkuszu. Tam już wtedy dane muszą być "ciurkiem" podane. Bez przerw ( interwałów ) jak podczas zaznaczenia. Ale to akurat. Robi się naturalnie.
Pozdrowienia
Pozdrowienia
OpenOffice 4.1.2 na Windows7
Re: Specyficzne rozszerzenie zaznaczenia komórek
Mam dla ciebie makro. Wklej sobie do modułu StarBasica, stwórz jakiś skrót i będziesz miał tak jak chcesz.
Makro działać będzie tylko na zaznaczeniach wielokrotnych w innych przypadkach poinformuje cię o tym i zakończy działanie.
Pozdrawiam
Kod: Zaznacz cały
Sub RangesSelect
oMulti = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
oCurrentSelection = ThisComponent.getCurrentSelection()
oActiveSheet = ThisComponent.CurrentController.getActiveSheet()
oCurC = ThisComponent.getCurrentController()
sAbsoluteName = oActiveSheet.AbsoluteName
sName = oActiveSheet.getName()
If oCurrentSelection.supportsService("com.sun.star.sheet.SheetCell") then
Print "Zaznaczonna jedna komórka, użyj Shifta + strzałki w lewo"
Exit Sub
End If
If oCurrentSelection.supportsService("com.sun.star.sheet.SheetCellRange") then
Print "Zaznaczonna jednen zakres, użyj Shifta + strzałki w lewo"
Exit Sub
End If
If oCurrentSelection.supportsService("com.sun.star.sheet.SheetCellRanges") then
oElementNames = oCurrentSelection.getElementNames()
For i = 0 to Ubound(oElementNames)
Mid(oElementNames(i), 1, len(sName) + 2,"B"
oSelRange = oActiveSheet().getCellRangeByName(oElementNames(i))
addr = oSelRange.getRangeAddress()
oMulti.addRangeAddress(addr, False)
Next i
oCurC.select(oMulti)
End If
End Sub
Pozdrawiam
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Specyficzne rozszerzenie zaznaczenia komórek
// Ups; belstar był szybszy...
Obiekt zaznaczenia, jak każdy obiekt zakresu danych w Basicu ma właściwości tylko do odczytu, co sprawia, że jego naiwne rozszerzanie nie daje efektu. Zapewne najprościej jest skonstruować nowy obiekt na bazie istniejącego i dodać go do zaznaczenia. Mniej więcej na tej zasadzie działa rozwiązanie belstara.
Zamiast tego napisałem proste bezparametrowe makro, które
* pyta w okienku o frazę do wyszukiwania,
* znajduje wystąpienia tej frazy w kol-tej kolumnie bieżącego arkusza, począwszy od wiersza wiersz_pocz,
* w przypadku dopasowania/znalezienia zaznacza w odpowiednim wierszu fragment od kol_pocz do kol_konc włącznie,
* przechodzi do następnego wiersza i robi to samo; kończy pracę kiedy w kol-tej kolumnie bieżącego wiersza nie ma wpisu.
Pamiętać trzeba, że wewnętrzna numeracja wierszy/kolumn zaczyna się od zera.
Co z tym zrobić?
Narzędzia / Makra / Zarządzaj / Basic / utwórz moduł w skoroszycie albo w konfiguracji prywatnej Calca, tam wklej kod
następnie zamknij edytor kodu i użyj Narzędzia / Makra / Uruchom: odszukaj nawigatorem nazwę zaznacz_pasujace i odpal.
Makro da się przypisać do przycisku albo skrótu klawiszowego, będzie wygodniej.
Zmiana sposobu konfigurowania (wprowadzanie frazy, adresy kolumn, doprecyzowanie pojęcia wyszukania -- na początku tekstu, wg wzorca regularnego itp.) jest do pomyślenia; automatyzacja kopiowania takoż.
Licencja: freeware, z prawem dowolnej rozbudowy i dowolnego wykorzystania, ale bez gwarancji.
Obiekt zaznaczenia, jak każdy obiekt zakresu danych w Basicu ma właściwości tylko do odczytu, co sprawia, że jego naiwne rozszerzanie nie daje efektu. Zapewne najprościej jest skonstruować nowy obiekt na bazie istniejącego i dodać go do zaznaczenia. Mniej więcej na tej zasadzie działa rozwiązanie belstara.
Zamiast tego napisałem proste bezparametrowe makro, które
* pyta w okienku o frazę do wyszukiwania,
* znajduje wystąpienia tej frazy w kol-tej kolumnie bieżącego arkusza, począwszy od wiersza wiersz_pocz,
* w przypadku dopasowania/znalezienia zaznacza w odpowiednim wierszu fragment od kol_pocz do kol_konc włącznie,
* przechodzi do następnego wiersza i robi to samo; kończy pracę kiedy w kol-tej kolumnie bieżącego wiersza nie ma wpisu.
Pamiętać trzeba, że wewnętrzna numeracja wierszy/kolumn zaczyna się od zera.
Kod: Zaznacz cały
sub zaznacz_pasujace()
rem numeracja wierszy/kolumn zaczyna się od zera
kol_pocz = 1
kol_konc = 4
kol = 2 ' w tej kolumnie poszukujemy frazy
wiersz_pocz = 1 ' od tego wiersza zaczynamy poszukiwania
fraza = inputbox("wpisz frazę:")
dok = ThisComponent
kontroler = dok.currentController
ark = kontroler.ActiveSheet
zazn = dok.createInstance("com.sun.star.sheet.SheetCellRanges")
wiersz = wiersz_pocz
tekst = ark.getCellByPosition(kol, wiersz).getString()
do while (tekst <> "")
if (instr(tekst, fraza) > 0) then
obszar = ark.getCellRangeByPosition(kol_pocz, wiersz, kol_konc, wiersz)
zazn.addRangeAddress(obszar.getRangeAddress(),True)
end if
wiersz = wiersz+1
tekst = ark.getCellByPosition(kol, wiersz).getString()
loop
kontroler.select(zazn)
end sub
Narzędzia / Makra / Zarządzaj / Basic / utwórz moduł w skoroszycie albo w konfiguracji prywatnej Calca, tam wklej kod
następnie zamknij edytor kodu i użyj Narzędzia / Makra / Uruchom: odszukaj nawigatorem nazwę zaznacz_pasujace i odpal.
Makro da się przypisać do przycisku albo skrótu klawiszowego, będzie wygodniej.
Zmiana sposobu konfigurowania (wprowadzanie frazy, adresy kolumn, doprecyzowanie pojęcia wyszukania -- na początku tekstu, wg wzorca regularnego itp.) jest do pomyślenia; automatyzacja kopiowania takoż.
Licencja: freeware, z prawem dowolnej rozbudowy i dowolnego wykorzystania, ale bez gwarancji.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Specyficzne rozszerzenie zaznaczenia komórek
Szaleństwo! DZIAŁA! MEGA DZIĘKUJĘ! Odlot skróciło mi to pracę o 90% !
OpenOffice 4.1.2 na Windows7