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
Makro von Excel in OO - Basic
Moderator: Moderatoren
das ist zumindest ein Lichtblick, denn der Code den Du hier postest funktioniert nichtder Rest Funktioniert

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
Hallo Hartmut,
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:
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
das tut es aber nicht, es hängt mit Laufzeitfehler 1004 bei Zeile:es sollte auch unter Excel 97 laufen
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
'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
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:')
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:')
Hallo Hartmut,
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
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
Es wird zwar vermutlich nicht mehr von Bedeutung sein, aber falls mal jemand anderes an dieser Stelle darauf stößt: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
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