Ich lese Daten aus einer Excel-Tabelle in einem Word-Makro, damit ich die Tabelle verwenden kann, um ein Dokument aus einer Vorlage zu instanziieren und Eigenschaften im instanziierten Dokument aus der Excel-Tabelle festzulegen. Ich versuche, mit Typen so explizit zu sein, wie ich kann, aber es stellt sich heraus, dass das Objekt, das von einer Excel-Auswahl zurückkommt, Zeilen anders als eine Zeile in einem Worddokument getippt hat. Nicht wirklich überraschend, jetzt, wo ich darüber nachdenke. Gibt es eine gemeinsame Basisklasse, die spezifischer ist als Object zwischen einem Tabellenkalkulations-Zeilentyp und einem Wort-Tabellen-Zeilentyp? Vielleicht eine Möglichkeit, diesen Excel-Zeilentyp anzugeben? Oder ist es am besten, den Objekttyp zu verwenden und sich nicht um die Details zu kümmern. Dynamisches Tippen ist hier erstaunlich, die meisten Klassenmethoden sind gleich.VBA Interop: Gibt es eine Möglichkeit, Excel-Datentypen explizit in einem Word-Makro zu verwenden und umgekehrt?
Ich bin auch daran interessiert, Word-basierte VBA-Subroutinen (in normalen) von Excel VBA laufen. Ich habe versucht, über Google nachzusehen, hatte aber kein Glück.
Die Eingeweide sind hier:
Set testList = LoadExcel(strFile)
testList.Activate
Dim allSuites As Object
' LoadExcel also selects the rows that contains the data we want in excel
Set allSuites = testList.sheets("FullSuiteList").Application.Selection
Dim myRow As row
Dim Columns() As String
Dim i As Integer
' Previously I used a table in word, but there are too many columns
' to be manageable
' LoadPropertyNames testList.Tables(1).Rows(1), Columns
' For i = 2 To testList.Tables(1).Rows.Count
' Now we get data directly from our Excel sheet
LoadPropertyNames allSuites.Rows(1), Columns
For i = 2 To allSuites.Rows.Count
CreateOne allSuites.Rows(i), Columns
Next I
' row type yields type mismatch at runtime. myrow as Object works though.
Function LoadPropertyNames(myRow As row, Columns() As String)
...
End Function
' row type yields type mismatch at runtime. myrow as Object works though.
Function CreateOne(myRow As row, Columns() As String)
...
End Function
Mit Blick auf die ähnlichen Fragen, VBA ist nicht gut hier, interessant. – BenPen
Wählen Sie im VBA-Editor im Menü Extras die Option Verweise, und fügen Sie Ihrem Word VBA-Projekt "Microsoft Excel ##. # Objektbibliothek" hinzu. Dadurch erhalten Sie Zugriff auf alle Excel-Objekte. Beachten Sie, dass einige Objektnamen, z. "Bereich" stellt verschiedene Objekte in Word vs. Excel dar, deklarieren Sie Variablen daher als Word.Range oder Excel.Range. – xidgel
@xidgel Oh, das ist super einfach, verdammt. Das ist genau das, was ich brauchte, verwandle das in eine Antwort, und ich werde das elementare Tag auf diese Frage setzen. – BenPen