Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6009 / 13646 ツリー ←次へ | 前へ→

【47690】DrawingObjectsプロパティーについての質問です。 Runa 07/3/19(月) 14:56 質問[未読]
【47691】Re:DrawingObjectsプロパティーについての... ウッシ 07/3/19(月) 15:12 発言[未読]
【47693】Re:DrawingObjectsプロパティーについての... Runa 07/3/19(月) 16:04 質問[未読]
【47694】Re:DrawingObjectsプロパティーについての... ウッシ 07/3/19(月) 16:14 発言[未読]
【47695】Re:DrawingObjectsプロパティーについての... Kein 07/3/19(月) 16:33 発言[未読]
【47699】Re:セルのIndex? Runa 07/3/19(月) 17:50 質問[未読]
【47701】Re:セルのIndex? Kein 07/3/19(月) 18:14 発言[未読]
【47711】Re:セルのIndex? Runa 07/3/20(火) 10:30 お礼[未読]
【47692】Re:DrawingObjectsプロパティーについての... Kein 07/3/19(月) 15:22 発言[未読]

【47690】DrawingObjectsプロパティーについての質...
質問  Runa  - 07/3/19(月) 14:56 -

引用なし
パスワード
   初めて質問します。
Access始めたばかりで解らないことだらけです。
ご指導お願いします。


「WorksheetクラスのDrawingObjectsプロパティを取得できません。」
このエラーの解決法を教えてもらいたいです。


Accessを95→97→2003へコンバートする作業を行っています。
Excelも95からマクロ等をコピーしてExcel97で新規作成しところ
エラーが発生しました。


Dim i As Variant
Dim cp As Object

ループ
Set cp = Workbooks(book_name).Sheets(sheet_name).DrawingObjects(i)

※Debug.Print "i=" & i ⇒⇒⇒ "楕円 97" という値がはいっています。


調べたところ、
『このエラーは、名前に 1 つ以上の無効な文字が含まれている描画オブジェクト
(四角形、楕円、オートシェイプなど) を参照しようとした場合に発生します。

描画オブジェクト名に使用できる文字は次のとおりです。
●英数字 (A-Z、a-z、0-9) 
●空白 ( ) 
●アンダースコア (_) 』

と、ありました。(95は漢字はOKだった???)

そこで i = "Oval 97" をしてみましたが、同じエラーが出ました。

よろしくお願いします。

【47691】Re:DrawingObjectsプロパティーについて...
発言  ウッシ  - 07/3/19(月) 15:12 -

引用なし
パスワード
   こんにちは

>Access始めたばかりで解らないことだらけです。
>ご指導お願いします。
ExcelVBAの板なんですけど?

結局何が聞きたいのか分からないのですが?

Sub test()
  Dim cp As Object
  
  For Each cp In Worksheets("Sheet1").DrawingObjects
    Debug.Print cp.Name
  Next
End Sub

【47692】Re:DrawingObjectsプロパティーについて...
発言  Kein  - 07/3/19(月) 15:22 -

引用なし
パスワード
   変数 i に何を代入しているか ? ですが、Nameプロパティの値なら
String型で宣言します。それによる指定がうまくいかないなら、
整数型で宣言して Index を渡すようにしたら良いと思います。
Index なら、Excelのバージョンによる差は無いはずだからです。
シート内の全ての図形をループ処理するなら、ウッシさんのように
For Each 〜 Next で DrawingObjectsコレクションを見ていく
コードで充分でしょう。

【47693】Re:DrawingObjectsプロパティーについて...
質問  Runa  - 07/3/19(月) 16:04 -

引用なし
パスワード
   ウッシさん、keinさん回答ありがとうございます。
質問下手ですみません。m(__)m

>>Access始めたばかりで解らないことだらけです。
>>ご指導お願いします。
>ExcelVBAの板なんですけど?

AccessからExcelに表を表示する
という処理を行っています。

Excel内で表を描画するvbaマクロ処理でエラーが出るので、
こちらで質問させていただきました。


>
>結局何が聞きたいのか分からないのですが?

Excel内で別シートに設定されている、描画情報を読み込んで、
表に描画するところの処理でエラーが出ています。

「WorksheetクラスのDrawingObjectsプロパティを取得できません。」
★エラーの発生している原因がよく解らないので、教えて下さい。

エラーの箇所のDrawingObjects(j)のjには"楕円 97"(設定シートのセルに書いてある)が入ってきます。

  Dim Sheet1 As Worksheet
  Dim i As Long
  Dim j As Variant
  Dim cp As Object
  
  Windows(book_name1).Activate
  Set Sheet1 = Sheets("設定シート")
  
'  /* 線の情報をテーブルに設定する */
  For i = 1 To 10
    zukei_line(i).linetype = Sheet1.Cells(2 + i, 9).Value
    zukei_line(i).borderline = Sheet1.Cells(2 + i, 10).Value
    zukei_line(i).bordercolor = Sheet1.Cells(2 + i, 11).Value
    zukei_line(i).borderweight = Sheet1.Cells(2 + i, 12).Value
    zukei_line(i).linewidth = Sheet1.Cells(2 + i, 5).Value
    zukei_line(i).lineheight = Sheet1.Cells(2 + i, 6).Value
    zukei_line(i).intcolor = Sheet1.Cells(2 + i, 13).Value
    zukei_line(i).intpattern = Sheet1.Cells(2 + i, 14).Value
    zukei_line(i).intpattern2 = Sheet1.Cells(2 + i, 15).Value
  Next
  
'  /* 記号の情報をテーブル,シートに設定する */
  Windows(book_name1).Activate
  Sheets("表").Select
  For i = 1 To 10
    j = Sheet1.Cells(12 + i, 8).Value
    Set cp = Workbooks(book_name1).Sheets("設定シート").DrawingObjects(j)
    cp.Copy
'    Windows(book_name2).Activate
    Cells(i, 1).Select
    ActiveSheet.Paste
    zukei_mark(i) = ActiveSheet.DrawingObjects(i).Name
  Next

【47694】Re:DrawingObjectsプロパティーについて...
発言  ウッシ  - 07/3/19(月) 16:14 -

引用なし
パスワード
   こんにちは

先ほどのコードで「Sheet1」を「設定シート」に変更して
Sheet1.Cells(12 + i, 8).Value 以下に有る図形名とDebug.Printされた図形名
を比較してみてはどうでしょうか?

【47695】Re:DrawingObjectsプロパティーについて...
発言  Kein  - 07/3/19(月) 16:33 -

引用なし
パスワード
   先にも書いたように、Nameプロパティでの指定を止めて
Index を渡すようにしてみて下さい。例えば

j = 1   
For i = 1 To 10
  Set cp = Workbooks(book_name1).Sheets("設定シート").DrawingObjects(i)
  cp.Copy
  Workbooks(book_name2).Activate
  Sheets("Sheet1").Select
  Cells(j, 1).Select
  ActiveSheet.Paste
  Application.CutCopyMode = False
  Set cp = Nothing: j = j + 10
Next i

【47699】Re:セルのIndex?
質問  Runa  - 07/3/19(月) 17:50 -

引用なし
パスワード
   お返事が遅くなりました(汗)すみません。

ウッシさん、Kein さん
ありがとうございます。

Keinさんに教えてもらった通りに、
Indexを渡すとエラーが出なくなりました。

でも、セルのインデックス(H13・・・など)を渡すにはどうしたら良いでしょうか?

Cells(13,8)で試したら、またName?(楕円 97)が入ってしまいました。(T_T)

基本的なことかもしれませんが、よろしくお願いします。

【47701】Re:セルのIndex?
発言  Kein  - 07/3/19(月) 18:14 -

引用なし
パスワード
   Index の意味が分かってないですね・・。
それは「シート上に配置した順番」につく連番です。
その順番どおりに処理するのでなく、任意の順でやりたい場合は、
Index を配列に入れてループすれば良いのです。
まず「どの図形が何番のIndexになっているか ?」を調べるため

For i = 1 To 10
  Debug.Print Workbooks(book_name1).Sheets("設定シート") _
  .DrawingObjects(i).TopLeftCell.Address(0, 0) & " : " & i
Next i

というコードで、図形の位置から1〜10のIndexがどの図形についているか
調べます。そして例えば 3, 2, 5, 6, 7, 1, 9, 4, 8, 10 という順番で
処理したければ

Dim IndAry As Variant
Dim i As Integer

IndAry = Array(3, 2, 5, 6, 7, 1, 9, 4, 8, 10)
For i = 0 To 9
  Set cp = Workbooks(book_name1) _
  .Sheets("設定シート").DrawingObjects(i)

  省略

Next i

というように変更すれば、自由な順番で処理が出来るようになります。
とにかく、Nameプロパティでの指定は止めること。そうすることによって
うまくいったなら、わざわざ元のやり方に拘って悩む必要はないはずです。

【47711】Re:セルのIndex?
お礼  Runa  - 07/3/20(火) 10:30 -

引用なし
パスワード
   おはようございます。
昨日Keinさんに教えてもらった通りに手直ししたら、
きちんと表が描画されました。
とっても助かりました!ありがとうございましたm(_ _)m


  For i = 1 To 33
    Debug.Print Workbooks("book_name1").Sheets("設定シート") _
    .DrawingObjects(i).TopLeftCell.Address(RowAbsolute:=False) & " : " & i
  Next i

  
'  /* 記号の情報をテーブル,シートに設定する */
  Windows("book_name2").Activate
  Sheets("表").Select
  
  Dim IndAry As Variant
  IndAry = Array(19, 20, 21, 22, 13, 14, 23, 26, 25, 24)
  
  For i = 1 To 10
    Set cp = Workbooks("book_name1").Sheets("設定シート").DrawingObjects(IndAry(i - 1))
    cp.Copy

    Cells(i, 1).Select
    ActiveSheet.Paste    
  Next

6009 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free