VBA zu basic übersetzen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: VBA zu basic übersetzen

Re: VBA zu basic übersetzen

von larry » Di, 10.01.2012 20:18

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

Re: VBA zu basic übersetzen

von bst » Mo, 09.01.2012 11:14

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

von larry » Sa, 07.01.2012 17:08

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

von bst » Sa, 07.01.2012 12:35

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

von larry » Mo, 02.01.2012 19:49

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

von tswmjr » Di, 07.12.2010 22:37

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

von bst » Di, 07.12.2010 16:28

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

von tswmjr » Di, 07.12.2010 15:07

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

von tswmjr » Di, 07.12.2010 13:50

Vielen Dank hat geklapt!!!

Re: VBA zu basic übersetzen

von bst » Di, 07.12.2010 13:19

Hi,

versuche es mal hiermit.

cu, Bernd
Dateianhänge
ChangeEreignis.ods
(9.22 KiB) 258-mal heruntergeladen

Re: VBA zu basic übersetzen

von tswmjr » Di, 07.12.2010 11:18

Es tut mir leid, ich kann leider überhaupt nichts damit anfangen.
Aber danke für die Mühe

Re: VBA zu basic übersetzen

von bst » Di, 07.12.2010 10:04

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

VBA zu basic übersetzen

von tswmjr » Mo, 06.12.2010 17:34

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

Nach oben