tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2005とエクセルの文法の違い
記事No6616
投稿日: 2007/12/06(Thu) 15:12
投稿者oh!くん
Excel上で操作をマクロに保存して、そのマクロをそのままVBに移植すれば
動くかと思い試してみたのですが,思うように動きませんでした.

VBAとVB2005では多少文法が変わるのでしょうか?
それとも全く別の所が問題なのか..

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

文法が違うのであれば変更箇所等教えてほしいです。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: VB2005とエクセルの文法の違い
記事No6617
投稿日: 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
といった感じでしょうか。
# 動作確認はしていません。

[ツリー表示へ]
タイトルRe^2: VB2005とエクセルの文法の違い
記事No6647
投稿日: 2007/12/10(Mon) 14:58
投稿者oh!くん
返事が遅れてしまい申し訳ないです。
教えていただいたプログラムですが、無事VB上で近似式を表示させることができました。
ありがとうございました。

[ツリー表示へ]