A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#2です。
>つまり、Set csDataSet = New DataSetで
>=のみが代入の意味ではなく、オブジェクト変数を利用するということは、
>Set と = を使って csDataSetに代入するという理解でよろしいですか?
代入という言葉があっているかわかりませんが、これがインスタンス化です。
値を変数に代入するというイメージとは別です。
値を入れる場所を確保するというイメージの方がいいかと思われます。
>また、NewすることによってDataSetというオブジェクト変数をインスタンス化したものがcsDataSetとなり、
>ここでやっとcsDataSet.プロパティを使用できるということですよね??
はい、その通りです。
>あと調べている中で
>クラスは、VBでのClass型のオブジェクトです。
>これにより、自分自身を変数としてクラスに保持することができます。
>つまり、オブジェクトの階層構造を簡単に処理することができます。
>と書かれていたのですがもう少し分かりやすく教えていただけると嬉しいのですが、いかがでしょうか!?
これは自作のClassを作成した場合の話でしょう。
・String型に拡張機能を持たせる為に、自作のClassを作る。
・データを格納する為のClassを作った場合など。
----------------------------------------------------------------
通常、データを格納する際にメンバ変数などを使用します。
Dim strWk1 As String
Dim strWk2 As String
Dim strWk3 As String
Dim intWk1 As Integer
Dim intWk2 As Integer
この場合、全てワーク変数として使用しますが、型が違う為まとめるとしても下記のようになります。
Dim strWk(2) As String
Dim intWk(1) As Integer
※配列にする
これでデータを持つ変数を最小限に出来ました。
しかし、実はStringの1~3とIntegerの1~2には決まったデータの値を格納するからわかりやすい変数名をつけたいとする場合に、まとめる事ができません。
Dim strWk1 As String ⇒ Dim strShimei As String
Dim strWk2 As String ⇒ Dim strShimeiKana As String
Dim strWk3 As String ⇒ Dim strJusho As String
Dim intWk1 As Integer ⇒ Dim intNenrei As Integer
Dim intWk2 As Integer ⇒ Dim intKaisu As Integer
そこで、自作のClassを作成します。
Public Class Data_Wk
Public strWk1 As String or Public strShimei As String
Public strWk2 As String or Public strShimeiKana As String
Public strWk3 As String or Public strJusho As String
Public intWk1 As Integer or Public intNenrei As Integer
Public intWk2 As Integer or Public intKaisu As Integer
End Class
そうすると、先程の宣言が・・・
Dim clsWk As Data_Wk
となります。
後はSet clsWk = New Data_Wkとしてインスタンス化を行う事で、データ格納クラスができるというわけです。
No.2
- 回答日時:
横からすみません。
変数の宣言とNewの違いがわかってないみたいですね。
例えば・・・
Dim csDataSet As DataSet
csDataSetという入れ物が出来ただけです。
この状態だとDataSetのプロパティは使用できません。
Set csDataSet = New DataSet
Newを行う事でcsDataSetのインスタンス化を行います。
これで入れ物が実体となり、DataSetのプロパティを使用することが出来るわけです。
※実際にデバッグして使用するとわかります。
※実行した場合も「オブジェクトがインスタンスに設定されていません」というエラーが発生するかも。
既に実体として存在する物をSetする場合はNewする必要がありません。
但し、新たに変数を宣言して使用する場合はNewする必要があります。
ADO接続例
'変数の宣言
Dim cn As ADODB.Connection
'変数のインスタンス化
Set cn = New ADODB.Connection
'ADO接続
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Sample.mdb"
'接続OPEN
cn.Open
'メッセージ
MsgBox ("接続成功")
'接続CLOSE
cn.Close
'オブジェクトの開放
Set cn = Nothing
End
'変数のインスタンス化の部分をコメントアウトして実行するとADOによるDB接続が出来ない。
'接続先はSample.mdbとなっているので、必要に応じて変更する必要がある。
-------------------------------------------------------
Set hoge = オブジェクト.○○
Set hoge = New オブジェクト.(○○が出ない)
これはNewする時にプロパティやメソッドが宣言できませんという意味だと思いますよ。
この回答への補足
横でも縦でも入ってきてください笑
どこかの参考書か、ネットやらに、オブジェクト変数を使用する場合、
Setを使って値を代入すると書かれていました。
つまり、Set csDataSet = New DataSetで
=のみが代入の意味ではなく、オブジェクト変数を利用するということは、
Set と = を使って csDataSetに代入するという理解でよろしいですか?
また、NewすることによってDataSetというオブジェクト変数をインスタンス化したものがcsDataSetとなり、
ここでやっとcsDataSet.プロパティを使用できるということですよね??
あと調べている中で
クラスは、VBでのClass型のオブジェクトです。
これにより、自分自身を変数としてクラスに保持することができます。
つまり、オブジェクトの階層構造を簡単に処理することができます。
と書かれていたのですがもう少し分かりやすく教えていただけると嬉しいのですが、いかがでしょうか!?
No.1
- 回答日時:
ソースの具体例を挙げて、これとこれの違いが判らない、と言ってもらった方が的確な回答が得られると思いますが。
。。多少端折っていますが、以下簡単に書いてみます。
---
New については、オブジェクトを新たに作成する場合に必要です。
オブジェクトが既に利用可能になっている状態の時には、New する必要がありません(Access で言うと例えば CurrentDb が既に利用可能になっていると考えていて良い)。
また、New ではなく CreateObject ステートメントを使う場合がありますが、これは New しているのと同じことです。参照設定を追加していない場合には、 New の後ろのクラス名が指定できないので(そのクラス名がどこで定義されているのか VB からは判らない為)、CreateObject を使います。
---
ByVal と ByRef については、サブルーチンの引数に値を渡すケースで説明してみましょう。
ByVal を使うと、サブルーチン内でのみ有効な変数に、呼び出し元の変数の中身をコピーします。コピーするので、サブルーチンの中でその値を変更しても、呼び出し元に影響しません。
一方、ByRef を使うと、呼び出し元の変数自体を、サブルーチンの中で別の名前で利用できるようになります(語弊がありますが、判りやすくする為に今はこのように説明しておきます)。値の入れ物としての変数そのものは同じものを利用していますので、サブルーチンの中でその値を変更すると、呼び出し元の変数の値も変わります。
下記を実行してみてください。MsgBoxに「6」と表示されます。
Sub Test()
Dim i As Integer
i = 5
Call TestSub(i)
MsgBox i
End Sub
Sub TestSub(ByRef v As Integer) '★ByRef
v = v + 1
End Sub
下記を実行してみてください。MsgBoxに「5」と表示されます。
Sub Test()
Dim i As Integer
i = 5
Call TestSub(i)
MsgBox i
End Sub
Sub TestSub(ByVal v As Integer) '★ByVal
v = v + 1
End Sub
この回答への補足
>オブジェクトが既に利用可能になっている状態の時には、New する必要がありません
なるほど!!そういうことだったんですね!!オブジェクトを利用するにはNewを使ってインスタント化しなければ使えないとばかり思っていたので。。。
CurrentDbを調べてみると、メソッドとなっていますが、これはオブジェクトではないような気がするのですが。。。
>利用可能になっているものはNewを必要としていない。
これはどのようにすれば判断がつくのでしょうか?CurrentDbと調べても、特にそのような記載がないので
Dim db As dao.database
set db = currentDb
このdbはインスタンスということですね?
またサンプルソースは今手元にないのですが。。
どこかのソースで
Set hoge = オブジェクト.○○
Set hoge = New オブジェクト.(○○が出ない)
というソースを見た気がするのです。。
Newすることによってプロパティ、またはメソッドを参照することができないことってありますか?
あと、○○はメソッドorプロパティを意味しているのですが、最初に書くのはオブジェクトという解釈でいいんですよね?要するにオブジェクトに対して、振る舞いや状態を設定する・・・
という感じなんですが。
ByVal と ByRef については・・・
>めちゃくちゃ分かりました!!ありがとうございます!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 中学校 Do you want a new bag? Want you a new bag? この二つの違い 3 2022/07/30 15:55
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(悩み相談・人生相談) 資格勉強のスランプの乗り越え方や過ごし方を教えて頂けますか? 約1年半年ぐらい、登録販売者という資格 1 2023/02/11 20:20
- その他(悩み相談・人生相談) 頭がいいと勉強ができる。ってやっぱり違うんですか? 私の友達に凄く勉強ができる子がいます。 勉強がで 8 2022/08/12 00:52
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- 発達障害・ダウン症・自閉症 adhdについてです。高校一年生の女子です。 特性を自覚し始めたのは中学3年生のときで、そこからすご 7 2022/08/19 20:29
- その他(職業・資格) 頭の悪いFラン女子大生の私でも証券外務員2種の資格を取れるでしょうか。 私はFラン女子大生です。とて 2 2022/11/04 06:04
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- 中学校受験 中学受験 3 2022/11/13 21:17
- 心理学 貶す人の心理的な傾向 2 2022/08/22 11:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで =EMBED("Acrobat Docu...
-
COMコンポーネントって何?
-
ワイルドカード<?>と型パラメー...
-
ビジュアルC++でボタンの有...
-
JSPのout.printについて
-
多人数のじゃんけんプログラム
-
JAVAからHTMLへ値を返す方法
-
bmp画像をjpegやpng画像に圧縮...
-
パワーポイントのVBAでテキスト...
-
VBAのWindowオブジェクトとWork...
-
VBからBATファイルを起動して戻...
-
戻り値がクラスオブジェクト
-
オブジェクトに値を保持させる...
-
C#でフォームのオブジェクト名...
-
エプソンVP-930のESC/Pの操作に...
-
Vbで通常使用するプリンターを...
-
ワードで画像をドロップすると...
-
Date型オブジェクトから日付の...
-
newは明示的にした方が良いのか?
-
Google Apps Scriptの時刻の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
Object型からDouble型へのキャスト
-
JAVAからHTMLへ値を返す方法
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
戻り値がクラスオブジェクト
-
VBA 同じ名前のオブジェクトを...
-
ASP.net 教えてください!!(...
-
Vbで通常使用するプリンターを...
-
newは明示的にした方が良いのか?
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
bmp画像をjpegやpng画像に圧縮...
-
Accessの連結・非連結オブジェ...
おすすめ情報