• 締切済み

エクセルに関連付けられたプリンタ情報削除

VBAでエクセルのファイルに有るプリンタ情報を消すことは可能でしょうか? office2010をWindowsXPで使用しているのですが、 会社内で色々な部署からエクセルファイルをもらって、チェックをして、 別の部署に引き渡すという作業をしています。 最終的に引き渡された部署(40箇所ぐらい)の方々が、ファイルを印刷するのですが、 印刷情報がエクセルに組み込まれているファイルがあるようで、 白黒で出てくる、両面印刷で出てくる、トナーセーブで出てくる、 想定外のプリンタから出てくるなどクレームが上がってくる事があります。 月に800ファイルほどチェックするので、1つずつ対処するのは大変です。 そこでVBAでプリンタ情報を消すことは可能でしょうか? 処理するパソコンのデフォルトの設定で印刷できるようにしたいです。 沢山のファイルを一気にチェックするVBAなどは作ってあるので、 それに組み込もうと思います。 よろしくお願いします。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

エクセルはシート毎に印刷設定を保持していて、これをリセットするにはActivePrinterを切り替えれば良いです。 (さすがにシート毎に実行しなくても良いらしいです。) http://www.freia.jp/taka/blog/697/ ActivePrinterをWindowsの標準プリンターに設定するコードを書いて(切り貼りして)みましたが、大げさですね。もっとスッキリした回答が寄せられるかも。 参考URLは昔からある記事ですが、Windows7Home, 64bitでも動作しました。 Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _ (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _ lpType As Long, lpData As Any, lpcbData As Long) As Long Private Const KEY_QUERY_VALUE = &H1 Private Const HKEY_CURRENT_USER = &H80000001 'Windowsの標準プリンターをActivePrinterに設定する Sub ActivateDefaultPrinter() Dim objWSH As Object Dim objPrinter As Object Dim sPrinterList() As String Dim sTemp1 As String Dim i As Long Dim ctr As Long Dim defaultPrinter As String Const SUB_ROOT = "Software\Microsoft\Windows NT\CurrentVersion\Devices" defaultPrinter = getDefaultPrinter Set objWSH = CreateObject("WScript.Network") Set objPrinter = objWSH.EnumPrinterConnections If objPrinter.Count < 2 Then MsgBox "プリンタを取得できません", vbExclamation GoTo Exit_Proc Else ctr = 0 For i = 0 To objPrinter.Count - 1 Step 2 ReDim Preserve sPrinterList(ctr) sPrinterList(ctr) = objPrinter(i + 1) ctr = ctr + 1 Next End If For i = 0 To ctr - 1 'Microsoft XPS Document Writer on Ne00: という形式でプリンタとポートを取得します sTemp1 = RegRead_API(HKEY_CURRENT_USER, SUB_ROOT, sPrinterList(i)) sTemp1 = Replace(sTemp1, "winspool,", "") If sPrinterList(i) = defaultPrinter Then Application.ActivePrinter = sPrinterList(i) & " on " & sTemp1 End If Next Exit_Proc: Set objPrinter = Nothing Set objWSH = Nothing End Sub 'デフォルトプリンターを取得する Function getDefaultPrinter() As String Dim oClassSet As Object Dim oClass As Object Dim oLocator As Object Dim oService As Object Dim sMesStr As Object Set oLocator = CreateObject("WbemScripting.SWbemLocator") Set oService = oLocator.ConnectServer Set oClassSet = oService.ExecQuery("Select * From Win32_Printer") For Each oClass In oClassSet If oClass.Default Then getDefaultPrinter = oClass.Caption Exit For End If Next Set oClassSet = Nothing Set oClass = Nothing Set oService = Nothing Set oLocator = Nothing End Function 'レジストリを開く・読み込む・閉じる。 Private Function RegRead_API(lRoot As Long, sSubRoot As String, sEntryName As String) As String Dim lRet As Long Dim hWnd As Long Dim sVal As String hWnd = Application.hWnd lRet = RegOpenKeyEx(lRoot, sSubRoot, 0, KEY_QUERY_VALUE, hWnd) sVal = String(255, " ") lRet = RegQueryValueEx(hWnd, sEntryName, 0, 0, ByVal sVal, LenB(sVal)) RegCloseKey hWnd sVal = Left$(sVal, InStr(sVal, vbNullChar) - 1) RegRead_API = sVal End Function

参考URL:
http://blogs.yahoo.co.jp/bardiel_of_may/40864687.html
cproom
質問者

お礼

返答有難うございます プリンタ情報を消す事に、こんなに複雑なVBAが必要だったのですね!なめてました! 読解して使わせていただきます!早い返答有難うございます!

関連するQ&A

  • ※EPSONのPM-D750(プリンタ)で印刷ができません

    ■印刷したいのは白黒 ■ファイルはWORD98で作成した文章 なのですが、印刷しようとすろと「トナーカードリッジがありません、交換してください」というメッセージが出て印刷できません。 印刷は白黒で、黒のトナーは補充したばかりで満タンです。印刷できなくて困ってるのですが、これはどうしてでしょうか? ちなみに印刷時はちゃんと白黒モードにチェックつけてます。

  • プリンター情報が見られない

    コレガのプリンターサーバーCG-WLFPSU2BDGを通してNEC2900Cのレーザープリンターを使用しています 印刷は問題なく出来ているのですが、トナーの残量等がわかるプリンター情報が見られなくて困っています プリンターの本体での表示機能がないのでトナーの残量が不明の状態となっています ネットワーク上で見てもプリンターサーバーの情報は確認出来るのですが プリンターを検索するとネットワーク上にないと表示されます プリンター情報が見られる方法はないでしょうか

  • エクセルの両面印刷

    XPプロ エクセル2003 プリンタ;NECマルチライタ5400Nです。PCとプリンタは社内LANで接続されてます。 質問: エクセルファイルを両面印刷してますがPCが変わっても無条件に両面印刷する方法お願いします。 例:AさんのPC:プリンタ設定を両面印刷にした後両面印刷。   Aさん以外PC:同じエクセルファイルを両面印刷する場合都度プリンタ両面印刷設定しなければならない。 

  • エクセルVBAの質問です。

    エクセルVBAの質問です。 両面印刷をする際にプリンタを起動させる方法を教えてください。、

  • キャノンのお勧めプリンターは?

    以下の用途でプリンタを使いたいのですがキャノンのプリンターはどれがお勧めでしょうか。 (1)文書ファイル(エクセル・ワード・PDF)の印刷(ほとんど白黒のみ) (2)年賀状の作成(写真はなし) (3)角型2号の封筒に宛名を直接印刷したい(製品仕様で洋形4号OKでも強引に入らない?) (4)できれば自動で両面印刷可 以上でどれがよいかアドバイスよろしくお願いします。

  • EXCELの印刷設定とプリンターの印刷設定の違い

    EXCELのシート1で印刷設定を両面印刷にして印刷しました シート2で印刷設定をカラー印刷にして印刷しました その後、両シートとも白黒で片面印刷する事になったので、コントロールパネルからプリンターの設定を白黒で片面印刷にしました ところが、以前に各シートで設定した印刷設定で印刷されました 大本の設定の方が強いと思っていましたが、違うのでしょうか?

  • 業務用白黒プリンターについて

    業務用の白黒印刷プリンターを買い替えることになりました。 プリンターについて詳しくないので、どの機種が良いのか教えていただけると幸いです。 こんな感じのプリンターが希望です。 ・ネットワーク対応。 ・ランニングコストが良い。 ・トナー使用型。 ・用紙が沢山入る。 以上です。 プリンターに詳しい方、情報宜しくお願いします。

  • 家庭用プリンターを買いたい。

    家庭用のプリンターを買いたいと思っています。 PCに詳しくないので、おすすめのプリンターを教えてください。 条件としては、 (1)できるだけ価格の安いもの。 (2)ワード、エクセル、ウェブの情報をカラーで印刷したい。 の2点です。 価格ドッドコムをざっと見た感じでは、安いものでは6000円台のものもあって、それくらいならいいなぁと思っているのですが、、、。 それと、白黒とカラーでだいぶ価格がかわるなら、白黒でもいいかなぁと思っています。 また、プリンターを選ぶ際、PC側のチェック項目はありますか? (例えば、何年製だったら、このプリンターは使えないとか、、、) ちなみに、パソコンはWindowsXPでdynabookです。 よろしくおねがいします。

  • エクセルVBAで、プリンタ名とプロパティを指定したい

    Excel97を使用しています。 用紙サイズ:A4縦の書類を2ページ作成しました。書類は縦並びになっています。 これをエクセルVBAを使って、A4の用紙に両面印刷するか、A3横の用紙に割付印刷したいのですが方法はありますでしょうか? エクセルのページ設定でA3横にして横並びで作成しようとしたのですが、行の高さがページ毎で異なっていますので、横並びでは作成できませんでした。 ワークシート上にボタンを作成しましたので、それをクリックするだけで、特定のプリンタ名を指定し、そのプリンタのプロパティで両面もしくは割付印刷を設定して印刷させたいのです。 ご存知の方、どうぞよろしくお願いいたします。

  • Excelファイル200個を一括両面2アップ印刷

    仕事でExcelファイルを200個を以下の印刷設定で印刷する必要があります。 ・両面印刷 ・2アップ ・白黒 ファイル内はSheet1のみ印刷すればよいのですが、 今は一枚一枚ファイルを開いて上記の印刷設定をして印刷しており、 とても時間がかかってます。 一括印刷はこちらの質問を何個か閲覧してプログラムを動かしてうまく いきそうなのですが、一括の印刷設定はうまくいきそうもありません。 なお、使用しているプリンターは DocuCentre-III C4400 です。お分かりになりましたら教えていただきたく、よろしくお願いいたします。

専門家に質問してみよう