2016-10-21 3 views
-1

私はスプレッドシートをワードマクロで読み込んでいますので、スプレッドシートを使用してテンプレートからドキュメントをインスタンス化し、インスタンス化されたドキュメントのプロパティをExcelテーブルから設定できます。私は可能な限り型を明示的にしようとしていますが、Excelの選択から戻ってくるオブジェクトには、ワードドキュメントの行とは異なる行が入力されています。実際には、私はそれについて考えて今は驚くべきことではありません。スプレッドシート行タイプとワードテーブル行タイプの間で、Objectよりも特定の共通基本クラスがありますか?おそらくその行の種類をExcelを指定する方法ですか?または、オブジェクトタイプを使用し、詳細について心配するのではないかと考えています。ダイナミックな型定義はここでは驚くべきですが、クラスメソッドのほとんどは同じです。VBA Interop:WordマクロでExcelデータ型を明示的に使用する方法はありますか?

私はまた、VBAからの単語ベースのVBAサブルーチン(通常の位置)を実行することにも興味があります。私はGoogleを介してそれを調べようとしたが、運がなかった。

根性はここにある:VBAエディタで

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 
+0

VBAはよく似ていませんが、面白いです。 – BenPen

+0

VBAエディタの[ツール]メニューの[参照設定]を選択し、Word VBAプロジェクトに "Microsoft Excel ##。#Object Library"を追加します。これにより、Excelのすべてのオブジェクトにアクセスできます。いくつかのオブジェクト名、例えば。 "範囲"は、WordとExcelの異なるオブジェクトを表します。したがって、必要に応じてWord.RangeまたはExcel.Rangeとして変数を宣言します。 – xidgel

+0

@xidgelああ、それは超簡単です、ねえ。それがまさに私が必要としていたものです。それを答えに変えて、私はこの質問に初級タグをつけます。 – BenPen

答えて

1

、[ツール]メニューの[参照]を選択し、 "Microsoft Excelの##を#オブジェクトライブラリ。" 追加するにはWordのVBAプロジェクトに。これにより、Excelのすべてのオブジェクトにアクセスできます。いくつかのオブジェクト名、例えば。 "範囲"は、WordとExcelの異なるオブジェクトを表します。したがって、必要に応じてWord.RangeまたはExcel.Rangeとして変数を宣言します。

+0

ありがとう!単語のnormal.dotmでExcelからサブルーチンにアクセスする同様の簡単な方法はありません、ありますか? – BenPen

+0

はいあります。私はコメントよりも読みやすくするために別の答えに投稿します。 – xidgel

0

ノーマルテンプレートのサブルーチンの1つを実行することに関するコメントに質問に答えてください。最初にExcelでWordオブジェクトモデルへの参照を追加します---ツールメニューで参照を選択し、 "Microsoft Word ##。#Object Library"をExcelプロジェクトに追加します。 Wordのサブルーチンを実行していることを

Sub RunNormalTemplateSub() 
    Dim wdapp As Word.Application 
    Dim wddoc As Word.Document 

    Set wdapp = New Word.Application 
    wdapp.Visible = True 

    ' This is the line that runs the sub 
    ' This runs a sub named "ThisIsATest" 
    ' in the module "Sandbox" 
    ' in the Project/Template "Normal" 
    wdapp.Run "Normal.Sandbox.ThisIsATest" 

    ' If the sub takes arguments then you would call 
    ' wdapp.Run "Normal.Sandbox.ThisIsATest", Arg1, Arg2 


    Set wdapp = Nothing 

End Sub 

注:その後、ここでは、標準テンプレートのサブをコールする方法の例です。私は、ExcelのWordサブルーチンを実行する方法を知っていない(おそらくそれを行うことができますが、私は方法を知らない)。

助けてくれること

+0

これはまた良いことです。私はとても長い間VBAでおしゃべりしてきましたが、このような簡単なものはまだ私を驚かせます。ドキュメントのVBA領域はどのようにベータ版ですか?ところで、私は単語がそれを実行することは良いと思う。それは、外国のVBAコードのために適切にアイロンをかけて対ワードのオブジェクトモデルを得るためにマイクロソフトの一部に体操を伴うでしょう。 – BenPen

関連する問題