4

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 クリップボードで実行されます。警告を無効にして、デフォルトをいいえと仮定する方法はありますか?

4

7 に答える 7

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) クリップボードを非常に少量のデータに単純に置き換えるコマンドです。できます。

于 2011-08-04T02:59:15.220 に答える
1

私の経験では、アプリケーションを閉じたときにのみこのメッセージが表示されます。Access に戻る前に Excel を閉じていますか? その場合は、閉じずに、メッセージが表示されなくなるかどうかを確認してください。

エラーを生成するための指示を試みた後に編集します。

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

  DoCmd.SetWarnings False

また、編集が完了したら、再びオンにする必要があります。

ただし、Access 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 オブジェクトに「固執」しません。イベント アクションを割り当てるときにアクティブなデータシートにのみ適用されます。

于 2009-03-14T22:16:09.737 に答える
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 イベントで次を使用します。

EmptyClipboard
于 2009-07-19T06:18:39.793 に答える
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の記事はこちら

于 2009-03-14T12:50:10.427 に答える
0

エクセルの場合:

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

アクセスについても同じことを行います

于 2009-10-14T17:23:25.263 に答える
0

Application.CutCopyMode = False

于 2014-01-29T00:29:00.213 に答える