Seite 1 von 1
VBA zu basic übersetzen
Verfasst: Mo, 06.12.2010 17:34
von tswmjr
Hallo Leute,
ich habe ein riesen Problem die zwei Zeilen von meinem Code für OO zu übersetzen. Ich hoffe hier kann mir jemand helfen!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Not IsEmpty(Cells(Target.Row, 2)) Then
Cells(Target.Row, 3) = Now
Else: Cells(Target.Row, 3) = ""
End If
End If
End Sub
Im Prinzip soll wenn in einer zelle etwas steht, neben dran das datum mit uhrzeit erscheinen.
Danke
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 10:04
von bst
Morgen,
nimm einen ModifyListener und weise dessen Add- sowie Remove-Routinen via Menü Extras-Anpassen den Ereignissen "Dokument öffnen" bzw. "Dokument wird geschlossen" zu.
HTH, Bernd
--
Code: Alles auswählen
Option Explicit
Global oRange
Global oListener
Sub AddListener() ' dem Ereignis "Dokument öffnen" zuordnen
oListener = CreateUnoListener("Change_", "com.sun.star.util.XModifyListener")
oRange = ThisComponent.Sheets("Tabelle1").getCellRangeByName("B1:B65536")
oRange.addModifyListener(oListener)
End Sub
Sub RemoveListener() ' dem Ereignis "Dokument wird geschlossen" zuordnen
On Error Resume Next
oRange.removeModifyListener(oListener)
End Sub
Sub Change_modified(aEvent)
Dim oAddress As Object, oSheet as Object, iRow as integer, iCol as integer
oSheet = aEvent.Source.SpreadSheet
oAddress = ThisComponent.getCurrentSelection.RangeAddress
iCol = oAddress.StartColumn
for iRow = oAddress.StartRow to oAddress.EndRow
if oSheet.getCellByPosition(iCol, iRow).String = "" Then
oSheet.getCellByPosition(iCol + 1, iRow).String = ""
else
oSheet.getCellByPosition(iCol + 1, iRow).String = now
endif
next
End Sub
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 11:18
von tswmjr
Es tut mir leid, ich kann leider überhaupt nichts damit anfangen.
Aber danke für die Mühe
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 13:19
von bst
Hi,
versuche es mal hiermit.
cu, Bernd
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 13:50
von tswmjr
Vielen Dank hat geklapt!!!
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 15:07
von tswmjr
Hallo Bernd,
ich hab noch eine Frage, und zwar, wenn ich dieses Marko bei mehreren Tabellenblättern anwenden will geht es nicht. habe zwar probiert die namen einzutragen, nützt aber nichts.
oRange = ThisComponent.Sheets("Tabelle1", "Tabelle2", "Tabelle3").getCellRangeByName("B1:B65536")
Vom Aufbau wären alle Blätter gleich.
Danke
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 16:28
von bst
Hi,
keine Ahnung ob so etwas möglich ist?
Mit drei unterschiedlichen Ranges scheint das hier zu funktionieren solange Du nicht gleichzeitig in mehreren Tabellen änderst.
Die Sub Change_modified muss (dann) nicht angepasst werden.
cu, Bernd
--
Code: Alles auswählen
Global oRange(0 to 2)
Global oListener
Sub AddListener() ' dem Ereignis "Dokument öffnen" zuordnen
dim i as integer
oListener = CreateUnoListener("Change_", "com.sun.star.util.XModifyListener")
for i = 0 to 2
oRange(i) = ThisComponent.Sheets(i).getCellRangeByName("B1:B65536")
oRange(i).addModifyListener(oListener)
next
End Sub
Sub RemoveListener() ' dem Ereignis "Dokument wird geschlossen" zuordnen
dim i as integer
On Error Resume Next
for i = 0 to 2
oRange(i).removeModifyListener(oListener)
next
End Sub
Re: VBA zu basic übersetzen
Verfasst: Di, 07.12.2010 22:37
von tswmjr
ich verstehe zwar so gut wie gar nicht was hier geschieht aber ich bin dir sehr dankbar.
hat super funktioniert!!!
gruß Fabian
Re: VBA zu basic übersetzen
Verfasst: Mo, 02.01.2012 19:49
von larry
Hallo, ich bin neu hier und habe mir mal das Wissen von hier zu Nutze gemacht.
Habe das macro von "bst" bei mir erfolgreich im Einsatz. Es arbeitet über 11 "baugleiche" Tabellen tadellos.
Nun habe ich das Problem das ich das auch in Tabelle 12 nutzen will, diese aber total anders aufgebaut ist.
Also es sind andere Zellen zu überwachen.
Wie kann ich diese in das macro einbauen, bzw. geht das überhaupt ??
Mein Können ist aber arg begrenzt, will heißen ich bin am Anfang des Lernens.
Mit einem Beispiel könnte ich das sicher einigermaßen verstehen.
Fred
Re: VBA zu basic übersetzen
Verfasst: Sa, 07.01.2012 12:35
von bst
Hi Fred,
Du könntest das mal so ähnlich versuchen, ungetestet.
HTH, Bernd
--
Code: Alles auswählen
Global oRange(0 to 11)
Global oListener
Global oListenerSub AddListener() ' dem Ereignis "Dokument öffnen" zuordnen
dim i as integer
oListener = CreateUnoListener("Change_", "com.sun.star.util.XModifyListener")
for i = 0 to 10
oRange(i) = ThisComponent.Sheets(i).getCellRangeByName("B1:B65536")
oRange(i).addModifyListener(oListener)
next
oRange(11) = ThisComponent.Sheets(11).getCellRangeByName("D10:F44")
oRange(11).addModifyListener(oListener)
End Sub
Re: VBA zu basic übersetzen
Verfasst: Sa, 07.01.2012 17:08
von larry
Hallo bst
Habe das mal ausgeführt, geht so wie es soll.
Dafür erst mal meinen Dank.
Ein Frage habe ich noch dazu, wie muss das aufgebaut werden, um 2 oder mehr getrennte Bereiche in einer Tabelle
zu überwachen ?
Kannst du mir dabei noch mal helfen.
gruß vom zufriedenen Fred.
Re: VBA zu basic übersetzen
Verfasst: Mo, 09.01.2012 11:14
von bst
Hi,
versuche das mal so:
Code: Alles auswählen
oRange(n) = ThisComponent.Sheets(4711).getCellRangeByName("D10:D20")
oRange(n).addModifyListener(oListener)
oRange(n+1) = ThisComponent.Sheets(4711).getCellRangeByName("E30:E40")
oRange(n+1).addModifyListener(oListener)
oRange(n+2) = ThisComponent.Sheets(4711).getCellRangeByName("F50:F60")
oRange(n+2).addModifyListener(oListener)
HTH, Bernd
Re: VBA zu basic übersetzen
Verfasst: Di, 10.01.2012 20:18
von larry
Hallo Bernd
habe das ausprobiert, ging dann wenn ich's so schreibe.
Code: Alles auswählen
Sub AddListener() ' dem Ereignis "Dokument öffnen" zuordnen
dim i as integer
oListener = CreateUnoListener("Change_", "com.sun.star.util.XModifyListener")
for i = 0 to 2
oRange(i) = ThisComponent.Sheets(i).getCellRangeByName("A1:A65536")
oRange(i).addModifyListener(oListener)
next
oRange(3) = ThisComponent.Sheets(3).getCellRangeByName("C1:C44")
oRange(3).addModifyListener(oListener)
oRange(3) = ThisComponent.Sheets(3).getCellRangeByName("F1:F20")
oRange(3).addModifyListener(oListener)
oRange(3) = ThisComponent.Sheets(3).getCellRangeByName("B20:B22")
oRange(3).addModifyListener(oListener)
Danke nochmals für deine Zeit, jetzt habe ich erst mal um weiter zu kommen.
gruß fred