Excel VBA質問箱 IV

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

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


1357 / 13644 ツリー ←次へ | 前へ→

【74911】文字列の受け渡しでエラーがでます。。。 オレンジ 13/10/23(水) 12:22 質問[未読]
【74912】Re:文字列の受け渡しでエラーがでます。。。 ウッシ 13/10/23(水) 12:25 回答[未読]
【74913】Re:文字列の受け渡しでエラーがでます。。。 オレンジ 13/10/23(水) 15:14 お礼[未読]
【74922】Re:文字列の受け渡しでエラーがでます。。。 ichinose 13/10/26(土) 10:06 発言[未読]
【74927】Re:文字列の受け渡しでエラーがでます。。。 オレンジ 13/10/27(日) 15:12 お礼[未読]

【74911】文字列の受け渡しでエラーがでます。。。
質問  オレンジ  - 13/10/23(水) 12:22 -

引用なし
パスワード
   こんにちは、はじめまして。
このサイトを利用するのは初めてです。
無礼が無い様気をつけますので、どなたか助けていただけないでしょうか。

いま Sub から Function へ、文字列を渡して処理するコードを考えているのですが
コンパイルエラー「オブジェクトが必要です。」と出てうまくできません。

具体的なコードは以下です。


Sub test()
  
  ' String型で宣言 str
  Dim str As String
  
  ' 変数str に文字列を格納
  str = "商品名 AAA"
  Debug.Print TypeName(str) ' 結果:String
  Debug.Print str      ' 結果:商品名 AAA
  
  ' Function に変数str を渡す
  myFunc str
  
End Sub


Function myFunc(ByVal str As String)

  Debug.Print str
  
  Dim strTarget As String
  
  Set strTarget = str 'コンパイルエラー オブジェクトが必要です。
  ■■↑ここでエラーがでます。■■

End Function


私はVBA初心者ですので、分かりやすく教えていただけるとありがたいです。
皆さん、ご助言をお願い致します。
 

【74912】Re:文字列の受け渡しでエラーがでます。...
回答  ウッシ  - 13/10/23(水) 12:25 -

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

Dim strTarget As String

String型なのでSetは不要です。

strTarget = str

でいいです。

▼オレンジ さん:
>こんにちは、はじめまして。
>このサイトを利用するのは初めてです。
>無礼が無い様気をつけますので、どなたか助けていただけないでしょうか。
>
>いま Sub から Function へ、文字列を渡して処理するコードを考えているのですが
>コンパイルエラー「オブジェクトが必要です。」と出てうまくできません。
>
>具体的なコードは以下です。
>
>
>Sub test()
>  
>  ' String型で宣言 str
>  Dim str As String
>  
>  ' 変数str に文字列を格納
>  str = "商品名 AAA"
>  Debug.Print TypeName(str) ' 結果:String
>  Debug.Print str      ' 結果:商品名 AAA
>  
>  ' Function に変数str を渡す
>  myFunc str
>  
>End Sub
>
>
>Function myFunc(ByVal str As String)
>
>  Debug.Print str
>  
>  Dim strTarget As String
>  
>  Set strTarget = str 'コンパイルエラー オブジェクトが必要です。
>  ■■↑ここでエラーがでます。■■
>
>End Function
>
>
>私はVBA初心者ですので、分かりやすく教えていただけるとありがたいです。
>皆さん、ご助言をお願い致します。
>

【74913】Re:文字列の受け渡しでエラーがでます。...
お礼  オレンジ  - 13/10/23(水) 15:14 -

引用なし
パスワード
   ▼ウッシ さん:

ありがとうございます!
おっしゃるとおりでした!

>String型なのでSetは不要です。
こんな簡単な事だったんですね。。。

本当に助かりました。
ありがとうございました!
 

【74922】Re:文字列の受け渡しでエラーがでます。...
発言  ichinose  - 13/10/26(土) 10:06 -

引用なし
パスワード
   おはようございます。

ちょっと気になったので・・・。

コード内で strという変数を使われていますが・・・。


実は、VBAには、Strという関数が用意されています。

数値を文字列に変換する関数です。


sub test1()
  dim aa as long
  aa=1234
  msgbox str(aa)
end sub

別に予約語ではありませんから、strを変数に使っても構わないのでですが・・・。


sub test2()
  dim str as string
  dim aa as long
  aa=123
  msgbox str(aa)
end sub
    
test1では、正常に作動したプログラムがtest2では、エラーでプログラムが止まってしまいます。

sub test3()
  dim str as string
  dim aa as long
  aa=123
  msgbox vba.str(aa)
end sub

とすれば、問題なくプログラムは作動します。

プログラムに修正などで既にstr関数が使われているプロシジャーに対し、
このように strを変数として使ってしまうとしなくてもよい
余計な修正までしなくてはなりませんよね!!

君子危うきに近寄らず で、変数の命名はくれぐれも
ご注意を・・・。

もっとも私も変数の命名 下手なんですけど。

これが掲示板の例題なので使っただけで、普段はこんな命名しない

ということなら、余計なお世話ですが・・・・。

【74927】Re:文字列の受け渡しでエラーがでます。...
お礼  オレンジ  - 13/10/27(日) 15:12 -

引用なし
パスワード
   ichinoseさん

ご教示ありがとうございます。

なるほど、Strという関数があるのですね。知りませんでした。

ご推察のとおり、検証用に作ったコードなので実際には違う変数名ですが
Str関数があるのは知らなかったので、つまづく前に知れてよかったです!

ありがとうございます!

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