Access VBA質問箱 IV

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

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


783 / 2272 ツリー ←次へ | 前へ→

【10126】プリンタの設定について教えてください たけ 08/1/9(水) 16:17 質問[未読]
【10127】Re:プリンタの設定について教えてください VBWASURETA 08/1/10(木) 9:32 発言[未読]
【10128】Re:プリンタの設定について教えてください VBWASURETA 08/1/10(木) 11:01 発言[未読]
【10129】Re:プリンタの設定について教えてください たけ 08/1/10(木) 12:01 質問[未読]
【10130】Re:プリンタの設定について教えてください VBWASURETA 08/1/10(木) 13:36 回答[未読]
【10131】Re:プリンタの設定について教えてください たけ 08/1/10(木) 15:32 質問[未読]
【10132】Re:プリンタの設定について教えてください VBWASURETA 08/1/10(木) 15:53 発言[未読]
【10133】Re:プリンタの設定について教えてください VBWASURETA 08/1/10(木) 16:23 発言[未読]
【10134】Re:プリンタの設定について教えてください たけ 08/1/10(木) 17:23 質問[未読]
【10135】Re:プリンタの設定について教えてください VBWASURETA 08/1/10(木) 18:18 質問[未読]
【10138】Re:プリンタの設定について教えてください たけ 08/1/11(金) 12:02 質問[未読]
【10140】Re:プリンタの設定について教えてください VBWASURETA 08/1/11(金) 12:56 回答[未読]
【10141】Re:プリンタの設定について教えてください VBWASURETA 08/1/11(金) 13:23 回答[未読]
【10142】Re:プリンタの設定について教えてください たけ 08/1/11(金) 13:55 お礼[未読]
【10136】Re:プリンタの設定について教えてください VBWASURETA 08/1/11(金) 9:57 発言[未読]
【10137】Re:プリンタの設定について教えてください VBWASURETA 08/1/11(金) 10:19 発言[未読]

【10126】プリンタの設定について教えてください
質問  たけ  - 08/1/9(水) 16:17 -

引用なし
パスワード
   BVAでプリンタを通常使用しているプリンタではなく違うプリンタで出力したいのですが記述がわかりません。
Dim StrDevicesList As String
Dim StrDevicesPort As String

StrDevicesList = Application.Printer("FUJITSU VSP4901").DeviceName
StrDevicesList = Application.Printer("FUJITSU VSP4901").Port

と記述してみたのですが
StrDevicesList = Application.Printer("FUJITSU VSP4901").DeviceName
でエラーで
オブジェクトはこのプロパティまたはメソッドをサポートしていません。
になってしまいます。

FUJITSU VSP4901はプリンタの名前です。

Microsoft Access 2002でのプリンタ設定のプログラミング
を参照しているのですがよくわかりません。
よろしくお願いします

【10127】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/10(木) 9:32 -

引用なし
パスワード
   ▼たけ さん:
こんにちは。

多分ですが、MSDNのプログラミングを見られてると思いますが。
このHPでしょうか?

www.microsoft.com/japan/msdn/office/officeXP/odc_acc10_printers.aspx#odc_acc10_printers_introduction

もしこのHPでしたら、サンプルコードが英語のhpで参照できると思います。
そのサンプルコードから違うところがないかまず見てください。


おそらく、ApplicationオブジェクトがPrinters プロパティを
持っていないため。(参照設定の問題な気がします。)

【10128】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/10(木) 11:01 -

引用なし
パスワード
   ▼たけ さん:
追記です。

簡単なプリンタ設定だけであれば、

//www2.moug.net/bbs/program/20071210000001.htm

を参照みてはどうでしょうか。

【10129】Re:プリンタの設定について教えてください
質問  たけ  - 08/1/10(木) 12:01 -

引用なし
パスワード
   VBWASURETA さん
ありがとうございます

>www.microsoft.com/japan/msdn/office/officeXP/odc_acc10_printers.aspx#odc_acc10_printers_introduction

上記のHPを見ています。

プリンタ設定について見ているのですがどの記載がそうなよくわかりません。
実際サンプルを見ながら処理しているのですが、最初の質問のエラーがでるし、
プリンター設定の記載なのかもわかりません。

レジストリって何ですか。
もうひとつのレスのみたのですが・・

【10130】Re:プリンタの設定について教えてください
回答  VBWASURETA  - 08/1/10(木) 13:36 -

引用なし
パスワード
   ▼たけ さん:
こんにちは。


>>www.microsoft.com/japan/msdn/office/officeXP/odc_acc10_printers.aspx#odc_acc10_printers_introduction
>上記のHPを見ています。

見ているということですが、そこのHPに記載されているサンプルのことを
おっしゃってますか?

それではなく、そこから英語HPに飛んで、以下のURLのサンプルMDB
(圧縮のため解凍ソフト必要)をダウンロードしてください。
そのMDBが思った通りの動きをしているなら、参照設定等合っているかや
ソースを見てやってみてくださいということです。

//download.microsoft.com/download/a/1/f/a1fc6936-b5cb-462b-b302-76efe9c8d9cf/odc_acc10_printers.exe


>レジストリって何ですか。
>もうひとつのレスのみたのですが・・

まず、レジストリはWindowsユーザならわかると思います^^;;
で、そこのレスではなく以下のサンプルが書いてあったと思います。
その部分のことです。

'このサンプルは少し手を加えてます。
Sub main()
  Set WshNet = CreateObject("Wscript.Network")

  With WshNet.EnumPrinterConnections
    For i = 0 To .Count - 1 Step 2
      If (MsgBox("[" & .Item(i + 1) & "]このプリンタに設定しますか?", vbYesNo) = vbYes) Then
        'ここで通常使うプリンタとして設定する。
        WshNet.SetDefaultPrinter .Item(i + 1)  '.Item(i + 1) はインストールされているプリンタ名の配列
        Exit For
      End If
    Next
  End With

End Sub

【10131】Re:プリンタの設定について教えてください
質問  たけ  - 08/1/10(木) 15:32 -

引用なし
パスワード
   VBWASURETA さん:
見れば見るほどわからなくなってきています。
丸投げなのかもしれませんが実際書いてあることがよくわからないのです。
勉強不足ですいません。

【10132】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/10(木) 15:53 -

引用なし
パスワード
   ▼たけ さん:
>見れば見るほどわからなくなってきています。

まず、何がわからないのか教えてください。
次に目的もあまり明確に書かれていないので、どうしたいのか教えてください。

プリンタの設定とは?
印刷ダイアログをACCESSのレポートプレビューと同時に表示したいとか
でしょうか?

もしくは、通常使うプリンタをACCESSの特定レポートだけ別のプリンタから
プレビュー無しで印刷出力したいとかでしょうか?


上記の2の条件でもそれぞれ回答がかわりますので、この辺りは
明確に書かないと回答する側も予測して回答してしまって、
的外れな回答となりますのでご注意ください。

【10133】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/10(木) 16:23 -

引用なし
パスワード
   ▼たけ さん:

>Dim StrDevicesList As String
>Dim StrDevicesPort As String
>
>StrDevicesList = Application.Printer("FUJITSU VSP4901").DeviceName
>StrDevicesList = Application.Printer("FUJITSU VSP4901").Port

後、最初に書かれているこの内容について説明してみますが、
もしこの処理が出来たとしても何も設定されませんよ?

StrDevicesListの変数にデバイスの名前(プリンタ名称)と
使用されているポート名称の文字列がString変数に入るだけです。

StrDevicesListが二つ書かれてますが、デバイスの名前(プリンタ名称)が
上書きされて消えますよ?

間違いも1点ありますPrinter(DeviceName)ではなく、Printers(DeviceName)
ですね。ただ、プリンタ名称がわかっているのに又名前を取る理由がわかりませんが。

【10134】Re:プリンタの設定について教えてください
質問  たけ  - 08/1/10(木) 17:23 -

引用なし
パスワード
   ▼VBWASURETA さん:
いろいろありがとうございます。
最初の質問も内容がわからなくて記載しています。
Microsoft Access 2002でのプリンタ設定のプログラミング
を参照してこんなかんじで記載すればいいのかとおもい記載しました。
VBWASURETAさんの
StrDevicesListの変数にデバイスの名前(プリンタ名称)と
使用されているポート名称の文字列がString変数に入るだけです。
StrDevicesListが二つ書かれてますが、デバイスの名前(プリンタ名称)が
上書きされて消えますよ
の意味でなんとなくわかりました。
基本的にはVBAは意味がわからなく、今のところ本の記載をそのまま書いてなんとなく結果がうまくいっていました。
いま作成しているモジュールはAccessからExcelのシートに書き出し
Excelのシートを出力したいのです。
Accessのレポートではプリンタの設定をしていればそのプリンタで出力してくれるのですがExcelに出力してしまうと通常使うプリンタを使用しています。
この処理だけ別のプリンタから印刷出力したいのです。
よろしくお願いします。

【10135】Re:プリンタの設定について教えてください
質問  VBWASURETA  - 08/1/10(木) 18:18 -

引用なし
パスワード
   ▼たけ さん:

プリンタ出力の前に質問があります。

>いま作成しているモジュールはAccessからExcelのシートに書き出し
>Excelのシートを出力したいのです。

この部分はできているのでしょうか?
又、シートに出力はエクスポートのみして印刷操作はExcelからでしょうか?


>'このサンプルは少し手を加えてます。
>Sub main()
>  Set WshNet = CreateObject("Wscript.Network")

>  With WshNet.EnumPrinterConnections
>    For i = 0 To .Count - 1 Step 2
>      If (MsgBox("[" & .Item(i + 1) & "]このプリンタに設定しますか?", vbYesNo) = vbYes) Then
>        'ここで通常使うプリンタとして設定する。
>        WshNet.SetDefaultPrinter .Item(i + 1)  '.Item(i + 1) はインストールされているプリンタ名の配列
>        Exit For
>      End If
>    Next
>  End With
>
>End Sub

因みに上記に書いたこのサンプルコードは通常使うプリンタを変更するソースです。
なので、アプリ共通で通常使うプリンタが変わる事になります。
ただ、最後に元のプリンタに戻す必要がありますが。

元のプリンタに戻すサンプルを含めた内容は以下のような感じになります。
但し、全てAccessから操作して完了している場合に有効なサンプルです。
※このサンプルもwww2.moug.net/bbs/program/20071210000001.htm に記載された
 内容から作成しています。


sub 印刷_Click()
    Const strOutPrinter = "FUJITSU VSP4901" '変更プリンタ
    Dim strDefaultPrinter As String
    
    '現在の通常使うプリンタ名を列挙
    If GetDefaultPrinter("", "", strDefaultPrinter) = False Then
        MsgBox "通常使うプリンタが見つかりませんでした"
        Exit Sub
    End If

    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then

        '指定のプリンタに変更
        If (FncPrintOut( strOutPrinter ) = False) Then
            MsgBox strOutPrinter & ":通常使うプリンタが見つかりませんでした"
            Exit Sub
        End If

        '// ここに印刷処理のコードを追加してください


        '元のプリンタに通常使うプリンタとして戻す
        If (FncPrintOut( strDefaultPrinter ) = False) Then
            MsgBox strDefaultPrinter & ":通常使うプリンタが見つかりませんでした"
            Exit Sub
        End If

    End If
End Sub


'プリンタ変更関数
Function FncPrintOut(StrPrinterName As String ) As Boolean
  Dim strdefoultprt As String
  Dim i As Integer
  
  FncPrintOut = False
  Set WshNet = CreateObject("Wscript.Network")
  With WshNet.EnumPrinterConnections
    For i = 0 To .Count - 1 Step 2
      If (.Item(i + 1) = StrPrinterName) Then '変更するプリンタが見つかった
        'ここで通常使うプリンタとして設定する。
        WshNet.SetDefaultPrinter .Item(i + 1)  '.Item(i + 1) はインストールされているプリンタ名の配列
              FncPrintOut = True
        Exit For
      End If
    Next
  End With

End Function

'通常使うプリンタ名取得関数
Function GetDefaultPrinter(strUser, strPassword, oDefault) As Boolean

  On Error Resume Next
  GetDefaultPrinter = False
  
  Dim oService
  Dim oPrinter
  Dim iRetval
  Dim oEnum
  
  iRetval = 1
  
  If PConnect("", kNameSpace, strUser, strPassword, oService) Then
    
    Set oEnum = oService.ExecQuery( _
      "select DeviceID from Win32_Printer where default=true")
  Else
    GetDefaultPrinter = 1
    Exit Function
  
  End If
  
  If Err.Number = 0 Then
    GetDefaultPrinter = True
     For Each oPrinter In oEnum
    
      oDefault = oPrinter.DeviceID
     Next
    
     iRetval = 0
    
  Else
    wscript.echo "通常使うプリンタを取得できません" & vbCrLf _
             & Hex(Err.Number) & " " & Err.Description
  End If

  'GetDefaultPrinter = iRetval

End Function


Function PConnect(strServer, strNameSpace, strUser, _
                   strPassword, oService)

  On Error Resume Next

  Dim oLocator
  Dim bResult
 
  oService = Null
 
  bResult = False
 
  Set oLocator = CreateObject("WbemScripting.SWbemLocator")

  If Err = 0 Then

    Set oService = oLocator.ConnectServer(strServer, _
               strNameSpace, strUser, strPassword)

    If Err = 0 Then

      bResult = True
   
      oService.Security_.impersonationlevel = 3
      oService.Security_.Privileges.AddAsString _
                   "SeLoadDriverPrivilege"
     
      Err.Clear
   
    Else

      wscript.echo "処理エラー" & vbCrLf _
        & Hex(Err.Number) & " " & Err.Description
    End If
 
  Else
    wscript.echo "処理エラー" & vbCrLf _
        & Hex(Err.Number) & " " & Err.Description
    
  End If
 
  PConnect = bResult
      
End Function

【10136】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/11(金) 9:57 -

引用なし
パスワード
   ▼たけ さん:

サンプルで1点訂正です。

>sub 印刷_Click()
>    Const strOutPrinter = "FUJITSU VSP4901" '変更プリンタ
>    Dim strDefaultPrinter As String
>    
>    '現在の通常使うプリンタ名を列挙
>    If GetDefaultPrinter("", "", strDefaultPrinter) = False Then
>        MsgBox "通常使うプリンタが見つかりませんでした"
>        Exit Sub
>    End If
>
>    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then
>
>        '指定のプリンタに変更
>        If (FncPrintOut( strOutPrinter ) = False) Then
>            MsgBox strOutPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>
>        '// ここに印刷処理のコードを追加してください
>
>        '元のプリンタに通常使うプリンタとして戻す
>        If (FncPrintOut( strDefaultPrinter ) = False) Then
>            MsgBox strDefaultPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>    End If
>End Sub

この関数の

>    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then



    If (MsgBox("印刷を開始しますか?", vbYesNo) = vbYes) Then

でした。
後、質問も内容がわからないと書かれますと回答側も何を質問しているの?
になりますので、やりたい動作、試した内容で何がわからないのかを
明確に書いた方がいいです。

丸投げして、回答してもらってもこの処理は何をしてるの?
どこをどうやって修正して自分で作成したソースのどのメソッドに
実装すればいいの?とかになりますよね?

自分自身が理解してないと、毎回同じ質問を繰り返したり、
何を質問したらいいのかわからなくなったりしますからね。

プログラミングを勉強するならデバックの方法から覚えると
理解しやすいかと思います。(自分自身の解釈で理解できますから)

【10137】Re:プリンタの設定について教えてください
発言  VBWASURETA  - 08/1/11(金) 10:19 -

引用なし
パスワード
   ▼たけ さん:

デバックについて参考になるHPがありましたので、
以下にURLを記載します。

//suzuden.exblog.jp/6061097/

以上ご参考までに。

【10138】Re:プリンタの設定について教えてください
質問  たけ  - 08/1/11(金) 12:02 -

引用なし
パスワード
   ▼VBWASURETA さん:
本当にありがとうございます。

>プリンタ出力の前に質問があります。

>>いま作成しているモジュールはAccessからExcelのシートに書き出し
>>Excelのシートを出力したいのです。
>
>この部分はできているのでしょうか?
>又、シートに出力はエクスポートのみして印刷操作はExcelからでしょうか?

AccessでExcelを開きシートにデータを入力しています。

下記のサンプルは今まで見たサンプルの中で非常にわかりやすいです。
コメントも書かれていて非常にうれしいです。
下記のモージュールで通常使うプリンタ名取得関数
についてなのですが、通常に使うプリンタは変更プリンタみたく
Const trDefaultPrinter = "KYOUSERA DEN26"
に固定してしまえば通常使うプリンタ名取得関数は必要ないのですか?
他の人もVBAの知識がないので今は余分なモジュールはなくしたいのです。

あとコンパイルをかけると
Set WshNet = CreateObject("Wscript.Network")
の部分でコンパイルエラーになります。変数が定義されていませんとなります。

参照設定で何か設定しないといけないのですか?
よろしくお願いします。

VBA デバック方法についてのメモの参考にさせていただきます。
ありがとうござます。


>
>sub 印刷_Click()
>    Const strOutPrinter = "FUJITSU VSP4901" '変更プリンタ
>    Dim strDefaultPrinter As String
>    
>    '現在の通常使うプリンタ名を列挙
>    If GetDefaultPrinter("", "", strDefaultPrinter) = False Then
>        MsgBox "通常使うプリンタが見つかりませんでした"
>        Exit Sub
>    End If
>
>    If (MsgBox(印刷を開始しますか?", vbYesNo) = vbYes) Then
>
>        '指定のプリンタに変更
>        If (FncPrintOut( strOutPrinter ) = False) Then
>            MsgBox strOutPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>
>        '// ここに印刷処理のコードを追加してください
>
>
>        '元のプリンタに通常使うプリンタとして戻す
>        If (FncPrintOut( strDefaultPrinter ) = False) Then
>            MsgBox strDefaultPrinter & ":通常使うプリンタが見つかりませんでした"
>            Exit Sub
>        End If
>
>    End If
>End Sub
>
>
>'プリンタ変更関数
>Function FncPrintOut(StrPrinterName As String ) As Boolean
>  Dim strdefoultprt As String
>  Dim i As Integer
>  
>  FncPrintOut = False
>  Set WshNet = CreateObject("Wscript.Network")
>  With WshNet.EnumPrinterConnections
>    For i = 0 To .Count - 1 Step 2
>      If (.Item(i + 1) = StrPrinterName) Then '変更するプリンタが見つかった
>        'ここで通常使うプリンタとして設定する。
>        WshNet.SetDefaultPrinter .Item(i + 1)  '.Item(i + 1) はインストールされているプリンタ名の配列
>              FncPrintOut = True
>        Exit For
>      End If
>    Next
>  End With
>
>End Function
>
>'通常使うプリンタ名取得関数
>Function GetDefaultPrinter(strUser, strPassword, oDefault) As Boolean
>
>  On Error Resume Next
>  GetDefaultPrinter = False
>  
>  Dim oService
>  Dim oPrinter
>  Dim iRetval
>  Dim oEnum
>  
>  iRetval = 1
>  
>  If PConnect("", kNameSpace, strUser, strPassword, oService) Then
>    
>    Set oEnum = oService.ExecQuery( _
>      "select DeviceID from Win32_Printer where default=true")
>  Else
>    GetDefaultPrinter = 1
>    Exit Function
>  
>  End If
>  
>  If Err.Number = 0 Then
>    GetDefaultPrinter = True
>     For Each oPrinter In oEnum
>    
>      oDefault = oPrinter.DeviceID
>     Next
>    
>     iRetval = 0
>    
>  Else
>    wscript.echo "通常使うプリンタを取得できません" & vbCrLf _
>             & Hex(Err.Number) & " " & Err.Description
>  End If
>
>  'GetDefaultPrinter = iRetval
>
>End Function
>
>
>Function PConnect(strServer, strNameSpace, strUser, _
>                   strPassword, oService)
>
>  On Error Resume Next
>
>  Dim oLocator
>  Dim bResult
> 
>  oService = Null
> 
>  bResult = False
> 
>  Set oLocator = CreateObject("WbemScripting.SWbemLocator")
>
>  If Err = 0 Then
>
>    Set oService = oLocator.ConnectServer(strServer, _
>               strNameSpace, strUser, strPassword)
>
>    If Err = 0 Then
>
>      bResult = True
>   
>      oService.Security_.impersonationlevel = 3
>      oService.Security_.Privileges.AddAsString _
>                   "SeLoadDriverPrivilege"
>     
>      Err.Clear
>   
>    Else
>
>      wscript.echo "処理エラー" & vbCrLf _
>        & Hex(Err.Number) & " " & Err.Description
>    End If
> 
>  Else
>    wscript.echo "処理エラー" & vbCrLf _
>        & Hex(Err.Number) & " " & Err.Description
>    
>  End If
> 
>  PConnect = bResult
>      
>End Function

【10140】Re:プリンタの設定について教えてください
回答  VBWASURETA  - 08/1/11(金) 12:56 -

引用なし
パスワード
   ▼たけ さん:

>AccessでExcelを開きシートにデータを入力しています。

それであれば、

>>        '// ここに印刷処理のコードを追加してください

にそのソースを追加していただければ出来ます。


>下記のモージュールで通常使うプリンタ名取得関数
>についてなのですが、通常に使うプリンタは変更プリンタみたく
>Const trDefaultPrinter = "KYOUSERA DEN26"
>に固定してしまえば通常使うプリンタ名取得関数は必要ないのですか?

元々のプリンタ名取得は固定にしてしまえば不要です。
ただ、今後通常使うプリンタ変更等があれば逐一そのソース箇所の
修正となりますので、取得したほうがいいかと^^;
なので、サンプルの変更プリンタもConst定義ではなく、マスタデータ化
するなどの方がいいかも知れません。

【10141】Re:プリンタの設定について教えてください
回答  VBWASURETA  - 08/1/11(金) 13:23 -

引用なし
パスワード
   ▼たけ さん:

1つ回答が漏れてました。


>あとコンパイルをかけると
>Set WshNet = CreateObject("Wscript.Network")
>の部分でコンパイルエラーになります。変数が定義されていませんとなります。
>参照設定で何か設定しないといけないのですか?

コンパイルオプション設定の問題ですね。
エラーの通り「WshNet」の変数が定義されていないということなので、

Dim WshNet As Object

の定義を追加していただければエラーは消えるはずです。

【10142】Re:プリンタの設定について教えてください
お礼  たけ  - 08/1/11(金) 13:55 -

引用なし
パスワード
   ▼VBWASURETA さん:
ありがとうございます。
うまく起動することができました。
本当に丁寧に教えていただき感謝しています。

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