tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: VB2005とエクセルの文法の違い
投稿日: 2007/12/06(Thu) 16:27
投稿者YuO
> VBAとVB2005では多少文法が変わるのでしょうか?
> それとも全く別の所が問題なのか..

別物と考えた方がよいです。
特に,ExcelをCOMで扱うのは変更が面倒な部類に入ります。

Excel VBAはExcelの内部で動作していますが,
VB2005で(VSTOを使わずに)Excelを操作する場合,
そのコードはExcelを外部から操作することになります。

そのため,Marshal.ReleaseComObjectを適切なタイミングで呼び出す必要があるなど,
大量の変更を行う必要があります。
# MSのKBのコードですら問題が指摘されていたりします。

> ちなみにマクロでは以下のような記述です。
> ActiveChart.SeriesCollection(1).Select
> ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlPolynomial, Order:=3 _
>         , Forward:=0, Backward:=0, DisplayEquation:=False, DisplayRSquared:= _
>         False).Select

これだけだと,
Imports System.Runtime.InteropServices
Imports Microsoft.Office.Interop.Excel

Dim chartObject As Chart
Dim seriesCollectionObject As SeriesCollection
Dim seriesObject As Series
Dim trendlinesObject As Trendlines
Dim trendlineObject As Trendline

Try
    chartObject = book.ActiveChart ' bookはWorkbookのインスタンス
    seriesCollectionObject = _
        TryCast(chartObject.SeriesCollection(), SeriesCollection)
    seriesObject = seriesCollectionObject.Item(1)
    seriesObject.Select()

    trendlinesObject = TryCast(seriesObject.TrendLines(), Trendlines)
    trendlineObject = trendlinesObject.Add( ... )
    trendlineObject.Select()
Finally
    If Not trendlineObject Is Nothing Then
        Marshal.ReleaseComObject(trendlineObject)
    End If
    If Not trendlinesObject Is Nothing Then
        Marshal.ReleaseComObject(trendlinesObject)
    End If
    If Not seriesObject Is Nothing Then
        Marshal.ReleaseComObject(seriesObject)
    End If
    If Not seriesCollectionObject Is Nothing Then
        Marshal.ReleaseComObject(seriesCollectionObject)
    End If
    If Not chartObject Is Nothing Then
        Marshal.ReleaseComObject(chartObject)
    End If
End Try
といった感じでしょうか。
# 動作確認はしていません。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。