Makro von OO nach Excel konvertieren

14/12/2010 - 11:46 von Karl Honig | Report spam
Hallo zusammen,

nach dem Umstieg von OO auf Excel 2010 muss ich ein Makro lauffaehig machen.

In OO heisst es:
myDoc = ThisComponent
blatt = myDoc.Sheets(0)

Wie geht dasselbe mit VBA?

Desweiteren wird eine Zelle in OO so ausgelesen:
Zelle = blatt.getCellByPosition(4 - 1, t - 1)

Wie ist die Entsprechung in VBA?
Oder wie finde ich diesbezuegliche Info?

(vereinfachtes Beispiel siehe unten)

Danke fuer Hinweise,
Karl




Sub C_Machen()

Dim deu As Long

Dim t As Integer

Dim Pfad As String
Dim GanzerName As String

Pfad = "D:\OUT\"

myDoc = ThisComponent
blatt = myDoc.Sheets(0) ****ERROR****

deu = FreeFile
Open Pfad & "DEU.TXR" For Output As #deu

For t = 1 To 3000

Zelle = blatt.getCellByPosition(4 - 1, t - 1)
wert = Zelle.String
Print #deu, wert

Next

Close #deu

Shell Pfad & "DO.EXE" & Pfad & "DEU.TXR", vbNormalFocus

End Sub
 

Lesen sie die antworten

#1 Andreas Killer
14/12/2010 - 19:46 | Warnen spam
Am 14.12.2010 11:46, schrieb Karl Honig:

Schöner Nachname. :-))

nach dem Umstieg von OO auf Excel 2010 muss ich ein Makro lauffaehig machen.

In OO heisst es:
myDoc = ThisComponent
blatt = myDoc.Sheets(0)

Wie geht dasselbe mit VBA?



In VBA ist die Datei (Mappe) das WorkBook, wobei es ein ThisWorkBook für die Datei in der das Makro làuft und ein
ActiveWorkBook für die Datei die gerade aktiv ist gibt.

Desweiteren ist ein Workbook, und fast alles andere auch, ein Objekt, daher musst Du es mit SET zuweisen.

Für die Tabellen gibt es das Sheet oder Worksheet Objekt, wobei das Worksheet immer eine "richtige" Tabelle ist, ein
Sheet kann auch eine Grafik als separates Blatt sein.

Das aktive Blatt heißt ActiveSheet und die Zàhlung beginnt bei Microsoft bei 1.

Obiges würde also 1:1 so aussehen:

Sub Test()
Dim WB As Workbook
Dim WS As Worksheet
Set WB = ThisWorkbook
Set WS = WB.Worksheets(1)
'oder
Set WS = WB.Sheets(1)
End Sub

Statt der 1 kann man bei Worksheets/Sheets auch einen String mit dem Blattnamen verwenden:
Set WS = WB.Worksheets("Tabelle1")
Set WS = WB.Sheets("Tabelle1")

Der Zugriff auf die Zellen ist einfacher und komfortabler, es gibt viele viele Möglichkeiten, das Range Objekt ist sehr
umfassend.

Außerdem braucht man nicht explizit auf die Datei und die Tabelle zu verweisen, ein Range Objekt ohne Bezeichner
verweist immer auf die gerade aktive Tabelle der gerade aktiven Datei.

Die linke obere Zelle bekàme man mit:

Sub Test2()
Dim R As Range
Dim Wert
Wert = Range("A1")
Wert = Cells(1, 1)
Set R = Range("A1")
Wert = R
Wert = R(1, 1)
Wert = [A1]
End Sub

Nicht wundern, Cells gibt auch ein Range Objekt zurück. Das Range Objekt hat als default die Value Eigenschaft, gibt
also den tatsàchlichen Wert zurück.

Möchtest Du den Inhalt der formatierten Zelle haben, dann musst Du die Text Eigenschaft nehmen:
Wert = Range("A1").Text
Für die Formeln gibt es ein ganzes Arsenal, die deutschen Formeln bekommst Du mit
Wert = Range("A1").FormulaLocal

Wenn Du Befehle nicht weißt, dann nimm den Makrorekorder zu Hilfe, die aufgezeichneten Makros sind zwar besch..eiden
aber funktionieren. Die Seite ist vielleicht ganz hilfreich: http://www.online-excel.de/excel/gr...ba.php?f=6

Ich hoffe ich hab Dein Makro richtig nach VBA übersetzt.

Andreas.

Option Explicit

Sub C_Machen()
Dim deu As Long
Dim t As Integer
Dim Pfad As String
Dim Wert
Pfad = "D:\OUT\"
deu = FreeFile
Open Pfad & "DEU.TXR" For Output As #deu
For t = 1 To 3000
Wert = Sheets(1).Cells(4, t)
Print #deu, Wert
Next
Close #deu
Shell Pfad & "DO.EXE" & Pfad & "DEU.TXR", vbNormalFocus
End Sub

Ähnliche fragen