Autor Thema: xlsheet.copy(... funktioniert nicht  (Gelesen 5114 mal)

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
xlsheet.copy(... funktioniert nicht
« am: 05.02.16 - 13:34:12 »
Ich will beim Austauschen einer Excel-Tabelle (Notes-Dateianhang) benutzerdefinierte Tabellenblätter in die neue Vorlage hinüberkopieren:
Code
			'check for user defined worksheets in original template
			c = excelobj_o.Workbooks(1).Worksheets.Count
			For x = 1 To c
				wsn$=excelobj_o.Workbooks(1).Worksheets(x).Name
				If wsn$ <> "Performance Analysis" and wsn$ <> "Reportinfos" And wsn$ <> "PA-Export" And wsn$ <> "Translations" Then
					Set xlsheet_o = excelobj_o.Workbooks(1).Worksheets(wsn$)
					Print "copying user defined worksheet " & wsn$
					Set lastsheet = excelobj_n.ActiveWorkbook.Worksheets(excelobj_n.ActiveWorkbook.Worksheets.Count)
					Set xlsheet_o = excelobj_o.Workbooks(1).Worksheets(wsn$)
					Call  xlsheet_o.Copy(Null,lastsheet)	
					Call excelobj_n.ActiveWorkbook.Save	
					MsgBox excelobj_n.ActiveWorkbook.Worksheets.Count			
				End If
			Next		

Tut aber nix. Die MsgBox gibt für die neue Tabelle die Anzahl der bereits vordefinierten Arbeitsblätter zurück; das Arbeitsblatt xlsheet_o wird nicht kopiert (Zuweisung passt - xlsheet_o.Name gibt korrekt den Namen zurück).

Bin ein wenig ratlos...
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: xlsheet.copy(... funktioniert nicht
« Antwort #1 am: 05.02.16 - 21:48:54 »
Ich habe jetzt kein Excel da um das zu testen, aber wenn Du beide Templates auf der Platte hast, dann würde ich das wohl in etwa so probieren
Code
tempDir$ = Environ("Temp")
set xlwbTemplateOld_o = excelobj_o.Workbooks.Open(tempDir$ & "\Template_Old.xlt")
set xlwbTemplateNew_o = excelobj_o.Workbooks.Open(tempDir$ & "\"Template_New.xlt")
orginalSheetNames(0) = "Performance Analysis"
orginalSheetNames(1) = "Reportinfos"
orginalSheetNames(2) = "PA-Export"
orginalSheetNames(3) = "Translations"
countOld = xlwbTemplateOld_o.Worksheets.Count
countNew = xlwbTemplateNew_o.Worksheets.Count
Print "count (before): ", Cstr(countNew)
doSave = False
For index = 1 To countOLD
	wsn$ = xlwbTemplateOld_o.Worksheets(index).Name
	If IsNull(Arraygetindex(orginalSheetNames, wsn$)) Then	
		Set xlsheet_o = xlwbTemplateOld_o.Worksheets(wsn$)
		Print "copying user defined worksheet " & wsn$
		Set lastsheet_o = xlwbTemplateNew_o.Worksheets(countNew)
		Call xlsheet_o.Copy(Null,lastsheet_o)	
		doSave = True
		countNew = xlwbTemplateNew_o.Worksheets.Count
		Print "count (current): ", Cstr(countNew)
	End If
Next index
Print "count (after): ", Cstr(countNew)
If doSave = True Then
	Call xlwbTemplateNew_o.Save
End If
« Letzte Änderung: 05.02.16 - 21:57:24 von Andrew Harder »
Andy

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: xlsheet.copy(... funktioniert nicht
« Antwort #2 am: 10.02.16 - 11:40:50 »
War ladürnich wieder ein Freitagspost... das ging deshalb nicht, weil ich mit zwei verschiedenen Excel-Instanzen gearbeitet hatte - und noch dazu vergessen, das On Error Resume... auszukommentieren. Im selben Excel.Application-Objekt funktioniert es einwandfrei.

Aber danke für Deinen Wink mit dem Array-Pfahl  ;) Ist natürlich sauberer, weil ich auf diese Weise die zu berücksichtigenden Vorlage-Tabellenblätter im Template-Sheet anstatt im Code definieren kann.
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz