Strona 1 z 1
Konwersja makra z excela
: pn lip 09, 2012 9:55 pm
autor: Jedzdzer
Witam wszystkich
Mam dokument z makrem w excel który chciałbym używać w oo, natomiast makro nie działa a ja nie bardzo wiem jak je przekonwertować
Chodzi o to by samoczynnie wpisywała się aktualna data i godzina w momencie wpisana czegokolwiek w w kolumnie "G"
Makro z excela:
Kod: Zaznacz cały
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Not Intersect(Target, Columns("G")) Is Nothing Then
Cells(Target.Row, "B") = Date
Cells(Target.Row, "C") = Format(Time, "hh:mm:ss")
End If
End Sub
Z góry dziękuję za pomoc
Re: Konwersja makra z excela
: wt lip 10, 2012 10:41 pm
autor: Jedzdzer
Poradziłem sobie w inny sposób, za pomocą formuły którą gdzieś znalazłem, może się komuś przyda :
Wpisujemy w komórkę C1 :
Kod: Zaznacz cały
=JEŻELI(A1="";"";JEŻELI(B1="";TERAZ();C1))
no i komórkę A1 trzeba sformatować jako datę, albo jak wolimy czas. Wtedy jeżeli coś wpiszemy w komórkę A1 w komórce C1 pojawi się aktualna data, bądź godzina
Re: Konwersja makra z excela
: śr lip 11, 2012 9:31 am
autor: Jan_J
Jedzdzer pisze:Poradziłem sobie w inny sposób, za pomocą formuły którą gdzieś znalazłem, może się komuś przyda :
Wpisujemy w komórkę C1 :
Kod: Zaznacz cały
=JEŻELI(A1="";"";JEŻELI(B1="";TERAZ();C1))
no i komórkę A1 trzeba sformatować jako datę, albo jak wolimy czas. Wtedy jeżeli coś wpiszemy w komórkę A1 w komórce C1 pojawi się aktualna data, bądź godzina
Niedobrze.
1. W oryginale wstawiasz do komórki stałą równą bieżącemu stanowi zegara. W rozwiązaniu awaryjnym radzisz sobie za pomocą formuły, która w dowolnej chwili (np. podczas przeliczenia arkusza, jego załadowania, a nawet modyfikacji którejkolwiek komórki) może zostać zaktualizowana.
2. Działasz w komórce C1. Co się stanie, jeżeli warunki dot. A1 ani B1 nie będą spełnione? Moim zdaniem błąd 522: cykliczna referencja.
Chyba że masz włączone iteracje (Narzędzia→Opcje→Calc→Oblicz), ale to znaczy że integralność arkusza będzie zależeć od stanu konfiguracji środowiska, którą w każdym momencie da się zmienić. To jest dobra metoda do badania wariantów scenariuszy, ale niekoniecznie do tworzenia bazy danych.
Przetłumaczenie makra jest dość proste, choć wymaga podpięcia do obiektu typu Listener. Kilka wskazówek znajdziesz w
http://www.oooforum.org/forum/viewtopic.phtml?t=12781.
Datę/czas z zegara wstawisz do komórki prawie tak jak w Excelu. Konkretnie
Kod: Zaznacz cały
a = thisComponent.currentController.getActiveSheet()
a.getCellByPosition(0,0).Value = Date ' tylko data
a.getCellByPosition(0,1).String = Format(Date+Time, "yyyy.MM.dd hh:mm:ss") ' data i godzina
Re: [SOLVED] Konwersja makra z excela
: czw lip 19, 2012 11:17 am
autor: Jedzdzer
Faktycznie posypało się
, dziękuję za wskazówki, ale niestety z bacica i generalnie programowania jestem kompletnie zielony i nie jestem w stanie tego zrobić. Męczę się już drugi dzień, ale nie udało mi się. Jeżeli ktoś znalazł by rozwiązanie, bądź chciało by mu się pobawić makrem, będę wdzięczny za pomoc
Re: Konwersja makra z excela
: pn sie 06, 2012 4:45 pm
autor: Jan_J
Jakoś tak:
Kod: Zaznacz cały
sub StartListener()
oSheet = thisComponent.Sheets.getByIndex(0)
aRange = "G1:G20"
oGroup=oSheet.getCellRangeByName(aRange)
oListener = createUnoListener("my_","com.sun.star.chart.XChartDataChangeEventListener")
oGroup.addChartDataChangeEventListener(oListener)
End Sub
Sub my_chartDataChanged(oEvt)
oSel = thisComponent.CurrentController.getSelection().RangeAddress
oSheet = thisComponent.Sheets.getByIndex(oSel.Sheet)
' uwaga ???
markRows(oSheet, oEvt.StartRow, oEvt.EndRow)
End Sub
sub markRows(oSheet as object, startRow as integer, endRow as integer)
dataczas = Format(Date, "yyyy.MM.dd ") & Time ' data i godzina
for row = startRow to endRow
oSheet.getCellByPosition(0, row).String = dataczas
next row
end sub
Po otwarciu arkusza trzeba wywołać pierwszą procedurę. Albo zrobić to ręcznie, albo przypisać jej wykonanie zdarzeniu otwarcia dokumentu: Narzędzia→Dostosuj→Zdarzenia.
Jet jednak problem: jeżeli Listener jest zainstalowany dla zakresu komórek (np. dla kolumny), to przekazywana przez parametr oEvt informacja nie wskazuje, która komórka/komórki zostały zmodyfikowane. Na podstawie dokumentacji
http://api.libreoffice.org/common/ref/c ... Event.html sądzę, że powinna być dostarczona. No cóż....
Re: Konwersja makra z excela
: wt sie 07, 2012 11:31 am
autor: Jan_J
Po zastosowaniu XModifyListener zamiast XChartDataChangeEventListener wszystko jest jak należy:
Kod: Zaznacz cały
sub StartListener()
oSheet = thisComponent.Sheets.getByIndex(0)
aRange = "G1:G20"
oGroup=oSheet.getCellRangeByName(aRange)
oListener = createUnoListener("my_","com.sun.star.util.XModifyListener")
oGroup.addModifyListener(oListener)
End Sub
Sub my_Modified(oEvt)
oSel = thisComponent.CurrentController.getSelection().RangeAddress
oSheet = thisComponent.Sheets.getByIndex(oSel.Sheet)
markRows(oSheet, oSel.StartRow, oSel.EndRow)
End Sub
sub markRows(oSheet as object, startRow as integer, endRow as integer)
dateString = Format(Date, "yyyy.MM.dd ") & Time ' data i godzina
for row = startRow to endRow
oSheet.getCellByPosition(0, row).String = dateString
next row
end sub
Co nie znaczy, że rozumiem, dlaczego tamten nie chciał być posłuszny w 100% ...