Page 479 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼Excelのオートシェイプのテキストの取得方法 ラン 04/1/9(金) 18:26 ┗Re:Excelのオートシェイプのテキストの取得方法 こうちゃん 04/1/13(火) 9:18 ┗Re:Excelのオートシェイプのテキストの取得方法 ラン 04/1/13(火) 16:29 ─────────────────────────────────────── ■題名 : Excelのオートシェイプのテキストの取得方法 ■名前 : ラン ■日付 : 04/1/9(金) 18:26 -------------------------------------------------------------------------
初めまして、ランと申します。 現在、Access2000のVBAを使用して対象Excelファイルに存在する オートシェイプに書かれているテキストの値を 取得しようと思っているのですがなかなかうまくいかず、煮詰まってしまいました。 これがExcelVBAであれば、 --- Dim Obj_Shape As Shape ' オートシェイプのオブジェクト Dim File_Name As String ' ファイル名(フルパス指定) ' ファイルオープン Workbooks.Open Filename:=File_Name, UpdateLinks:=0 With Workbooks(File_Name).Worksheets(1) For Each Obj_Shape In .Shapes If Obj_Shape.Name = "テキスト 22" Then .Range("G" & i).Value = Obj_Shape.TextFrame.Characters.Text End If Next End With --- このような感じで取得する事ができたのですが、 AccessVBAの方ではこのShape型というのが存在しないように思います。 現状のコードは以下のようになっています。 (もちろんこのコードでは動作しません) --- Dim Obj_Shape As Variant Dim FileName As String Dim wk_Applicant As String Dim wk_ApplicantDay As Date ' ファイル名取得 FileName = "c:\Test.xls" ' Excel起動 Set objExcel = CreateObject("Excel.Application") ' ファイルオープン objExcel.Workbooks.Open FileName:=FileName With objExcel For Each Obj_Shape In .Workbooks(FileName).worksheets(1).Shape If Obj_Shape = "テキスト 21" Then wk_Applicant = Obj_Shape.TextFrame.Characters.Text ElseIf Obj_Shape = "テキスト 23" Then wk_ApplicantDay = Obj_Shape.TextFrame.Characters.Text End If Next ' Excel終了 .Quit End With --- 分かりづらい説明な上に長文で申し訳ありませんが、どなたか知恵を貸してください。 よろしくお願いします。 |
ランさん、こんにちは >AccessVBAの方ではこのShape型というのが存在しないように思います。 >現状のコードは以下のようになっています。 >(もちろんこのコードでは動作しません) とりあえず動作するようにしてみました、こんな感じです。 >Dim Obj_Shape As Variant >Dim FileName As String >Dim wk_Applicant As String >Dim wk_ApplicantDay As Date > >' ファイル名取得 >FileName = "c:\Test.xls" > >' Excel起動 >Set objExcel = CreateObject("Excel.Application") >' ファイルオープン >objExcel.Workbooks.Open FileName:=FileName > >With objExcel > For Each Obj_Shape In .Workbooks(FileName).worksheets(1).Shape For Each Obj_Shape In .Workbooks("Test.xls").worksheets(1).Shape > If Obj_Shape = "テキスト 21" Then If Obj_Shape.Name = "テキスト 21" Then > wk_Applicant = Obj_Shape.TextFrame.Characters.Text > ElseIf Obj_Shape = "テキスト 23" Then ElseIf Obj_Shape.Name = "テキスト 23" Then > wk_ApplicantDay = Obj_Shape.TextFrame.Characters.Text > End If > Next > > ' Excel終了 > .Quit >End With #エクセルで動作するようにしたものをAccessにもってくると今回のケースのようなエラーは防止できます。 #変数宣言はきちんとしたほうがいいような・・ Option Explicit が役立つでしょう。 |
こうちゃんさん、返信ありがとうございます! とりあえず言われた通りに処理を変更してみたのですが、動きません。 ForEach文でShapeの値を取ってきてるかどうか・・・。 もう少し掘り下げて調べてみようと思います。 どうもありがとうございました。 |