5.8k Aufrufe
Gefragt in Datenbanken von
Hallo,

ich versuche aus Access 2010 auf Excel 2010 zuzugreifen. Alles klappt wunderbar.
Wenn ich jedoch Zellen markiere und anschließend mit dieser Markierung
weiterarbeiten will, geht das nicht. Der Befehl "selection" scheint unbekannt zu sein.
Kann mir jemand helfen?

Code:

Private Sub FormatExcelDat(datei)
Dim xlApp, xlBook, xlSheet As Object

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.workbooks.Open(datei)
Set xlSheet = xlBook.Worksheets(1)
xlSheet.range("A1:D1").Orientation = 90 'das funktioniert!
xlSheet.selection.Orientation = 0 'das nicht
selection.Orientation = 0 'das auch nicht
xlBook.Save
xlApp.Application.Quit
End Sub

Gruß
Mark

21 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Mark,

Abgesehen davon, dass VBA nicht mein Metier ist, kann ich nicht festellten was der VBA-Code können muss und verstehe auch die Problemstellung nicht, sodaß ich nicht in der Lage bin eventuell eine Alternative anbieten zu können.
Wo und wie wird im Code die zu bearbeitende Exceldatei angeführt.

Ich verstehe auch nicht, dass wenn eine Zelle markiert ist, ein Weiterarbeiten nicht möglich sein soll.

Im Web konnte ich folgende Empfehlungen recherchieren:

http://www.access-im-unternehmen.de/index1.php?id=300&BeitragID=780
http://www.freeaccess.de/
http://www.donkarl.com/

Gruß

Paul1
0 Punkte
Beantwortet von
Hallo Paul,

vielen Dank für die schnelle Reaktion.
Also ich habe über Access Daten von einer AS/400 "abgeholt" und
die Ergebnistabelle nach Excel exportiert. Nun wollte ich jedoch das
Excelergebnis gleich noch aus Access heraus formatieren. Zum
Beispiel den Text der ersten Zeile um 90 Grad drehen
(Orientation=90). Mit dem oben genannten Code will ich die Excel-
Datei öffnen und anschließend bearbeiten. Wenn ich den Bereich
also direkt anspreche:

xlSheet.Range("A1:D1").Orientation = 90

dann klappt das auch. Wenn ich nun den Bereich markieren will:

xlSheet.Range("A1:D1").Select

kommt auch noch kein Fehler. Aber in Excel könnte ich jetzt mit

Selection.Orientation = 90

weiterarbeiten. Aber aus Access heraus funktioniert das nicht.

Ich könnte nun jedesmal den Bereich mitschleppen, aber ich will
zum Beispiel auch die komplette erste Zeile (mit Inhalt) markieren
mit dem Code:

xlSheet.Range(Selection, Selection.End(xlToRight)).Select

Dazu bräuchte ich den Selection-Befehl.
Wenn es eine andere Möglichkeit gibt, gerne.

Gruß
Mark
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Hallo Mark,
versuche es doch mal statt
xlSheet.selection.Orientation = 0

mit einem Application in der Form:
xlSheet.Application.Selection.Orientation = 0

Ansonsten gibt es für Excel-Makros die Sparte Tabellenkalkulation, wo deine Frage besser aufgehoben wäre.

Gruß
0 Punkte
Beantwortet von
Hallo lorf55,

hey danke. Das hat zumindest ein Problem gelöst. Aber meine
Selektion der ersten Zeile klappt noch nicht:

xlSheet.Range(Selection,Selection.End(xlToRight)).Select

oder auch

xlSheet.Application.Range(xlSheet.Application.Selection,
xlSheet.Application.Selection.End(xlToRight)).Select

funktionieren nicht!

(Das oben ist der Code, den mir Excel bei der Makro-Aufzeichnung
für die Tastenkombi "Strg+Shift+Pfeilrechts" angeboten hat.)

P.S.
Hatte überlegt es in Tabellenkalkulation zu erstellen, aber dann
dachte ich, das Problem kommt ja ursprünglich aus Access. Ändern
geht nicht mehr, oder?

Gruß
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Mark,

wenn du in Excel per VBA die erste Zeile markieren willst, so würde das so aussehen:

Rows(1).Select


Gruß

M.O.
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Das oben ist der Code, den mir Excel bei der Makro-Aufzeichnung
für die Tastenkombi "Strg+Shift+Pfeilrechts" angeboten hat.

Ich nehme an, es fehlt nur ein xlApp, xlBook vorneweg.
Der Befehl als solcher ist OK.
0 Punkte
Beantwortet von
xlApp.xlBook.xlSheet.Application.Range(xlApp.xlBook.xlSheet.Application
.Selection,
xlApp.xlBook.xlSheet.Application.Selection.End(xlToRight)).Select

hat leider auch nicht funktioniert...
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
hat leider auch nicht funktioniert...


An welcher Stelle...?
Gabs Fehlermeldung oder nicht ...?
Und
Rows(1).Select
...?
0 Punkte
Beantwortet von
Rows(1).Select ist wieder nur die halbe Wahrheit, denn hier wird ja
die komplette Zeile markiert, so dass z. B. Rahmen über die
komplette Zeile gehen würden und nicht nur die ersten x Spalten.

Fehler wie folgt:
1 Private Sub FormatExcelDat(datei)
2 Dim xlApp, xlBook, xlSheet As Object

3 Set xlApp = CreateObject("Excel.Application")
4 Set xlBook = xlApp.workbooks.Open(datei)
5 Set xlSheet = xlBook.Worksheets(1)

6 xlSheet.Range("A1").Select
7xlApp.xlBook.xlSheet.Range(xlApp.xlBook.xlSheet.Application.select
ion, xlApp.xlBook.xlSheet.Application.selection.End(xlToRight)).Select
8 xlApp.xlBook.xlSheet.selection.font.bold=true
9 xlBook.Save
10 xlApp.Application.Quit
11 exit sub


Laufzeitfehler '438' in Zeile 7
Objekt unterstützt diese Eigenschaft oder Methode nicht
0 Punkte
Beantwortet von lorf55 Mitglied (699 Punkte)
Versuche das mal:
Private Sub FormatExcelDat(datei)
Dim xlApp, xlBook, xlSheet As Object

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("Mappe1.xls")
Set xlSheet = xlBook.Worksheets(1)

xlSheet.Range("A1").Select
xlSheet.Application.Range(xlSheet.Application.Selection, _
xlSheet.Application.Selection.End(xlToRight)).Select
xlSheet.Application.Selection.Font.Bold = True
xlBook.Save
xlApp.Application.Quit

End Sub


Gruß
...