プロが教えるわが家の防犯対策術!

EXCEL2003を使用しています。
検索する時、オプションの『セル内容が完全に同一であるものを検索する』がオンになってたりオフになってたりで、わずらわしさを感じています。デフォルトでオフの設定にする方法がありましたら教えて下さい。

A 回答 (12件中1~10件)

こんばんは。



>検索文字列はセルの文字列と一致しているものではなく

本来、こういう無料掲示板では、ここまで長く伸ばして、後だしの要求はしないほうがよいです。後で、内容を変えられると、書いてきたことが無意味になってしまいます。ここの掲示板は、また、質問者のリピーターも2割程度しかありません。

マクロは、勢いで書くものですから、間をあけられるのが一番つらいです。一旦、締めて、改めて質問されるほうが、まだ書きやすいです。(気が乗ればでずが)

私は、ある程度マクロが分かるつもりの人には、回答はしないようにはしているのですが、今回、思うことがあったので書きました。それは、DataObject オブジェクトでエラーが発生する原因を防ぐために考えてみました。「ある程度分かるつもりの人」が、一番、トラブルや評価がされないことが多いです。

今回、二度目のご質問になっていると思いますが、今後質問される時は、回答者を振り回さないようにしてください。

>少しこちらの作業を説明させて頂くと、検索文字列はセルの文字列と一致しているものではなく、他シートや他ブックのセル内に数行にわたって入力された文字列の中の数文字で、毎回探す語句は違います。

もし、ご自身で直せなければ、こういうことは、言わなければ分かりません。私の#11で書いたコードの似たようなものは、インターネット掲示板で有名な方も同様のコードを書いています。ただし、私は、誰のものを真似たものでもなく、オリジナルの工夫をしています。その程度は、ほんの少し変えれば済む問題です。

#7のコードのExcel 2003 用のものですから、それ以外を書き換えるつもりはありません。ただ、自分の中では、久々の会心の作だと思っていますが、意味が分からないとか、動かないとか言われても、何も言うことがありません。


二つのシートをまたいで検索をすると、エラーが発生することがありますが、改めて検索すれば、大丈夫です。

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

''Option Explicit
Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long
Private Const CF_TEXT As Long = 1

  Dim FirstAdd As String
  Dim strText As Variant
  Dim c As Range

Sub TestFind1()
  Dim objData As Object
  Dim myURange As Range
  Dim lastRng As Range
  Dim numFlg As Integer
  On Error GoTo ErrHandler
  Set myURange = ActiveSheet.UsedRange
  
   With myURange
     Set lastRng = .Cells(.Cells.Count)
   End With
  
  If c Is Nothing Then
    If IsClipboardFormatAvailable(CF_TEXT) <> 0 Then
      With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        strText = .GetText
      End With
    End If
    'バイナリコードの除去
    strText = WorksheetFunction.Clean(strText)
    If IsNumeric(strText) Then '数値の場合(数字全部)
      numFlg = 1
    Else '文字の場合(文字の一部)
      numFlg = 2
    End If
    '全半角のスペースの除去
    '   Do
    '    strText = Replace(strText, Space(1), "", , , 1)
    '   Loop Until InStr(1, strText, Space(1), 1) = 0
    
    Set c = myURange.Find( _
    What:=strText, _
    After:=lastRng, _
    LookIn:=xlValues, _
    LookAt:=numFlg, _
    MatchCase:=False, _
    SearchOrder:=xlByRows, _
    MatchByte:=False)
    
    If Not c Is Nothing Then
      FirstAdd = c.Address
      c.Select
    Else
      MsgBox strText & "は見つかりませんでした。", 48
      Set c = Nothing
    End If
  
  Else
    Set c = myURange.FindNext(c)
    If FirstAdd = c.Address Then
      If MsgBox("シートの最後まで検索しました。" & vbCrLf _
        & "最初に戻りますが、検索しますか?", 64 + vbYesNo) = vbNo Then
        strText = ""
        Set c = Nothing
        Set lastRng = Nothing
      Else
        c.Select
      End If
    End If
    If Not c Is Nothing Then
      c.Select
    End If
  End If
ErrHandler:
  If Err.Number <> 0 Then
    MsgBox Err.Number & " : " & Err.Description
    Set lastRng = Nothing
    Set c = Nothing
  End If
  Set myURange = Nothing
End Sub

この回答への補足

有難うございます。今回のVBAは無事動き、もしこんなVBAがあったらとても助かると思っていたものです。感謝いたします。
間を空けてしまった事、誠に申し訳ございません。回答者様を振り回すつもりは毛頭なかったのですが、説明不足のため、結果的にそうなってしまった事をお詫び致します。
正直言って、話がどんどん難しくなってしまったのと、残業続きで疲れてしまった事、私の第一希望は『検索オプションの「セル内容が完全に同一であるものを検索する」をデフォルトでオフにする事』なので、PDFMAKER.xlaの場所を移動する事で解決するかもという思い、折角作って頂いたのにコードが上手く動かない事をどうお伝えすれば良いのかと悩んでいました。それと、イメージしていたのは記録マクロで取得できる3行程のコードの検索文字列に当たる部分に「クリップボードの内容」を代入するという単純なものだったので(実行するたびに次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループ…というのは手作業で検索した時の動作なので、そんなに難しいと思わなかった)それじゃ駄目なのかな…と模索して、先ほど漸くそれっぽいものが出来ました。とはいえネットで探し当てたコードを代入しただけなので、エラーに対する処理がいまいちですが。でもお陰で、#10でおっしゃっていた事が漸く理解できました。お恥ずかしいですが、セルコピーで検索できるという事を今回初めて知りました。なのでなぜRangeオブジェクトのコピーというコードが出てくるのか理解できなかったのですが、エラー時の処理の事まで考えて下さったのですね。コピー対象が何であれ、取り出すのはテキストなのだから…と考えていたのですが、ホームページ等から文字列をコピーする事もありえるため、やはり私の拙いマクロでは無理があるようです。作って頂いたコードを使わせて頂く事にします。重ねて、有難うございました。

補足日時:2009/06/10 01:37
    • good
    • 0

こんにちは。



#9のxls88さんが、継続的に教えてくださるようには書かれてはいますので、一旦は、こちらのコードの掲示は遠慮をさせていただきましたが、取り組むだけの時間としてのタイムリミットを過ぎたような気がしますので、DataObject 型のコードを掲示しておきます。

検索文字をセルの上に置けば、それをコピーして検索します。この場合のポイントとしては、不要なコードの除去です。なお、私は、聞かれればお教えしますが、インストラクティブな回答はしておりませんので、ご了解ください。あくまでも、自分のためのコードです。

なお、参照設定は必要ありません。

''Option Explicit
Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Long) As Long
Private Const CF_TEXT As Long = 1

  Dim FirstAdd As String
  Dim strText As Variant
  Dim c As Range

Sub TestFind1()
  Dim objData As Object
  Dim myURange As Range
  Dim lastRng As Range
  Dim numFlg As Integer
  On Error GoTo ErrHandler
  Set myURange = ActiveSheet.UsedRange
  
  If strText = "" Or c Is Nothing Then
    If ActiveCell.Value = "" Then
      
      ActiveSheet.Cells.Find "", , -4163, 2, , 0, 0, 0 'ダミーで、メニュー・リセット
      Application.CommandBars.FindControl(, 1849).Execute
      Exit Sub
    
    Else
      ActiveCell.Copy
    End If
    With myURange
      Set lastRng = .Cells(.Cells.Count)
    End With
    If IsClipboardFormatAvailable(CF_TEXT) <> 0 Then
      With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .GetFromClipboard
        strText = .GetText
      End With
    End If
    'バイナリコードの除去
    strText = WorksheetFunction.Clean(strText)
    If IsNumeric(strText) Then '数値の場合(数字全部)
      numFlg = 1
    Else '文字の場合(文字の一部)
      numFlg = 2
    End If
    '全半角のスペースの除去
    '   Do
    '    strText = Replace(strText, Space(1), "", , , 1)
    '   Loop Until InStr(1, strText, Space(1), 1) = 0
    
    Set c = myURange.Find( _
    What:=strText, _
    After:=lastRng, _
    LookIn:=xlValues, _
    LookAt:=numFlg, _
    MatchCase:=False, _
    SearchOrder:=xlByRows, _
    MatchByte:=False)
    
    If Not c Is Nothing Then
      FirstAdd = c.Address
      c.Select
    Else
      MsgBox strText & "は見つかりませんでした。", 48
    End If
  
  Else
    Set c = myURange.FindNext(c)
    If FirstAdd = c.Address Then
      If MsgBox("シートの最後まで検索しました。" & vbCrLf _
        & "最初に戻りますが、検索しますか?", 64 + vbYesNo) = vbNo Then
        strText = ""
        Set c = Nothing
      Else
        c.Select
      End If
    End If
    If Not c Is Nothing Then
      c.Select
    End If
  End If
ErrHandler:
  If Err.Number <> 0 Then
    MsgBox Err.Number & " : " & Err.Description
  End If
  Set myURange = Nothing
  Application.CutCopyMode = False
End Sub

この回答への補足

ご丁寧に有難うございます。返事が遅くなり、申し訳ありません。
少しこちらの作業を説明させて頂くと、検索文字列はセルの文字列と一致しているものではなく、他シートや他ブックのセル内に数行にわたって入力された文字列の中の数文字で、毎回探す語句は違います。ですが、選択セルと同じ文字列を探す...という事でしたら、とても便利なマクロだと思います。

補足日時:2009/06/09 00:52
    • good
    • 0

こんばんは。



私のほうでも、DataObject を試してみました。

今まで、ずっと疑問に思っていたのですが、今回、改めて調べてみました。DataObject 側のClipBoard は、Text しか扱えないはずですが、一般的にClipBoard 側は、Text 以外のものも入るので、それを、そのまま、DataObject で扱うと、場合によっては、実行時エラーを出すことがあります。どうやら、そのための防護策を、作らないといけないようです。

例:
Private Declare Function IsClipboardFormatAvailable Lib "user32" ( ByVal wFormat As Long) As Long


If IsClipboardFormatAvailable(1&) <>0 Then
' ----実行----
End If

それと、String 型の変数の範囲は、たぶん、Chr(0) 以上だと思うのですが、しかし、それをそのまま使ってしまうと、Find メソッドで、その見えない文字を含めて探すようです。Range オブジェクトから、Value 値を取る分には、問題はないのですが、ClipBoard 側から取ると、どうやら、Find メソッドには、可視の文字以下のキャラクタも入ってしまうようです。こちらは、実行時エラーは発生しませんが、検索しても見つからないというときがあるようです。それらも、Rangeオブジェクトをコピーした後を考えて、対策をしないといけないようです。
OSは、関係しているかもしれませんが、ExcelのVersion 固有の問題でもなさそうです。

なかなか、難しいものですね。

この回答への補足

何度も有難うございます。
ちょっと話が難しくなってしまって焦っていますが、VBAのお話ですよね?^^;

補足日時:2009/06/09 00:49
    • good
    • 0

>回答番号:No.6 この回答への補足


こんな感じでどうでしょうか。

Sub test4()
  Dim TempObject As MSForms.DataObject
  Static f As Range
  Static ftxt As String
  Static firstAddress As String
  
  Set TempObject = New MSForms.DataObject
  With TempObject
    .GetFromClipboard
    If f Is Nothing Or ftxt <> .GetText Then
      If ftxt <> .GetText Then
        ftxt = .GetText
      End If
      Set f = Cells.Find(What:=ftxt, LookIn:=xlValues, _
        MatchCase:=False, LookAt:=xlPart, MatchByte:=False)
      If f Is Nothing Then
        MsgBox "Not Found!", vbExclamation
        Exit Sub
      End If
      firstAddress = f.Address
    Else
      Set f = Cells.FindNext(f)
      If firstAddress = f.Address Then
        MsgBox "Work Ended!"
        Set f = Nothing
        firstAddress = ""
      End If
    End If
  End With
  If Not f Is Nothing Then MsgBox f.Address
    
  Set TempObject = Nothing
End Sub

>MsgBoxで検索対象セルのアドレスを出すのではなく、
>そのセルにジャンプして欲しいのですが;
>ショートカットキーを押す度に次の検索対象セルに次々飛んでいき、
>最後に『シートの最後まで検索しました。
>最初に戻って検索を続けますか?』というMsgBoxが出てループする
上記については、ufufueheheさんご自身の手でやってみてください。
プログラミングの楽しさを味わっていただきたいと思います。
ジャンプするのは、Application.Goto メソッドを使えば良いかも知れません。
上手く出来ない場合は、補足していただければアドバイスさせていただきます。
その際には、試されたコードを合わせて提示してください。

この回答への補足

何度も有難うございます。
返事が遅くなり、本当に申し訳ありません。
セル番地を表示させる必要はまったくないので、このマクロは残念ですが使えません。
少し、自分でもいじってみたのですが、やはり難しいですね^^;
VBAは、簡単なものしか作ったことがないのですが、思い通りに動いた時は確かに快感だと思います。ですが、今はあまり時間が取れないので、#2のVBAを使わせていただこうかと考えています。

補足日時:2009/06/09 00:27
    • good
    • 0

こんばんは。



>アドビのPDFMAKER(拡張子メモるの忘れましたが、

PDFMAKER.xla だと思いますが、予想も付きませんでした。おそらく、これが原因です。XLSTARTフォルダで、Excelでは、そこには、xla はいけないはずです。アドビ側は、そういうようには考えてはないとは思いますが、トラブルの原因になります。(そうかなって思う人もいますが、XLSTART は、PERSONAL.XLS 以外に入れるのは基本的に良くないです。)

Windows XP:
C:\Documents and Settings\[User ID]\Application Data\Microsoft\AddIns\

ここに入れればよいのですが、ただ、一度、Excelのツール--アドインのところで、登録しなおさないといけません。登録しなおすとは言っても、アドインを開けて、[参照] で、ファイルを指定してあげれば、後は、Excel側で、前のものの処理とか聞いてくるかもしれませんので、その言うとおりにすればよいです。アドインは、アドインの場所に入れるというのが良いです。

>Excel11.xlbというのが、「メニューファイル(xlb)」なのでしょうか?
その通りです。Excelのファイルの構造上の問題で、設定値が入り込むといったほうが良いかもしれません。どうやら、こちらは、そのままで良いと思います。

また、Excel11.xlbファイルは、XLSTART の上位フォルダにあるものです。ついでに、Excelが健康なときに、これを、バックアップを取っておいたほうがよいです。Excelが、調子が悪くなった時に、このファイルを入れ替えてあげます。ついでに、WordのNormal.Dot ファイルも、バックアップを取っておくと、何かの時に役に立ちます。

#7のマクロは、

きちんと、標準モジュールに二つのマクロを登録したら、
当面は、ワークシート上で、Alt + F8 --> SearchExeTest で呼び出しいただければ分かるはずです。
ただの、「検索と置換のダイアログ」が、デフォルト状態で立ち上がるだけのものですが、クリップボードに文字が入っていれば、検索ボックスの中に貼り付けされます。

もし、気に入れば、コマンドボタンをインスタンスに入れて、組み込む方法を教えます。ただし、現行では、Excel 2003 のみになってしまうと思います。Excel 2007 でも、書き換えれば動くのですが、呼び出しの部分を調べていません。

なお、Function GetClipData()側は、途中で終わらせないようにしてください。ClipBoard がオープンしたままになってしまいますので、必ず、最後の、CloseClipboard で、終わらせてください。開いたままでしたら、別途、CloseClipboard だけのマクロを走らせれば、閉じます。

この回答への補足

有難うございます。
返事が遅くなり、大変申し訳ありませんでした。
XLSTARTに入っていたのは確かにPDFMAKER.xlaであり、教えて頂いた通りにアドインフォルダに移して様子を見たのですが、やはり現象が現れてしまいます。
#7のマクロですが、自宅で検証したところ、何も動かず、エラーメッセージも出ません...?

補足日時:2009/06/09 00:25
    • good
    • 0

こんにちは。



省エネの時代には、時代遅れのコードですが、久々に、こんなコードを作ってみました。#4で、これに触れようとは思ったのですが、出来る自信もありませんので、触れませんでした。

ふたつの標準モジュールに、それぞれ入れてください。ひとつにすると、メインテナンスがしにくいからです。本来は、これをメニューのコマンドボタンをインスタンスとして組み込むか、イベントにしてあげるのがよいと思います。どちらかというと、前者が優れています。

SearchExeTest をコマンドボタンなどに組み込めばよいです。

例:
Call SearchExeTest

'----------------------------------------------------
'モジュールの最上位に入れる
'検索と置換のダイアログボックスに、文字を送るマクロ
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
   ByVal lpClassName As String, _
   ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
   ByVal hWnd1 As Long, _
   ByVal hWnd2 As Long, _
   ByVal lpsz1 As String, _
   ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
   ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   lParam As Any) As Long

Private Const WM_PASTE As Long = &H302

'----実行---
Sub SearchExeTest()
  Dim hwnd As Long
  Dim hWnd_ As Long
  Dim msg As String
  Dim i As Long
  
  If Val(Application.Version) > 10 And Val(Application.Version) < 12 Then 'Excel 2002+2003 のみ
    ActiveSheet.Cells.Find "", , -4163, 2, , 0, 0, 0 'ダミーで、メニュー・リセット
    Application.CommandBars.FindControl(, 1849).Execute
  End If
  msg = GetClipData()
  If Len(msg) = 0 Then Exit Sub
  hwnd = FindWindowEx(0&, 0&, "bosa_sdm_XL9", "検索と置換")
  hWnd_ = FindWindowEx(hwnd, 0&, "EDTBX", vbNullString)
  msg = Trim(msg)
  
  If Len(msg) < 256 Then
    Call SendMessage(hWnd_, WM_PASTE, 0&, vbNullString)
  End If
End Sub
  

'-------------------------------------------------------
'モジュールの最上位に入れる
'クリップボードから文字を取得する(別のモジュールに入れてください)
Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" (ByVal wFormat As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long

Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long

Private Const CF_TEXT As Long = 1

Public Function GetClipData() As String
  Dim hMem As Long
  Dim p As Long
  Dim RetVal As Long
  Const MAXSIZE = 4194304 '2^22
  On Error GoTo ErrHandler
  If OpenClipboard(ByVal 0&) Then
    hMem = GetClipboardData(CF_TEXT)
    If hMem Then
      p = GlobalLock(hMem)
      If Not IsNull(p) Then
        GetClipData = Space$(MAXSIZE)
        RetVal = lstrcpy(GetClipData, p)
        RetVal = GlobalUnlock(hMem)
        GetClipData = Mid(GetClipData, 1, InStr(1, GetClipData, Chr$(0), 0) - 1)
      Else
        Err.Raise 51
      End If
    End If
ErrHandler:
    CloseClipboard
  End If
End Function


参考にしたところ
http://hp.vector.co.jp/authors/VA024411/vbtips03 …
テキストボックス

この回答への補足

何度もご回答、有難うございます。
済みません、せっかく組んで下さったのにコードが難しくて、どういう動きをするのか判りません(汗) どういうタイミングで実行すれば良いのでしょうか?

補足日時:2009/06/05 01:34
    • good
    • 0

>回答番号:No.2 この回答への補足


参照設定されていないのかもしれません。
確か、Microsoft Forms2.0 Object Libraryだったと思います。
下記を参考に設定してみてください。
クリップボードとデータのやりとりをする
http://www.moug.net/tech/exvba/0150091.htm
マクロで参照設定を操作する
http://officetanaka.net/excel/vba/tips/tips100.htm

>もし検索文字列をコピー後、
>ショートカットキーを押しただけで検索対象に行きつけたとしたら
検索ダイアログを持ち出す必要は無いですね。
Sub test3()
  Dim TempObject As MSForms.DataObject
  Dim f As Range
  Dim firstAddress As String
  
  Set TempObject = New MSForms.DataObject
  With TempObject
    .GetFromClipboard
    Set f = Cells.Find(What:=.GetText, LookIn:=xlValues, _
      MatchCase:=False, LookAt:=xlPart, MatchByte:=False)
    If f Is Nothing Then
      MsgBox "Not Found!", vbExclamation
      Exit Sub
    End If
    firstAddress = f.Address
    Do
      MsgBox f.Address
      Set f = Cells.FindNext(f)
    Loop Until f.Address = firstAddress
  End With
    
  Set TempObject = Nothing
End Sub

この回答への補足

何度もご回答、本当に有難うございます。
参照設定、やっと理解できまして(汗)test2もしっかり動くようになりましたv
ですが、MsgBoxで検索対象セルのアドレスを出すのではなく、そのセルにジャンプして欲しいのですが; ショートカットキーを押す度に次の検索対象セルに次々飛んでいき、最後に『シートの最後まで検索しました。最初に戻って検索を続けますか?』というMsgBoxが出てループする…というのは無理(もしくは大変)でしょうか?

補足日時:2009/06/05 01:24
    • good
    • 0

私も「セルの内容が・・」にチェックを入れて、保存してみましたが、新たに開くと、「セルの内容が・・」はOffで出てきました。


この設定状態はエクセルファイルの設定としてファイル保存されないのではないですか。保存する必要がないとおもいますし。(いつも何か決まった課題で、全部一致の操作を多数回する人には毎回設定ガ必要で気の毒だが。)
ブックを閉じるまでに、他語句で検索するとか別シートなどを検索する場合は、閉じるまでは、もちろんその後は、直前のオプションが保存されるようです。
色んな場合とかの関連がわからないから難しいわけで、本当は1例ぐらいでは何もいえませんが、(質問の情況に疑問が湧き)1例として参考にして、見直しに役立ててください。

この回答への補足

有難うございます。皆様に色々アドバイスを頂き、もしかしてアドインファイルのせい?という気もして来ました。パスワードがかかっていて、ファイルの中を勝手に見ることはできないのですが、もしそうなら、上にかけあって、パスワードを教えてもらおうかとも考えています。
「セルの内容が・・」が毎回オンになっているならともかく、バラバラなので、いちいちオプション押してオンオフ確認して…という状況でしたので;
#2さんのVBAが導入できれば問題解決ですが、それとは別に、なぜこうなるのか?はやはり知りたいと思います。

補足日時:2009/06/03 23:13
    • good
    • 0

こんにちは。



>オンにした事もないのに、Excel立ち上げと検索を繰り返していくうちに、時々勝手にオン状態になっています。

やはり、そうだったのですね。ちょっと質問がヘンだなって思って読んでいました。

Excel 2003 + Win XP の設定でお話させていただきますが、
通常、メニューファイル
C:\Documents and Settings\[User ID]\Application Data\Microsoft\Excel\Excel11.xlb

これを、バックアップを取ってから、削除するといいます。

しかし、
C:\Documents and Settings\[User ID]\Application Data\Microsoft\Excel\XLSTART\PERSONAL.xls

こちらを、バックアップを取ってから、削除して直ることがあります。
ただし、設定されたメニューがリセットされてしまいます。

こちらの「個人用マクロブック」のファイルは、一般のxlsファイルですから、中身は取り出すことができます。

# C:\Documents and Settings\[User ID]\Application Data\Microsoft\Excel\XLSTART\
ここの中に異物のファイルが、仮にテキストファイルでも入っていると調子がおかしくなるようですね。

PERSONAL.xls こちらから先に試してみたほうがよいかもしれません。

それで、原因ですが、ファイルの中に設定が残ってしまうことがあるようですね。一応、この経験はしているのですが、人それぞれに事情が違うようです。

この回答への補足

重ねてのご回答、有難うございます。
Excel11.xlbというのが、「メニューファイル(xlb)」なのでしょうか?
レスポンス遅くて申し訳ないですが、明日会社で確認してみます。
ただ、多分ですが、私がマクロを書き込むまでPERSONAL.xlsは存在してなかったような気がします…
アドインとして、3種類ほどのVBA用のファイルが同時に立ち上がる設定がされているようなので、もしかしたらそのどれかに支障があるのかも?

補足日時:2009/06/03 23:00
    • good
    • 0
この回答へのお礼

済みません、会社ではあまり時間が取れなくて、Excel11.xlbの検証は無理でした。とりあえず「XLSTART」の中身だけ確認しましたが、アドビのPDFMAKER(拡張子メモるの忘れましたが、Acrobatがインストールされてるので、その関係だと思います)が入ってるだけでした。

お礼日時:2009/06/05 01:07

こんにちは。



マクロは出来上がっているようですね。
少し、割り込ませていただくと、検索ダイアログは、デフォルトで、オフになっているはすです。しかし、Excel を起動したときに、その設定が残っているという意味でしょうか。もし、そうなら、たぶん、メニューファイル(xlb)が、Read Only になっているか、トラブルが発生しているように思います。

しかし、検索するたびに、デフォルトのオフにするということですと、マクロとは言っても、まったく種類の違うものです。Excel 2002 ~2003 専用になると思いますが、編集メニューのコマンドボタンに、Class インスタンスを、設けてあげなくてはなりません。

実際の検索に対しては、#2さんのコードの部分の、accDoDefaultAction メソッドなら、デフォルトにはなるはずです。

この回答への補足

有難うございます。
> 検索ダイアログは、デフォルトで、オフに
なっていません;(ホントにバラバラです) しかも、オンにした事もないのに、Excel立ち上げと検索を繰り返していくうちに、時々勝手にオン状態になっています。トラブル発生という事でしたら、どうすれば直りますか?

補足日時:2009/06/03 12:56
    • good
    • 0

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