|
2017/03/06(Mon) 19:21:58 編集(投稿者)
■No83077 (大吉 さん) に返信 > マクロでコードを作成して、それを参考にしても名前が見つからないというエラーになります。
どういうコードに対して、どの行が実行されたときに 「名前が見つからないというエラー」になるのでしょうか。
> Cellには文字を入力出来るのですが、図形テキストボックスへの入れ方がわかりません。
レスが付かないようなので、とりあえずサンプルだけ提示しておきます。 参考までにフォントや文字色も指定しているため、幾許か冗長的なコードになっています。
Option Strict On Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Core Imports System.Runtime.InteropServices Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim fullText As String = "サンプル:" & vbCrLf & "文字列値の入力" Dim altText As String = "テキストボックス"
Dim oApp As New Excel.Application() Dim oBooks As Excel.Workbooks = oApp.Workbooks Dim sheetsInNewWorkbook As Integer = oApp.SheetsInNewWorkbook
'1シートだけのブックを作成 oApp.SheetsInNewWorkbook = 1 Dim oBook As Excel.Workbook = oBooks.Add() oApp.SheetsInNewWorkbook = sheetsInNewWorkbook Dim oWorksheets As Excel.Sheets = oBook.Worksheets
Dim oSheet As Excel.Worksheet = DirectCast(oWorksheets(1), Excel.Worksheet) oSheet.Name = "シート1" Dim oShapes As Excel.Shapes = oSheet.Shapes
oApp.Visible = True
'貼り付ける座標を指定してテキストボックスを追加します Dim oTextBox As Excel.Shape = oShapes.AddTextbox( _ MsoTextOrientation.msoTextOrientationHorizontal, 30.0F, 30.0F, 280.0F, 160.0F)
'後で識別できるよう、一意な名前をつけておきます oTextBox.Name = "TextBoxSample1" ' '新規にテキストボックスを作成するのではなく、 '既存のブック上にあるテキストボックスを名前で検索するには '下記のように Item メソッドを通じてアクセスします ' 'oTextBox = oShapes.Item("TextBoxSample1")
'以下、フォントとか色とかマージンなどといろいろ指定していますが '「テキストボックスへ文字列を代入」するために本当に必要なのは★の行です oTextBox.AlternativeText = altText '代替テキスト
Dim oTF As Excel.TextFrame = oTextBox.TextFrame Dim oCharsAll As Excel.Characters = oTF.Characters()
Dim oFont As Excel.Font = oCharsAll.Font oFont.Name = "MS P明朝" oFont.Size = 12.0F oFont.Color = RGB(0, 0, 255)
'Excel 2007 以降では Font2 オブジェクトで指定する必要があるので 'バージョン分岐の処理を記述しています If Val(oApp.Version) >= 12.0 Then Dim oTF2 As Excel.TextFrame2 = oTextBox.TextFrame2 Dim oTxtRng2 As TextRange2 = oTF2.TextRange oTxtRng2.Text = fullText '★ Dim oFont2 As Font2 = oTxtRng2.Font oFont2.Name = CStr(oFont.Name) '[英数字用のフォント]を指定 oFont2.NameFarEast = CStr(oFont.Name) '[日本語用のフォント]を指定 RelaseComObject(oFont2) RelaseComObject(oTxtRng2) RelaseComObject(oTF2) Else oCharsAll.Text = fullText '★ End If RelaseComObject(oFont)
oTF.MarginLeft = 5 oTF.MarginTop = 5 oTF.MarginRight = 15 oTF.MarginBottom = 10
'先頭 5 文字だけ、書式を変更してみる Dim oChars As Excel.Characters = oTF.Characters(1, 5) RelaseComObject(oFont) oFont = oChars.Font oFont.Size = 9.0F oFont.Bold = True oFont.Color = RGB(255, 0, 0) RelaseComObject(oFont) RelaseComObject(oChars)
'後始末 RelaseComObject(oCharsAll) RelaseComObject(oTextBox) RelaseComObject(oShapes) RelaseComObject(oSheet) oBook.Saved = True RelaseComObject(oWorksheets) 'oBook.Close(SaveChanges:=False) RelaseComObject(oBook) RelaseComObject(oBooks) RelaseComObject(oWorksheets) 'oApp.Quit() RelaseComObject(oApp) End Sub
Private Shared Sub RelaseComObject(Of T As Class)(ByRef o As T, Optional ByVal final As Boolean = False) If o IsNot Nothing Then If Marshal.IsComObject(o) Then Dim released As Boolean = False If final Then Marshal.FinalReleaseComObject(o) released = True Else released = Marshal.ReleaseComObject(o) <= 0 End If If released Then o = Nothing End If Else Debug.WriteLine("COMオブジェクトではありません:" & o.GetType().FullName) End If End If End Sub End Class
上記では Version プロパティを用いて、Excel 2007 以降かどうかの判定処理を入れていますが、 文字列のセットだけでよいのなら、そもそも Font プロパティを辿る必要は無く、 Shapeオブジェクト.TextFrame.Characters().Text プロパティもしくは Shapeオブジェクト.TextFrame2.TextRange.Text プロパティを書き換えるだけで OK です。 (使用する COM オブジェクトの階層が深いので、ReleaseComObject の呼び忘れに注意)
ちなみに、Version プロパティの判定で If Val(oApp.Version) >= 12.0 Then のように Val を用いているのは、Version が String 値を返すためです。 とはいえ今回は Excel 2010 固定なので、判定コードは省略しても構いません。
"16.0" → Excel 2016 "15.0" → Excel 2013 "14.0" → Excel 2010 : "10.0" → Excel 2002 "9.0" → Excel 2000 : "8.0k" → Excel 97 Service Release 2 + Xl8p9pkg.exe : "8.0f" → Excel 97 Service Release 2 + Xl8p4pkg.exe "8.0e" → Excel 97 Service Release 2 "8.0d" → Excel 97 Service Release 1 + Xl8p3pkg.exe "8.0c" → Excel 97 Service Release 1 + Xl8p2pkg.exe "8.0b" → Excel 97 Service Release 1 + Xl8p1pkg.exe "8.0a" → Excel 97 Service Release 1 "8.0" → Excel 97 初版
|