Excel VBA質問箱 IV

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

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


1816 / 13645 ツリー ←次へ | 前へ→

【71744】図形の指定の仕方 ジロン 12/4/5(木) 12:25 質問[未読]
【71746】Re:図形の指定の仕方 とおりすぎ 12/4/5(木) 13:28 回答[未読]
【71747】Re:図形の指定の仕方 UO3 12/4/5(木) 14:12 発言[未読]
【71752】Re:図形の指定の仕方 ジロン 12/4/5(木) 22:35 お礼[未読]

【71744】図形の指定の仕方
質問  ジロン  - 12/4/5(木) 12:25 -

引用なし
パスワード
   こんにちは、よろしくお願いします

下記コードを書きましたが、コンパイルエラーがでます

やりたいこと:条件分岐で選ばれたシートをReturnSheet とし、そのシートのテキストボックス(Rectangle 27)にデータベースというシートの指定したセルの値を入れる
エラー箇所:※で印をつけます

Sub テスト()
Dim ReturnSheet As Worksheet


Sheets("データベース").Select

Cells(ActiveCell.Row, 2).Select
  If ActiveCell.Value = "A" Then
   Worksheets("sheet2").Select
   ElseIf ActiveCell.Value = "B" Then
    Worksheets("sheet3").Select
   ElseIf ActiveCell.Value = "C" Then
      Worksheets("sheet4").Select
  
  Else
        Worksheets("sheet5").Select
End If
  
 Set ReturnSheet = ActiveSheet
 
 
  Dim findvalue As Variant
 
  Sheets("データベース").Select
    
    findvalue = Cells(ActiveCell.Row, 4).Value
     
  
ReturnSheet.Select
  Shapes("Rectangle 27").DrawingObject.Formula = findvalue …※

  
End Sub

※subまたはfunctionが定義されていません とでます
正しい構文をご教示願えませんでしょうか?よろしくお願いします

【71746】Re:図形の指定の仕方
回答  とおりすぎ  - 12/4/5(木) 13:28 -

引用なし
パスワード
   ShapeにSheetが指定されていないから。

Select使用しない記述を覚えれば、こういった間違いは減る。

【71747】Re:図形の指定の仕方
発言  UO3  - 12/4/5(木) 14:12 -

引用なし
パスワード
   ▼ジロン さん:

既にとおりすぎさんからお答えが出ていますので蛇足というか別のことも含めて。
・まず、半角カタカナは、使わないほうがいいですよ。
 このブックが、社外から送られてきて、かつシート名の変更がプロテクトされているなら
 しょうがないのですが、そうでなければ全角で。
・変数は、プロシジャの先頭にまとめて記述したほうがわかりやすくなります。
・おそらく、この処理は
 操作者がデータベースシートをアクティブにして、そのどこかの行を選択した上で実行
 このようなものなんでしょうね。なので、ActiveCell というものを使うのはやむをえないとして
 それでも、コードであるセルをSelectして、ActiveCellとして使うのは、感心しません。
・同じことがシートにもいえます。とおりすぎさんがおっしゃっているように
 シートをSelectして、そのシートをアクティブシートとして使う方法も感心しません。
・コードの記述の開始桁がバラバラですね。インデントがついているようで、規則性がない。
 このようなコードは後で、自分が読むのに骨が折れますよ。

 ということを加味して、ちょっとお化粧直しをしてみました。
 ご参考まで。

Sub テスト()
  Dim ReturnSheet As Worksheet
  Dim findvalue As Variant
  Dim shn As String
  
  If ActiveSheet.Name <> "データベース" Then
    MsgBox "データベースシートをアクティブにして実行してください"
    Exit Sub
  End If
  
  findvalue = Cells(ActiveCell.Row, 4).Value
  Select Case Cells(ActiveCell.Row, 2).Value
    Case "A"
      shn = "Sheet2"
    Case "B"
      shn = "Sheet3"
    Case "C"
      shn = "Sheet4"
    Case Else
      shn = "Sheet5"
  End Select
  
  Sheets(shn).Shapes("Rectangle 27").DrawingObject.Formula = findvalue '…※

End Sub

【71752】Re:図形の指定の仕方
お礼  ジロン  - 12/4/5(木) 22:35 -

引用なし
パスワード
   とおりすぎさん、UO3 さんご回答ありがとうございます。

とおりすぎさん
selectを使わない記述というのは、
例えば withを使ったりする方法でしょうか?
何とか理解しようと勤めているのですが、なかなかうまくいかないことが多くて
結局select に頼ってしまっています。
勉強したいと思います。アドバイスありがとうございます。

UO3さん
>・まず、半角カタカナは、使わないほうがいいですよ。
>・変数は、プロシジャの先頭にまとめて記述したほうがわかりやすくなります。

わかりました。アドバイスありがとうございます。

>・おそらく、この処理は
> 操作者がデータベースシートをアクティブにして、そのどこかの行を選択した上で実行
> このようなものなんでしょうね。なので、ActiveCell というものを使うのはやむをえないとして
> それでも、コードであるセルをSelectして、ActiveCellとして使うのは、感心しません。
>・同じことがシートにもいえます。とおりすぎさんがおっしゃっているように
> シートをSelectして、そのシートをアクティブシートとして使う方法も感心しません。

Findなどを使って、セルを見つけ出す方法を試みたのですが、うまくいかなくて、結局こういう方法になりました。

>このようなコードは後で、自分が読むのに骨が折れますよ。

たしかに、おれます。

教えていただいたコードでうまくいきました。
ご教示とアドバイスありがとうございます。
まだまだ勉強不足で未熟ですが、コツコツレベルアップ目指して
がんばりたいと思います。感謝します。

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