Makro von Excel in OO - Basic

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: Makro von Excel in OO - Basic

von Stephan » Di, 11.01.2005 18:06

Es wird zwar vermutlich nicht mehr von Bedeutung sein
nein, wird dankend entgegengenommen. Ich hatte es wohl im englischen Forum übersehen.

Gruß
stephan

von Vanished » Di, 11.01.2005 16:47

Stephan hat geschrieben:
Das mit der Bildschirmaktualisierung war mir schon klar, ich weiß nur nicht wie ich das in StarBasic-Code übersetzen kann.

Gruß
Stephan
Es wird zwar vermutlich nicht mehr von Bedeutung sein, aber falls mal jemand anderes an dieser Stelle darauf stößt:
Die gesuchte Funktion nennt sich "lockControllers" (=Application.ScreenUpdating = False) zum "Einfrieren" und "UnlockControllers" (=Application.ScreenUpdating = False) zum "Auftauen".
Näheres dazu gibt es dort: http://www.oooforum.org/forum/viewtopic.php?t=5722

Benutzt wird es mit dem Objekt "ThisComponent".

Viele Grüße,
Vanished

von Stephan » Mi, 06.10.2004 21:28

Hallo Hartmut,
Das Makro läuft bis Datenbank A5. Daten aus Zeiterfassung einfügen
Ab Zeile B5 steht dann #REF!


Ups - der Grund dafür dürfte sein das die kopierten Zellen Formeln enthalten, welche z.B. auf einen (namentlich benannten) Bereich im ursprünglichen Tabellenblatt bezugnehmen. Da dieser Bezug auf dem Zieltabellenblatt nicht vorhanden ist und keine automatische Konvertierung der Formel erfolgt existiert die Referenz nicht mehr. Im Prinzip gibt es zwei Lösungen:
(a)durch zusätzlichen Code innerhalb des Makros alle Formeln entsprechend anzupassen
(b)in der Quelltabelle die Formeln entsprechend abzuwandeln, z.B. statt: "=A1" "$Tabelle1.A1" verwenden so das bezüglich der Tabelle ein absoluter Bezug vorhanden ist.

Falls Du hierzu Hilfe benötigst, melde Dich nochmal.

Das mit der Bildschirmaktualisierung war mir schon klar, ich weiß nur nicht wie ich das in StarBasic-Code übersetzen kann.

Gruß
Stephan

von Bembel » Mi, 06.10.2004 19:00

Hi Stephan

Danke für deine Mühe
Die Meldebox läuft ( Super)

Das Makro läuft bis Datenbank A5. Daten aus Zeiterfassung einfügen
Ab Zeile B5 steht dann #REF!

Zum Thema „ Einfrieren „ beim Ablauf eines Makros kann es vorkommen, das
bei schnellen Ablauf der einzelnen Aktionen der Bildschirm sehr unruhig
wird. Das kann man dadurch abstellen , das die Bildschirmanzeige der
Aktionen so lange unterbunden wird bis das Makro ausgeführt ist.
Anwendung .BildschirmAktualisierung = Falsch (Am Anfang ) eines Makros
Anwendung .BildschirmAktualisierung = Wahr ( Am Ende ) eines Makros

Gruß Hartmut (Bembel)
javascript:emoticon(':lol:')

von Stephan » Mo, 04.10.2004 19:12

Hallo Hartmut,
es sollte auch unter Excel 97 laufen
das tut es aber nicht, es hängt mit Laufzeitfehler 1004 bei Zeile:

Selection.EntireRow.Insert

und auch wenn Du mir den gesamten Code postest, weiß ich immer noch nicht was diese Zeile bewirken soll. Meine Recherchen sagen das ist das Einfügen einer leeren Zeile, aber ich weiß das nicht genau. Mit dem Recorder kann ich das nicht so aufzeichnen das ich den exakt selben Code bekomme (?)
Vorbehaltlich das ich somit nicht weiß wo eingefügt werden soll (bei A5 direkt oder dort Leerzeile und dann in diese Zeile) ist das soweit der Code:

Code: Alles auswählen

Sub Speichern()
document   = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
Meldung = "Haben Sie Ihre diverse Zeiten eingegeben ?" 
DialogArt = 260
Titel = "Hinweis" 
Anwt = MsgBox(Meldung, DialogArt, Titel)
 
If Anwt = 7 Then 
	myDoc = ThisComponent
	myView = myDoc.CurrentController
	mySheet = myDoc.Sheets.getByName("Diverse")
	myView.setActiveSheet(mySheet)
	oCtl = myDoc.getCurrentController 
	oSheet = oCtl.ActiveSheet 
	oCell = oSheet.getCellRangeByName("F14") 
	oCtl.select(oCell) 
Else 
	Anwt = 6 
	myDoc = ThisComponent
	oCtl = myDoc.getCurrentController 
	oSheet = oCtl.ActiveSheet 
	oCell = oSheet.getCellRangeByName("E52:AD52") 
	oCtl.select(oCell)
	dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) 
	mySheet = myDoc.Sheets.getByName("Datenbank")
	myView = myDoc.CurrentController	
	myView.setActiveSheet(mySheet)
	oCtl = myDoc.getCurrentController 
	oSheet = oCtl.ActiveSheet 
	oCell = oSheet.getCellRangeByName("A5") 
	oCtl.select(oCell)
	dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
	oCell = oSheet.getCellRangeByName("A5:A6") 
	dim args2(0) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "NumberFormatValue"
	args2(0).Value = 109
	dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args2())
	oCell = oSheet.getCellRangeByName("A5") 
	oCell.HoriJustify = com.sun.star.table.CellHoriJustify.RIGHT
	
End if
End Sub
Leider kann ich hierzu garnichts sagen:
'Application.ScreenUpdating = False 'Bildschirm ausgeschaltet ( Einfrieren))

Bei mir läuft das ganz gut. Da Du sagst der gesamte Rest läuft bei Dir schon, füge erstmal den Code ein und teste mal was insgesamt passiert.


Gruß
Stephan

von Stephan » So, 03.10.2004 16:14

der Rest Funktioniert
das ist zumindest ein Lichtblick, denn der Code den Du hier postest funktioniert nicht :wink: .
Abgesehen von Syntax-Fehlern im Code, müßtest Du mal verraten was hiermit erreicht werden soll, denn ich weiß es nicht:

<1> Range("E52:AD52").Select
<2> Selection.Copy
<3> Sheets("Datenbank").Select
<4> ActiveWindow.ScrollColumn = 20
<5> Range("A5").Select
<6> Selection.EntireRow.Insert


wenn Zeile 1,2,(3,4),5 ausgeführt werden führt Zeile 6 zu Fehlermeldung (Excel 97) --> als Zeile 6 sollte funktionieren Selection.insert. Allerdings weiß ich nicht wirklich was nun gemeint sein soll da doch Selection.EntireRow.Insert bedeutet leere Zeile einfügen oder nicht? Also entweder bei A5 leere Zeile einfügen und dann die Selektion in diese Zeile kopieren oder gleich die Selektion in die Zeile 5 (beginnend Spalte A) kopieren? Und welchen konkreten Zweck verfolgt Zeile 4 (ich kenne nicht den gesamten Code)?

Hast Du denn schon mal versucht das mit dem Makrorecorder aufzuzeichen? ("if" und "then"-Teil getrennt)

Gruß
Stephan

Makro von Excel in OO - Basic

von Bembel » So, 03.10.2004 08:45

Hi
habe unter Excel ein Programm am laufen , nun möchte
ich es unter OO haben.
Kann mir jemand Helfen wie dieser Befehl übersetzt in oobasic lautet?
Dies ist nur ein Teil des Makros der Rest Funktioniert.
Danke schon mal im voraus .
Gruß Bembel

Sub Speichern()
Meldung = "Haben Sie Ihre diverse Zeiten eingegeben ?"
DialogArt = vbYesNo + vbDefaultButten2
Titel = "Hinweis"
Anwt = MsgBox(Meldung, DialogArt, Titel)
If Anwt = vbNo Then
Sheets("Diverse").Select
Range("F14").Select
Else
Anwt = vbJa
Application.ScreenUpdating = False 'Bildschirm ausgeschaltet ( Einfrieren))
Range("E52:AD52").Select
Selection.Copy
Sheets("Datenbank").Select
ActiveWindow.ScrollColumn = 20
Range("A5").Select
Selection.EntireRow.Insert
Range("A5:A6").Select
Selection.NumberFormat = "mmmm yy
Range("A5").Select
With Selection
.HorizontalAlignment = xlRight
End With

Nach oben