マンガでよめる痔のこと・薬のこと

Dim、Private、Publicの違いを教えてください。

どのように使え分けるのですか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

VBSで、どの程度、使いこなせられるかにもよりますね。


一般のVB系の言語と違って、それらのステートメントは出会うことは少ないです。

Dim が入っているので、変数に対してのことだと思います。以下のように3つ並べてみて、その違いが分かるはずです。Dim と Public は、基本的には同じになります。ところが、Private は、呼び出せません。ただし、Function や Sub につけるキーワードは意味が変わります。

On Error Resume Next
Class myClass
Public FirstName
Private LastName
Dim Genr
Property Get FullName
Fullname = FirstName & " " & LastName & " " & Genr
End Property
Sub AddName(fname, lname, gnr)
Firstname = fname
LastName = lname
Genr = gnr
End Sub
End Class
Set Class1 = new myClass
Class1.Addname "Mari", "Yaguchi" ,"Talent"
MsgBox(class1.FirstName)
MsgBox(class1.LastName)
MsgBox(class1.Genr)
MsgBox(Err.Description)
'技術評論社 ポケットリファレンス『VBScript』p.42を参考
    • good
    • 0

オブジェクト指向プログラミングという概念を理解していますか?


していないとすると、違いを説明するのは難しいです(「そもそもオブジェクト指向とは」からの説明になるので)。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【VBScript】変数のスコープ

変数のスコープについて詳しく教えて下さい。

どこで宣言すれば、どこまで有効か知りたい。

条件分岐やループ、ファンクション等でのスコープが分かりません。

特に、ファンクションの中のファンクションとかです。

参考サイトやヒントだけでも良いので教えて下さい。

Aベストアンサー

少し厳しいかもしれませんが、ご自分でサンプルコードを書いて実行してみましたか?
そういう経験の積み重ねが土台を作る一つの要因になるのだと私は思っています。
もしも検証できない状況にあるのでしたら、ごめんなさい。

かく言う私自身、VBScriptには明るくないので、正しいかどうかわかりませんが、
結論から言うと以下の通りかと思っています。

■結論
・グローバル領域(=いかなるプロシージャにも所属しない領域)で宣言された変数は、どこからでも参照可
・プロシージャ内(←ネストレベルは関係ない)で宣言された変数は当該プロシージャ内のみで有効
・プロシージャのネスト時に参照可能な変数は、グローバル変数と自プロシージャ内で宣言された変数のみ(=自分を呼び出した親プロシージャ内の変数を参照することはできない)
・プロシージャの引数がグローバル変数と同名の場合、引数が優先される
・条件分岐やループの内側か外側かは関係ない(内側で宣言した変数を外側で参照できる)
#プロシージャ≒「ファンクション」です。

■参考URL
http://www.google.com/search?q=vbscript+%E5%A4%89%E6%95%B0+%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97
http://www.keynus.co.jp/~uhara/html/vbscript/16.htm

これで答えになっているでしょうか??

少し厳しいかもしれませんが、ご自分でサンプルコードを書いて実行してみましたか?
そういう経験の積み重ねが土台を作る一つの要因になるのだと私は思っています。
もしも検証できない状況にあるのでしたら、ごめんなさい。

かく言う私自身、VBScriptには明るくないので、正しいかどうかわかりませんが、
結論から言うと以下の通りかと思っています。

■結論
・グローバル領域(=いかなるプロシージャにも所属しない領域)で宣言された変数は、どこからでも参照可
・プロシージャ内(←ネストレベルは関係ない)...続きを読む

QVBSで変数の宣言はできないのですか?

VBSで、

Dim a As String
a = InputBox("MsgBoxに表示する値を入れてください。", , "test")
MsgBox a

と文章を作って、test.vbsで保存しました。
するとエラーになります。

Dim a As Stringの部分を消すと、問題なく作動します。

もしくは、

Dim a
a = InputBox("MsgBoxに表示する値を入れてください。", , "test")
MsgBox a

でも正常に動きます。
VBSで変数の宣言はできないのでしょうか?

Aベストアンサー

こっちの方がより面白いか。
自動型変換の便利さと危うさですね。

dim a
msgbox typename(a)
a=1
msgbox "a= " & a & " typename= " & typename(a)

a=a*100000
msgbox "a= " & a & " typename= " & typename(a)

a=a*0.1
msgbox "a= " & a & " typename= " & typename(a)

a= a & "b"
msgbox "a= " & a & " typename= " & typename(a)

a=a*1

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QVBSで"をエスケープする文字は?

VBSで"をエスケープする文字はなんでしょうか?

Aベストアンサー

エスケープといった考えが VBSではなかったように思います

"をあらわすには "で括る必要が生じます
たとえば "abc" といった内容なら """abc""" といったリテラルになります
一番外側の "のペアが 文字列としての"になります

"ab"cが欲しいなら """ab""c"
a"bc"が欲しいなら "a""bc"""
a"b"cがほしいなら "a""b""c"
といった具合になります

QVBS実行時エラー オブジェクトがありません 回避方法について

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだとは思うのですが、何が原因かがわからなく。。

○エラーメッセージ
エラー:オブジェクトがありません。:'objIE.Document.getElementByName(...)(...)'
コード:800A01A8
ソース:Microsoft VBScript 実行時エラー

○コード
'Option Explicit

Dim tmp 'CSV格納
Dim tmp2 'CSV分割
Dim SiteArray(10) 'ID,PW,URL格納
Dim SiteURL 'URL格納
Dim SiteID 'ID格納
Dim SitePW 'PW格納

Dim i
dim objFSO
dim stmCsvFile

'URL,ID,PWをCSVより読込
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set stmCsvFile = objFSO.OpenTextFile("C:\Users\***\Desktop\login.csv")

Do Until stmCsvFile.AtEndOfLine = True
tmp = stmCsvFile.readline
tmp2 = Split(tmp, ",")
SiteArray(i) = tmp2(1)
i = i + 1
Loop

stmcsvfile.Close


'URL,ID,PWを格納
SiteID = SiteArray(1)
SitePW = SiteArray(2)
SiteURL = SiteArray(0)

'---------- ひらく

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate SiteURL
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'---------- ID/PASSの入力

objIE.Document.getElementsByName("username")(0).Value = SiteID
objIE.Document.getElementsByName("password")(0).Value = SitePW

'---------- SUBMIT

objIE.Document.getElementsByName("login_form")(0).Submit
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'----------

宜しくお願い致します。

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだ...続きを読む

Aベストアンサー

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるかどうかさえ確認できませんよね。
その辺りはどうなんでしょうか?それで、Length プロパティを調べるように書いたわけです。

ふつう、例えば、ここの「教えて!goo」なんかでも、IDとパスワードは、きちんと、[ID(uname, pass)]を持っています。そしてIDには、添字は存在しません。

VBAがあれば、VBEditorのローカルウィンドウで、そのプロパティを確認していただくしかないと思います。もしかしたら、最初からとれていないのかもしれません。

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるか...続きを読む

Q定数配列の書き方

VB6で定数を定義する場合は次の通りです。

  Const strTest As String = "TEST"

では、定数配列を定義する場合はどのように書けばいいのでしょう?

  Const astrTest() As String = Array("A", "B", "C")      '→NG
  Const astrTest(0 To 2) As String = Array("A", "B", "C")  '→NG

いろいろな書き方を試して見たのですが、上記のような書き方でも文法的にエラーになるようです。

どのように書けばいいのでしょうか?

それとも定数を配列で定義するのは無理なんでしょうか?

Aベストアンサー

残念ですが、VBでご希望のことをすることはできません。

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qvbsでテキストファイル内の文字列検索

初心者です。

テキストファイルを指定し、含まれる文字列を検索し、
結果表示したいと考えております。

色々探して、以下で作成したのですが、
うまく動いてくれません。

出来ましたら、テキストファイルの中の文字列の
一部分を指定して動作させたいと思っております。

どなたかご教示のほど宜しくお願い致します。


----------------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim strSearchWord

Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt")

Do Until tmpFile.AtEndOfStream
tmpLine = tmpFile.ReadLine
strSearchWord = strSearchWord & tmpLine & vbcrlf
Loop


Dim SearchWord
SearchWord = split(strSearchWord," ")


if InStr(SearchWord(ix), "test")<>0 then
WScript.Echo " testを含みます。"
else
WScript.Echo " testを含みません。"

end if


----------------------------------------------------

初心者です。

テキストファイルを指定し、含まれる文字列を検索し、
結果表示したいと考えております。

色々探して、以下で作成したのですが、
うまく動いてくれません。

出来ましたら、テキストファイルの中の文字列の
一部分を指定して動作させたいと思っております。

どなたかご教示のほど宜しくお願い致します。


----------------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell...続きを読む

Aベストアンサー

こんにちは。

コードの細かい部分の目的としている部分は良く分からないけれども、少し直してみました。あくまでも、VBSです。元のコードは、ちょっと違うようです。

'-------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
'Set WshShell = CreateObject("WScript.Shell") '??
Dim strSearchWord
dim i
'-------------------------------------------
Public Const FileName ="C:\AAA.txt"
Public Const sWord =""test"
'-------------------------------------------
Set tmpFile = WSHFso.OpenTextFile(FileName)

Do Until tmpFile.AtEndOfStream
tmpLine = tmpFile.ReadLine
i = i + 1
nflg= fSearchWord (tmpLine)
If nflg Then Exit Do
Loop
If nflg Then
MsgBox i & "行目に" & sWord &"を含みます。",64
Else
MsgBox sWord &"を含みませんでした。",48
End If
'-------------------------------------------
Function fSearchWord(tmpLine)
Dim flg
SearchWord = Split(tmpLine," ")
For ix = LBound(SearchWord) To UBound(SearchWord)
If Len(Trim(SearchWord(ix))) > 0 Then
If InStr(1, SearchWord(ix), sWord, 1) > 0 Then
flg = True
Exit For
End If
End If
Next
fSearchWord = flg
End Function
'-------------------------------------------

こんにちは。

コードの細かい部分の目的としている部分は良く分からないけれども、少し直してみました。あくまでも、VBSです。元のコードは、ちょっと違うようです。

'-------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
'Set WshShell = CreateObject("WScript.Shell") '??
Dim strSearchWord
dim i
'-------------------------------------------
Public Const FileName ="C:\AAA.txt"
Public Const sWord =""test"
'---------------------...続きを読む

Qwindows script encoder ダウンロードできない

script encoderのダウンロードページが
存在しないとのメッセージで
ダウンロードできません。

もうできなくなってしまったのでしょうか
またwindows script encoder に代わる
無料ソフトの代用品は何かないでしょうか

Aベストアンサー

調べてみた・・・。
https://social.technet.microsoft.com/Forums/scriptcenter/en-US/7711b75b-4793-43b0-a5e1-6efa8b7bd00e/where-can-i-download-microsoft-script-encoder?forum=ITCG
の最後のレス(Moscさん)に英語版ですがリンク先が紹介されています。

https://social.technet.microsoft.com/Forums/scriptcenter/en-US/1d132da1-2014-4f34-87f5-d787e764995f/save-encrypted-password-in-vbscript?forum=ITCG#ed557f4e-471e-456d-af81-43c77ef1c318
の、James Whitlowさんのレスです。
(ダウンロードの直リンクを避けるためにこのような回答に)

で、1番目のリンクの、jrv さんによれば
『 script encoder into scrrun.dll 』ということなので、さらにGoogleと
https://gallery.technet.microsoft.com/Encode-and-Decode-a-VB-a480d74c#content
スクリプトファイルを作ってドラッグ・ドロップすればできますよ。
{script encoder(sce10en や sce10jp は必要ない)}
ということです。

調べてみた・・・。
https://social.technet.microsoft.com/Forums/scriptcenter/en-US/7711b75b-4793-43b0-a5e1-6efa8b7bd00e/where-can-i-download-microsoft-script-encoder?forum=ITCG
の最後のレス(Moscさん)に英語版ですがリンク先が紹介されています。

https://social.technet.microsoft.com/Forums/scriptcenter/en-US/1d132da1-2014-4f34-87f5-d787e764995f/save-encrypted-password-in-vbscript?forum=ITCG#ed557f4e-471e-456d-af81-43c77ef1c318
の、James Whitlowさんのレスです。
(ダウンロード...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報