VBA zu basic übersetzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

tswmjr
Beiträge: 7
Registriert: Mo, 06.12.2010 17:08

VBA zu basic übersetzen

Beitrag 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
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: VBA zu basic übersetzen

Beitrag 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
tswmjr
Beiträge: 7
Registriert: Mo, 06.12.2010 17:08

Re: VBA zu basic übersetzen

Beitrag von tswmjr »

Es tut mir leid, ich kann leider überhaupt nichts damit anfangen.
Aber danke für die Mühe
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: VBA zu basic übersetzen

Beitrag von bst »

Hi,

versuche es mal hiermit.

cu, Bernd
Dateianhänge
ChangeEreignis.ods
(9.22 KiB) 257-mal heruntergeladen
tswmjr
Beiträge: 7
Registriert: Mo, 06.12.2010 17:08

Re: VBA zu basic übersetzen

Beitrag von tswmjr »

Vielen Dank hat geklapt!!!
tswmjr
Beiträge: 7
Registriert: Mo, 06.12.2010 17:08

Re: VBA zu basic übersetzen

Beitrag 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
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: VBA zu basic übersetzen

Beitrag 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
tswmjr
Beiträge: 7
Registriert: Mo, 06.12.2010 17:08

Re: VBA zu basic übersetzen

Beitrag von tswmjr »

ich verstehe zwar so gut wie gar nicht was hier geschieht aber ich bin dir sehr dankbar.
hat super funktioniert!!!
gruß Fabian
larry
Beiträge: 3
Registriert: Mo, 02.01.2012 18:27

Re: VBA zu basic übersetzen

Beitrag 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
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: VBA zu basic übersetzen

Beitrag 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
larry
Beiträge: 3
Registriert: Mo, 02.01.2012 18:27

Re: VBA zu basic übersetzen

Beitrag 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.
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: VBA zu basic übersetzen

Beitrag 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
larry
Beiträge: 3
Registriert: Mo, 02.01.2012 18:27

Re: VBA zu basic übersetzen

Beitrag 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
Antworten