Access VBA質問箱 IV

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

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


157 / 500 ページ ←次へ | 前へ→

【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
・ツリー全体表示

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

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

【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)
ですね。ただ、プリンタ名称がわかっているのに又名前を取る理由がわかりませんが。
・ツリー全体表示

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

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

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

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

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


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

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

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

【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
・ツリー全体表示

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

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

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

上記のHPを見ています。

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

レジストリって何ですか。
もうひとつのレスのみたのですが・・
・ツリー全体表示

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

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

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

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

を参照みてはどうでしょうか。
・ツリー全体表示

【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 プロパティを
持っていないため。(参照設定の問題な気がします。)
・ツリー全体表示

【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でのプリンタ設定のプログラミング
を参照しているのですがよくわかりません。
よろしくお願いします
・ツリー全体表示

【10125】Re:AccessVBAでExcelに罫線を引く
発言  VBWASURETA  - 08/1/8(火) 11:07 -

引用なし
パスワード
   ▼麻衣子 さん、小僧 さん:

こんにちは。

Excelを使った場合の調べ方について参考までに書いておきます。

Excelを使った場合のVBAですが、自分の場合は
まずExcelの自動マクロ登録からしたい動作を登録して、
登録されたソースを見ます。

次にAccess側でローカルウィンドウ(デバック)を開き、
マクロ登録されたソースのメソッドと関連のメソッドがないかを調べます。

ちょっと手間ですが、結構このやり方でうまく行く場合多いです。
・ツリー全体表示

【10124】Re:AccessVBAでExcelに罫線を引く
お礼  麻衣子  - 07/12/28(金) 17:33 -

引用なし
パスワード
   小僧さんご返事ありがとうございます。

そうですね、ちゃんと書かないと見ていただいている方にはわかりませんね。
これから質問する時にはきちんと説明させていただきます。

今回は小僧さんに教えて頂いた仕方を勉強し、いろいろなパターンを
作りたいと思います。

本当にありがとうございました。
・ツリー全体表示

【10123】Re:AccessVBAでExcelに罫線を引く
回答  小僧  - 07/12/28(金) 9:32 -

引用なし
パスワード
   ▼麻衣子 さん:
こんにちは。

> 今いろいろ調べていますがどうしてもわからないので

どのようなキーワードで探して
どのような情報を得られたのでしょうか。


掲示板のやり取りでは「いろいろ」と言われましても
麻衣子さんが御自分でどこまで努力されているのかも解りませんよ。


>まずExcelのA1に下線の引き方だけでも教えていただけないでしょうか?


Sub Excelに罫線を引く()
Dim xlsApp As Object
Dim xlsWkb As Object

  Const ExcelFile = "C:\住所録.xls"

  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Open(ExcelFile)
    With xlsWkb.Sheets("Sheet1").Range("A1")
      .Borders(9).LineStyle = 1
      .Borders(9).Weight = 2
    End With
  xlsWkb.Save
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing

End Sub
・ツリー全体表示

【10122】AccessVBAでExcelに罫線を引く
質問  麻衣子  - 07/12/27(木) 17:19 -

引用なし
パスワード
   初めまして、今いろいろ調べていますがどうしてもわからないので、
どなたか教えていただけないでしょうか?
よろしくお願いします。

内容はAccessのVBAで"住所録"というExcelに罫線を引きたいのですができません。

まずExcelのA1に下線の引き方だけでも教えていただけないでしょうか?

お願いします。
・ツリー全体表示

【10121】Unknown
回答  hipnoj  - 07/12/26(水) 7:35 -

引用なし
パスワード
  
・ツリー全体表示

【10120】Re:メッセージボックスを自動的に消す
発言  VBWASURETA  - 07/12/25(火) 10:08 -

引用なし
パスワード
   ▼とき さん:

こんにちは。
一応こちらの内容はAccessでも使う場合がありますので入れておきます。

Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("[はい] をクリックすると、プログラムの実行が 5 秒間中断されます。", 4)) = vbYes Then
  PauseTime = 5        ' 中断時間を設定します。
  Start = Timer        ' 中断の開始時刻を設定します。
  Do While Timer < Start + PauseTime
    DoEvents        ' 他のプロセスに制御を渡します。
  Loop
  Finish = Timer        ' 中断の終了時刻を設定します。
  TotalTime = Finish - Start  ' 実際の中断時間を計算します。
  msgform.Show
Else
  End
End If

この内容はAccess、ExcelともにTimer関数のHelpサンプル例として
ありますのでご確認下さい。


定期的にメッセージボックス表示(モーダルと同じため)は出来なさそうなので
フォーム作って表示するなどがいいかも知れません。
・ツリー全体表示

【10119】Re:エラーなしで更新されない
発言  VBWASURETA  - 07/12/25(火) 9:43 -

引用なし
パスワード
   ▼ふくたん さん、Gin_II さん:

こんにちは。

Gin_IIさん指摘のエラー確認でわかりそうなのですが、後気になるのは

>    strSQL = strSQL & "    '" & コントロール区分CB.Value & "'"
>    strSQL = strSQL & "   , '" & コントロールキーCB.Value & "'"
>    strSQL = strSQL & "   , '" & pfnc文字列カット(データ3TX.Value, 100) & "'"
>    strSQL = strSQL & "   , '" & pfnc文字列カット(データ4TX.Value, 100) & "'"
>    strSQL = strSQL & ")"

の値が全てstrSQLの変数にセットされてますか?
何となくですが、入る場合と入らない場合があるというところから
そこが気になりました。
・ツリー全体表示

【10118】Re:メッセージボックスを自動的に消す
発言  とき  - 07/12/23(日) 10:12 -

引用なし
パスワード
   すみません。ExcelとAccesを間違えました。
この質問は撤回します。
・ツリー全体表示

【10117】メッセージボックスを自動的に消す
質問  とき  - 07/12/23(日) 10:10 -

引用なし
パスワード
   ExcelVBAでメッセージボックスを表示し、一定時間後(例:5秒後)に自動的に
消す方法を教えてください。
・ツリー全体表示

【10116】Re:エラーなしで更新されない
回答  Gin_II  - 07/12/23(日) 2:24 -

引用なし
パスワード
   > Public pdbWS As DAO.Workspace  ' ワークスペース

ワークスペースを使っているってことは、トランザクションとかも利用していますか?


> ▼各フォームにて以下のように書込

各フォームというのもよくわからないですが・・・^^;


> エラーにもならないため、対策が建てられないでおります。
>     pdbDM.Execute strSQL

    pdbDM.Execute strSQL, dbFailOnError

で、実行したら、何かわかるかも。
・ツリー全体表示

157 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1083141
(SS)C-BOARD v3.8 is Free