Excel VBA質問箱 IV

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

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


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

【46295】Findメソッドの使い方 takatuki 07/1/29(月) 20:18 質問[未読]
【46300】Re:Findメソッドの使い方 かみちゃん 07/1/29(月) 20:59 発言[未読]
【46332】Re:Findメソッドの使い方 takatuki 07/1/31(水) 5:11 お礼[未読]
【46307】Re:Findメソッドの使い方 Kein 07/1/30(火) 0:09 発言[未読]
【46331】Re:Findメソッドの使い方 takatuki 07/1/31(水) 5:07 お礼[未読]
【46333】Re:Findメソッドの使い方 ichinose 07/1/31(水) 8:05 発言[未読]
【46335】Re:Findメソッドの使い方 Kein 07/1/31(水) 11:16 回答[未読]
【46308】Re:Findメソッドの使い方 Kein 07/1/30(火) 0:12 発言[未読]

【46295】Findメソッドの使い方
質問  takatuki  - 07/1/29(月) 20:18 -

引用なし
パスワード
   VBAでプログラムを作成したのですが、作者名を冒頭に例えば ’BY Tarou Yammoto
と入れて残したい。誰かが勝手に削除して書き換えてしまたら警告し作動しないようにしたい。
プログラム文の中でFindメソッドを使い”TarouYamamoto"が見つからない時、MSGBOXで警告文と
EXITSUBで終了させたいと考えています。
FindメソッドのオブジェクトがRange(Cells)しか使えないのでしょうか?
プログラム文の中を捜すときのオブジェクトは何でしょうかお教えください。
他に何か良い方法があるでしょうか?

【46300】Re:Findメソッドの使い方
発言  かみちゃん  - 07/1/29(月) 20:59 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>作者名を冒頭に例えば ’BY Tarou Yammoto
>と入れて残したい。誰かが勝手に削除して書き換えてしまたら警告し作動しない
>ようにしたい。

確認ですが、この情報は、シートのセルに入れるということですか?
それとも、何か別の場所に格納するのですか?

【46307】Re:Findメソッドの使い方
発言  Kein  - 07/1/30(火) 0:09 -

引用なし
パスワード
   いちおう、モジュール内で特定の文字列を探すための Findメソッド は、あります。
しかし Excel2002以降 では、VBE内の操作をするようなコードが、セキュリティ
の制限に引っかからないか懸念が残ります。当方は Ver2000 なので、そのへんが
よく分からないのです。参考のためにヘルプの抜粋をUPしておきます。

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

Find メソッド (VBA アドイン オブジェクト モデル)

アクティブ モジュール内で指定した文字列を検索します。

構文

object.Find(target, startline, startcol, endline, endcol [, wholeword]
[, matchcase] [, patternsearch]) As Boolean

Find メソッドの構文は、次の指定項目から構成されます。

指定項目 内容

object 必ず指定します。オブジェクトへの参照を表すオブジェクト式を指定します。
target 必ず指定します。
検索する文字列またはパターンを表す文字列型 (String) の値を指定します。
startline 必ず指定します。検索を開始する行を表す長整数型 (Long) の値を
指定します。検索で文字列が見つかった場合は、その行が設定されます。
最初の行番号は 1 になります。
startcol 必ず指定します。検索を開始する桁を表す長整数型 (Long) を指定します。
検索で文字列が見つかった場合は、その桁が設定されます。最初の桁番号は 1 に
なります。
endline 必ず指定します。検索する範囲の最終行を表す長整数型 (Long) の値を
指定します。-1 で最終行を指定できます。
endcol 必ず指定します。検索する範囲の最終桁を表す長整数型 (Long) を
指定します。-1 で最終桁を指定できます。
wholeword 省略可能です。完全に一致する単語だけを検索するかどうかを示す
ブール型 (Boolean) の値を指定します。True を設定すると、完全に一致する単語
だけが検索されます。既定値は False です。
matchcase 省略可能です。大文字および小文字を一致させるかどうかを示す
ブール型 (Boolean) の値を指定します。True を設定すると、大文字および小文字を
区別して検索が行われます。既定値は False です。
patternsearch 省略可能です。検索対象の文字列がパターン マッチングの形式
であるかどうかを示すブール型 (Boolean) の値を指定します。
True を設定すると、検索対象の文字列はパターン マッチングの形式であると
みなされます。既定値は False です。

Find メソッドの使用例
次の例は、Find メソッドを使用して、特定のコード ペインの指定された
行ブロックの 1261 行目から 1279 行目に文字列 "Tabs.Clear" が含まれているか
どうかを確認します。

Application.VBE.CodePanes(2).CodeModule _
.Find ("Tabs.Clear", 1261, 1, 1280, 1, False, False)

解説

検索で見つかった場合は真 (True) が返され、見つからなかった場合は偽 (False) が
返されます。
引数 matchcase と引数 patternmatch は相互に排他的です。両方の引数に True を
指定するとエラーになります。
[検索] ダイアログ ボックスの内容は、Find メソッドの影響を受けません。
検索対象となる指定範囲は、行の指定と桁の指定の両方で制限されます。
最終行の末尾まで検索を行うには、その行の最終桁または行の長さが endcol として
指定されていなければなりません。

【46308】Re:Findメソッドの使い方
発言  Kein  - 07/1/30(火) 0:12 -

引用なし
パスワード
   >誰かが勝手に削除して書き換えてしまたら
これには "Projectの保護" で対応するのが一般的でしょうね。
シートやブックに設定するのと同じように、パスワードも使えます。

【46331】Re:Findメソッドの使い方
お礼  takatuki  - 07/1/31(水) 5:07 -

引用なし
パスワード
   ▼Kein さん:
早速のお教えありがとうございます。世知辛い世の中ととお笑いでしょうが、当方が3年ほどかけて改良を重ねてきたソフトに私の名前を残しておきたい思いをお分かりください。
テストさせていただきますが、ひとつ疑問があります。下の使用例でCodePanes(2)の(2)はどいう意味なのでしょうか?お教えください。
Find メソッドの使用例
次の例は、Find メソッドを使用して、特定のコード ペインの指定された
行ブロックの 1261 行目から 1279 行目に文字列 "Tabs.Clear" が含まれているか
どうかを確認します。

Application.VBE.CodePanes(2).CodeModule _
.Find ("Tabs.Clear", 1261, 1, 1280, 1, False, False)

【46332】Re:Findメソッドの使い方
お礼  takatuki  - 07/1/31(水) 5:11 -

引用なし
パスワード
   ▼かみちゃん さん:
フォームをいれるものです。
よろしく。
>こんにちは。かみちゃん です。
>
>>作者名を冒頭に例えば ’BY Tarou Yammoto
>>と入れて残したい。誰かが勝手に削除して書き換えてしまたら警告し作動しない
>>ようにしたい。
>
>確認ですが、この情報は、シートのセルに入れるということですか?
>それとも、何か別の場所に格納するのですか?

【46333】Re:Findメソッドの使い方
発言  ichinose  - 07/1/31(水) 8:05 -

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

ブックの作者名を登録できますよね!!

新規ブックの標準モジュールにて

'=================================================
Sub testtest()
  MsgBox ThisWorkbook.BuiltinDocumentProperties("Author").Value
  Application.Dialogs(xlDialogProperties).Show
End Sub

この作者名を変えてしまうと実行できないようなコードにするという
方法はいかがですか?


これだと、Vbprojectの操作もないので 2002以降のセキュリティの問題も
クリアできますけどね!!

検討材料ということで・・・・。

【46335】Re:Findメソッドの使い方
回答  Kein  - 07/1/31(水) 11:16 -

引用なし
パスワード
   >CodePanes(2)の(2)はどいう意味
CodePanesコレクションの2番目(Index)、というような意味ですが
ちょっと分かりずらい例文ですよね・・。↓こんなふうに使えば良いか
と思います。

Sub MyCode_Search()
  Dim CkCode As Boolean
  Const ShSt As String = "SetWindowPos"
 
  CkCode = ThisWorkbook.VBProject.VBComponents("Module2") _
  .CodeModule.Find(ShSt, 1, 1, -1, -1, True)
  MsgBox ShSt & " は" & IIf(CkCode, "存在します", "見つかりません")
End Sub

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