過去ログ

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


分かりづらい説明な上に長文で申し訳ありませんが、どなたか知恵を貸してください。
よろしくお願いします。

 ───────────────────────────────────────  ■題名 : Re:Excelのオートシェイプのテキストの取得方法  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 04/1/13(火) 9:18  -------------------------------------------------------------------------
   ランさん、こんにちは

>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 が役立つでしょう。

 ───────────────────────────────────────  ■題名 : Re:Excelのオートシェイプのテキストの取得方法  ■名前 : ラン  ■日付 : 04/1/13(火) 16:29  -------------------------------------------------------------------------
   こうちゃんさん、返信ありがとうございます!

とりあえず言われた通りに処理を変更してみたのですが、動きません。
ForEach文でShapeの値を取ってきてるかどうか・・・。
もう少し掘り下げて調べてみようと思います。
どうもありがとうございました。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 479