2009-03-14 12 views
3

MS Access 2007で作成されたクエリをデバッグする際に(以前のすべてのバージョンで問題は同じでした)、クエリを実行して結果をExcelにコピーします。結果に応じて、バッチをAccessに切り替えて結果を絞り込み、クエリのデザインモードに戻ります。この時点で、私は迷惑な警告を得る:you copied a large amount of data onto the clipboard. ...Do you want to save this data on the clipboard?私はこれをやりたかったことはありません。警告を無効にする:大量のデータをクリップボードにコピーしました

MS Officeクリップボードが無効になっているため、この機能は標準のWindowsクリップボードで実行されています。警告を無効にし、デフォルトとしてNoとする方法はありますか?

答えて

3

。警告メッセージは、クリップボードに大量のものがある場合にのみ発生します。したがって、あなたが閉じる前に少量のものしかないことを確認してください。

例えば、私はこれを行う書いたマクロで:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Windows("iostatZd15.1").Activate 
ActiveWindow.WindowState = xlNormal 
ActiveSheet.Range("A1").Copy 
ActiveWindow.Close 

(すぐ近く前の)最後から2番目の行は「ダミー」である - コマンド単純に(BIG)電流を置き換えますクリップボードに非常に少量のデータが含まれています。できます。

1

MSクリップボードを無効にする必要があると思います。試してみてください:

  1. 実行中のプログラムをすべて終了してください。
  2. 開始をクリックし、ファイル名を指定して実行を次にクリックします。 regeditと入力し、[OK]をクリックします。
  3. レジストリエディタで、次のサブキー(フォルダ)を選択します。HKey_CURRENT_USER\Software\Microsoft\Office\9.0\Common\General
  4. [編集]メニューの[新規作成]をポイントし、[DWORD値]をクリックします。新しい値#1を選択し、AcbControlと入力し、Enterキーを押します。
  5. [編集]メニューの[変更]をクリックします。 [DWORD値の編集]ダイアログボックスで、[ベース]の[10進]をクリックします。 [値のデータ]ボックスに「1」と入力します。 [OK]をクリックし、レジストリエディタを終了します。

注:レジストリを変更することで、1つのOfficeプログラムのみOfficeクリップボードを無効(または有効)にすることはできません。ここで

は、アプリケーションを閉じたときにのみ、このメッセージを取得し、私の経験ではMS KB article

+0

感謝をすべてクリップボードのコピーをオフにしません。オフィスのクリップボードは既に無効になっています。複数のものをコピーすることは非常にまれです。それを明確にするために質問を編集します。 – Knox

1

です。 Accessに戻る前にExcelを終了していますか?もしそうなら、それを閉じずに、もはやメッセージを受け取らないかどうかを確認してください。

エラーを生成するための手順を試した後EDIT:

エラーメッセージを回避する唯一の方法は、のように、デザインビューに入る前に、通知をオフにすることです:

DoCmd.SetWarnings False 

そして、あなたがしたいと思います編集を終えた後に再びオンにすることができます。

ただし、アクセスUIを使用してクエリを編集するだけなので、このコードを実行する場所はありません。

私はよく分かりませんなぜこの警告は問題と考えられます。貼り付けて、デザインビューに戻ったり、条件を変更したり、再度実行したり、貼り付けたりしていますか?そうであれば、SetWarningsをオフにするとそのトリックを行うかもしれません。

自動的に実行したい場合は、これを行うにはScreen.ActiveDatasheetオブジェクトを使用すると考えられます。イミディエイトウィンドウで、その後、あなたは、データシートビューでクエリを開くと...

Public Function ChangeWarnings(bolSetting As Boolean) As Boolean 
    DoCmd.Setwarnings bolSetting 
    End Function 

次の2行を入力します:

Screen.ActiveDatasheet.OnActivate = "=ChangeWarnings(False)" 
    Screen.ActiveDatasheet.OnDeactivate = "=ChangeWarnings(True)" 

あなたが何をしたいと思い、関数を記述していますまた、これを設定するコードを書くこともできます。

1つのメモ - 別のものを開いたり閉じたりするときに、Screen.ActiveDatasheetオブジェクトに「スティック」しません。これは、イベントアクションを割り当てるときにアクティブなデータシートにのみ適用されます。

+1

こんにちは、デイヴィッド - 私は確かにあなたの意見を尊重しますが、いいえ、私はExcelを閉じていません。オープンアクセス、クエリの実行、結果のコピー、エクセルのオープン、結果のペースト、アクセスの選択、デザインビューの選択、警告の表示。 – Knox

1

フォームのOnCloseイベントを設定して、クリップボードをクリアすることができます。

以下のコードをデータベースのモジュールに入れてください。

Private Declare Function apiOpenClipboard Lib "User32" Alias 
"OpenClipboard" (ByVal hWnd As Long) As Long 

Private Declare Function apiEmptyClipboard Lib "User32" Alias 
"EmptyClipboard"() As Long 

Private Declare Function apiCloseClipboard Lib "User32" Alias 
"CloseClipboard"() As Long 

Function EmptyClipboard() 
    If apiOpenClipboard(0&) <> 0 Then 
    Call apiEmptyClipboard 
    Call apiCloseClipboard 
    End If 
End Function 

は、その後、あなたのフォーム使用のCloseイベントに:Excelの

EmptyClipboard 
+0

提案していただきありがとうございますが、私は直接クエリを実行しています。イベントを添付するフォームはありません。しかし、おそらく、私はAccessがフォーカスを得るたびにクリップボードをクリアするフォームを持つことができます。うーん。 – Knox

0

Fexcel = New Microsoft.Office.Interop.Excel.Application 
Fexcel.DisplayAlerts = False 

は、アクセスのために同じですか非常に簡単な解決策はこれにあり

+0

メッセージはAccessから送信されているので、これは無効です。 –

+0

David - あなたは明らかにそれを試していない。 – josh

0

Application.CutCopyMode = False

+0

注意してください。クリップボードのコピーがすべて無効になります。質問者は彼が「結果に応じて」これだけをしたいと言いました。 –

0

私はこの問題を常に抱えています。これをやらなければならないのは愚かなようですが、次の解決策ではそれを死に至らしめます。

' Copy something small into the clipboard 
Range("A1").Copy 

' Turn off CutCopyMode i.e., the "crawling ants" 
' Application.CutCopyMode = False solves a lot of problems, I do it as a precaution after I copy anything 
Application.CutCopyMode = False 

FALSE CutCopyMode =は、(別のポスターで述べたように)情報のため

関連する問題