Autor Thema: Notes to Excel Export und sortieren  (Gelesen 4064 mal)

Offline Fitz

  • Senior Mitglied
  • ****
  • Beiträge: 274
  • Geschlecht: Männlich
Notes to Excel Export und sortieren
« am: 25.10.06 - 10:44:56 »
Hallo Forum,

ich verzweifle hier beim Versuch von Notes aus ein Excel XP Tabellenblatt zu sortieren :-(
Der Export der Daten klappt einwandfrei, nur beim sortieren kommt folgende Fehlermeldung:

"Microsoft Excel: Die Sort-Eigenschaft des Range-Objektes kann nicht zugeordnet werden"

Ich habe über die Suche viele Hinweise gelesen aber leider konnte ich nichts davon umsetzen. (Bin in Lotus Script nicht so fit)

Server 6.5.5FP1
Client 6.5.5 deutsch

Danke für Infos!

Gruß

Bernd

hier auszugsweise mein Script:

Dim Session As New NotesSession
   Dim Doc As NotesDocument
   Dim CurrDB As NotesDatabase
   Dim Collection As NotesDocumentCollection
   Dim Application As Variant
   Dim Book As Variant
   Dim Sheet As Variant
   Dim i As Integer
   Dim xlsStartzeile As Integer

   Set CurrDB = Session.CurrentDatabase
   Set Collection = CurrDB.UnprocessedDocuments
   Set Doc = Collection.GetFirstDocument
   Set Book=Nothing
   Set Sheet = Nothing
   Set Application=Nothing
   

      
   Const xlDiagonalDown=5
   Const xlNone=-4142
   Const xlCenter=-4108
   Const xlDiagonalUp=6
   Const xlEdgeBottom=9
   Const xlEdgeLeft=7
   Const xlEdgeRight=10
   Const xlEdgeTop=8
   Const xlAutomatic=-4105
   Const xlContinuous=1
   Const xlThin=2
   Const xlInsideVertical=11
   Const xlUnderlineStyleNone=-4142
   Const xlPrintNoComments=-4142
   Const xlLandscape=2
   Const xlPaperA4=9
   Const xlDownThenOver=1
   Const xlAscending=1
   Const xlGuess=0
   Const xlTopToBottom=1
   Const xlSortNormal=0   
   

   Set Application = CreateObject("Excel.Application")
   Set Book = Application.Workbooks.Add
   If Application.Workbooks(1).Worksheets.Count=0 Then
      Set sheet = Application.Workbooks(1).Worksheets.Add
   End If
   Set Sheet = Application.Workbooks(1).Worksheets(1)
   Sheet.Name = "Report" 'Name der Arbeitsmappe
   Book.Application.Visible=True

...
.... Export der Daten und Formatierung der Zellen geht ohne Probleme
...

   ' sortiere den Report nach Name
   Sheet.Range("A6:K5000").Select
   Application.Selection.Sort.Key1 = Sheet.Range("A7")  ' hier kommt der Fehler
   Application.Selection.Sort.Order1= xlAscending
   Application.Selection.Sort.Header = xlGuess
   Application.Selection.Sort.OrderCustom = 1
   Application.Selection.Sort.MatchCase = False
   Application.Selection.Sort.Orientation = xlTopToBottom
   Application.Selection.Sort.DataOption1 = xlSortNormal


9x Domino Server 11.0.1
BlackBerry UEM12 Server
IBM Content Manager, ICC4Mail, eDiscovery Manager
Sametime 11.5

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Notes to Excel Export und sortieren
« Antwort #1 am: 25.10.06 - 10:52:11 »
Wie lautet den die Fehlermeldung?

Rainer
Rainer Zaske

MCSD - C#

Offline pReD

  • Frischling
  • *
  • Beiträge: 28
  • Geschlecht: Männlich
Re: Notes to Excel Export und sortieren
« Antwort #2 am: 25.10.06 - 10:59:40 »
Hallo Forum,

ich verzweifle hier beim Versuch von Notes aus ein Excel XP Tabellenblatt zu sortieren :-(
Der Export der Daten klappt einwandfrei, nur beim sortieren kommt folgende Fehlermeldung:

"Microsoft Excel: Die Sort-Eigenschaft des Range-Objektes kann nicht zugeordnet werden"

Ich habe über die Suche viele Hinweise gelesen aber leider konnte ich nichts davon umsetzen. (Bin in Lotus Script nicht so fit)



Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Notes to Excel Export und sortieren
« Antwort #3 am: 25.10.06 - 11:23:12 »
Wer lesen kann ist klar im Vorteil.

Versuch doch mal den Aufruf mit Parametern für Key1, Order1... (Sort(Key1, Order1....)

Rainer
Rainer Zaske

MCSD - C#

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Notes to Excel Export und sortieren
« Antwort #4 am: 25.10.06 - 11:41:05 »
So was hatten wir hier schon mal (ist aber schon ein paar Tage her  ;) )

Schau mal hier: http://atnotes.de/index.php?topic=9114.msg49803#msg49803


Axel



Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Fitz

  • Senior Mitglied
  • ****
  • Beiträge: 274
  • Geschlecht: Männlich
Re: Notes to Excel Export und sortieren
« Antwort #5 am: 08.11.06 - 16:52:59 »
Danke an @All :-)

ich hab die Sortierung hinbekommen. Nachdem das geschafft ist, kommen jetzt lauter "Verfeinerungen" seitens der GL mit Chart usw.

Meine neue Frage lautet:

Kann ich ein neues Excel erstellen und dabei ein komplettes Excel Macro (aus Notes) mit übergeben? Ich würde dann die Rohdaten an Excel übergeben und dann mit dem Excel Makro die "Verschönerung" machen.

Geht das? Kann ich dem Excel ein Makro aus Notes heraus einpflanzen?

Danke für Infos :-)

Gruß
Bernd
9x Domino Server 11.0.1
BlackBerry UEM12 Server
IBM Content Manager, ICC4Mail, eDiscovery Manager
Sametime 11.5

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Notes to Excel Export und sortieren
« Antwort #6 am: 08.11.06 - 18:46:05 »
Ein Makro aus Notes einpflanzen geht so nicht. Du kannst aber ein Makro in Excel ausführen.

Set Application = CreateObject("Excel.Application")
Call Application.Run("Name des Makros")


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Notes to Excel Export und sortieren
« Antwort #7 am: 09.11.06 - 07:45:42 »
Meine Idee wäre es jetzt, in einer Excelvorlage das Macro vorzubereiten und dann den Export in eine Exceldatei aus dieser Vorlage zu starten. Dann könntest du das Makro anschließend ausführen. Habe ich zwar noch nie so gemacht, aber es klingt nicht unmöglich.

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Notes to Excel Export und sortieren
« Antwort #8 am: 09.11.06 - 10:38:12 »
Zitat
Ein Makro aus Notes einpflanzen geht so nicht.
Das ist so nicht ganz korrekt.

Über das VBProject.VBComponents Objekt kann man der Arbeitsmappe Module hinzufügen und darin Prozeduren erstellen.
Das ist zwar etwas kompliziert, wenn man das Script der Prozedur zur Laufzeit des Notes Scriptes berechnen muss aber es ist machbar.
Leider gibt es eine Sicherheitseinstellung, die in Excel eingestellt sein MUSS:
  • Über das Menü "Extras\Marko\Sicherheit" die Sichereitseinstellungen aufrufen.
  • Auf dem Reiter "Vertrauenswürdige Quelle die Option "Zugriff auf das Visual-Basic Projekt vertrauen" aktivieren
  • Ich hab noch nicht herausgefunden, wie man diese Einstellung (wenigstens) abfragen kann.

    Hier ein Beispiel-Agent:

    Es wird eine Tabelle aufgebaut: 2 Spalten und 3 Datensätze.
    Danach wird über den Spaltentiteln pro Spalte ein Sortier-Flipp-Flopp Button erstellt, der einen von LS erstellten Makro aufruft.

    Es gibt natürlich auch einfachere Beispiele, aber nur mal um so zu zeigen was möglich ist.

Code
Sub Initialize
	
	Dim int_row As Integer
	Dim var_columns As Variant
	Dim var_row As Variant
	Dim xl_app As Variant
	Dim xl_books As Variant
	Dim xl_book As Variant
	Dim xl_sheet As Variant
	Dim xl_columns As Variant
	Dim xl_row As Variant
	
	
' ### table ###
	
' create worksheet
	Set xl_app = CreateObject("Excel.Application")
	Set xl_books = xl_app.Workbooks
	Set xl_book = xl_books.Add()
	Set xl_sheet = xl_book.Worksheets(1)
	xl_app.Visible = True
	Stop
	
' column titles (second row of the worksheet)
	Set xl_columns = xl_sheet.Range(xl_sheet.Cells(2, 1), xl_sheet.Cells(2, 2))
	var_columns = xl_columns.Value
	var_columns(1, 1) = "Spalte 1"
	var_columns(1, 2) = "Spalte 2"
	xl_columns.Value = var_columns
	
' add tree rows below columns range
	For int_row = 1 To 3
		If Isempty(xl_row) Then Set xl_row = xl_columns.Rows(2) Else Set xl_row = xl_row.Rows(2)
		var_row = xl_row.Value
		var_row(1, 1) = "Zeile " & int_row
		var_row(1, 2) = Rnd()
		xl_row.Value = var_row
	Next
	
	
' ### sort buttons ###
	
	Dim int_column As Integer
	Dim xl_columndata As Variant
	Dim xl_module As Variant
	Dim str_script As String
	Dim str_address As String
	Dim str_keyaddress As String
	Dim dbl_left As Double
	Dim dbl_top As Double
	Dim dbl_width As Double
	Dim dbl_height As Double
	
' add an new module into the workbook
	Set xl_module = CreateModule(xl_book)
	xl_module.Name = "SortButtons"
	
' declarations
	Call CreateSub(xl_module,"Option Base 1")	' lower bound of all arrays is 1
	Call CreateSub(xl_module,"Dim int_order(" & xl_columns.Columns.Count & ") As Integer")	' current sort order of each button
	
	
' add the sort script for each column
	For int_column = 1 To xl_columns.Columns.Count
		' range to sort
		Set xl_columndata = xl_sheet.Range(xl_columns.Rows(2).Cells(int_column), xl_row.Cells(int_column))
		
		' build script
		str_script = "Sub Sort" & int_column & Chr(13) & _
		"	If int_order(" & int_column & ") = xlAscending Then" & Chr(13) & _
		"		int_order(" & int_column & ") = xlDescending" & Chr(13) & _
		"	Else" & Chr(13) & _
		"		int_order(" & int_column & ") = xlAscending" & Chr(13) & _
		"	End If" & Chr(13) & _
		"	ActiveSheet.Range(""" & xl_columndata.Address & """).Sort" & _
		" Key1:=Range(""" & xl_columndata.Cells(1).Address & """)" & _
		", Order1:=int_order(" & int_column & ")" & _
		", Header:=xlNo " & _
		", OrderCustom:=1" & _
		", MatchCase:=False" & _
		", Orientation:=xlTopToBottom" & _
		", DataOption1:=xlSortNormal" & Chr(13) & _
		"End Sub"
		
		' add script
		Call CreateSub(xl_module,str_script)
		
		' create sort button
		dbl_left = xl_sheet.Cells(xl_columns.Row - 1, int_column).Left
		dbl_top = xl_sheet.Cells(xl_columns.Row - 1, int_column).Top
		dbl_width = xl_sheet.Cells(xl_columns.Row - 1, int_column).Width
		dbl_height = xl_sheet.Cells(xl_columns.Row - 1, int_column).Height
		Call CreateButton(dbl_left, dbl_top, dbl_width, dbl_height, xl_sheet, Chr(118), "Sort" & int_column)
		
	Next int_column
	
End Sub

Code
Function CreateModule(book As Variant) As Variant
	
%REM
erstellt am: 10.03.2004
erstellt von: Stefan Johannsen

Function CreateModule(book As Variant) As Variant
	Erstellt ein neues Modul in der Arbeitsmappe und gibt es zurück.
%END REM
	
	Dim vbproject As Variant
	Dim vbcomponents As Variant
	Const vbext_ct_StdModule = 1
	
	Set vbproject = book.VBProject
	Set vbcomponents = vbproject.VBComponents
	Set CreateModule = vbcomponents.Add(vbext_ct_StdModule)
	
End Function


Code
Sub CreateSub(module As Variant,str_script As String)
	
%REM
erstellt am: 10.03.2004
erstellt von: Stefan Johannsen

Sub CreateSub(module As Variant,str_script As String)
	Fügt in das übergebene Modul einen Text ein.
	s. Sub ReadMe
%END REM
	
	Dim codemodule As Variant
	
	Set codemodule = module.CodeModule
	Call codemodule.InsertLines(codemodule.CountOfLines+1,str_script)
	
End Sub

Code
Function CreateButton(dbl_left As Double, dbl_top As Double, dbl_width As Double, dbl_height As Double, sheet As Variant, str_caption As String,str_scriptname As String) As Variant
	
	Const xlAutomatic = -4105
	Const xlUnderlineStyleNone = -4142
	
	sheet.Buttons.Add(dbl_left,dbl_top,dbl_width,dbl_height).Select
	sheet.Application.Selection.Characters.Text = str_caption
	With sheet.Application.Selection.Characters(1,9).Font
		.Name = "Marlett"
		.Size = 10
		.Strikethrough = False
		.Superscript = False
		.Subscript = False
		.OutlineFont = False
		.Shadow = False
		.Underline = xlUnderlineStyleNone
		.ColorIndex = xlAutomatic
	End With
	sheet.Application.Selection.OnAction = str_scriptname
	
End Function
[/list]
Gruß
Johnson

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz