VBのWebBrowserコントロールを使ってHTMLドキュメントの印刷を行う
アプリケーションを作っています。
WebBrowser1.ExecWB OLECMDID_PRINT,0
と書くと印刷はできますがヘッダーとフッダーが印刷されてしまいます。
IEの設定を変えると表示されなくなりますが、VBのコード上からここら辺を制御する方法がわかりません。

どなたか分かる方教えてください。
お願いいたします。

A 回答 (1件)

>IEの設定を変えると


そうですねIEの設定によりますね。
なら話は簡単。IEの設定を変えてあげましょう。
WebBrowserはインストールされているIEの環境を使用します。その情報はレジストリに記されています。

ファイル名を指定して実行で[RegEdit.exe]を起動しましょう。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup
に情報が入っています。

操作方法は参考URLを見てください。

レジストリ操作にはバックアップを取って行いましょう。
PC起動不可になることもありえます。

参考URL:http://www.vbvbvb.com/jp/gtips/index0251.html
    • good
    • 0
この回答へのお礼

回答して頂きありがとうございます。
お礼が遅れてすいませんでした。
おかげさまで解決しました。
ありがとうございました。

お礼日時:2001/12/18 19:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWeb画面をプリントする方法(エクセルVBA)

エクセル2000です。
VBAでNavigateを使いWeb画面(イントラネット)を開き、
.Document.all.Item("Hoge****No").Value = Target.Text のような方法で入力を行い、
.Document.forms(0).submit で送信ボタンクリックして新たな画面を開くところまではできております。

次に、その開いた画面をプリントしたいのです。
どのようなコードになるのでしょうか?
ご教示いただければ幸いです。
(o。_。)oペコッ

現在のコードは以下のとおりです。
Dim objIE As Object

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub '複数セル不可
If Target.Column <> 1 Then Exit Sub 'A列のみ対象

'IEが起動しているかチェック。objIE.Nameプロパティの取得に成功したら起動とみなす。
Dim tmp As String
On Error Resume Next
tmp = objIE.Name
If Err.Number <> 0 Then
'エラーならIEが起動していないので、起動する
Set objIE = CreateObject("InternetExplorer.Application")
End If
On Error GoTo 0

With objIE
.Navigate "​http://******.co.jp/******/**/***/Details/DetailsScr/init"​
.Visible = True
Do While .Busy = True
DoEvents
Loop
.Document.all.Item("Hoge****No").Value = Target.Text 'テストボックスへ入力:Name属性で指定
'オートコンプリートなどの機能が働く場合があるので、念のため待機
Do While .Busy = True
DoEvents
Loop
.Document.forms(0).submit '送信ボタンクリック
End With
End Sub

エクセル2000です。
VBAでNavigateを使いWeb画面(イントラネット)を開き、
.Document.all.Item("Hoge****No").Value = Target.Text のような方法で入力を行い、
.Document.forms(0).submit で送信ボタンクリックして新たな画面を開くところまではできております。

次に、その開いた画面をプリントしたいのです。
どのようなコードになるのでしょうか?
ご教示いただければ幸いです。
(o。_。)oペコッ

現在のコードは以下のとおりです。
Dim objIE As Object

Private Sub Worksheet_SelectionCha...続きを読む

Aベストアンサー

追加レスつかなかったですね。
『多少は不便』という事なので、一応テストコードだけ全文載せておきます。
URLを入力したセル範囲を選択して実行です。
([winXP/2000|2003/ie7][vista/2000|2007/ie8]の環境でテスト)

'標準モジュール
Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
             ByVal dwMillsecounds As Long)

Private Declare Function FindWindowA Lib "user32.dll" ( _
                   ByVal cnm As String, _
                   ByVal cap As String) As Long

Sub test()
  Const READYSTATE_COMPLETE = 4
  Const OLECMDID_PRINTPREVIEW = 7
  Const OLECMDEXECOPT_DODEFAULT = 0
  Dim r  As Range
  Dim hWnd As Long
  
  If TypeName(Selection) <> "Range" Then Exit Sub
  With CreateObject("internetExplorer.application")
    .Visible = True
    For Each r In Selection
      .navigate r.Value
      While .busy Or (.readyState <> READYSTATE_COMPLETE)
        DoEvents
      Wend
      .ExecWB OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT
      While hWnd = 0
        Sleep 500
        DoEvents
        hWnd = FindWindowA("Internet Explorer_TridentDlgFrame", "印刷プレビュー")
      Wend
      While hWnd <> 0
        Sleep 500
        DoEvents
        hWnd = FindWindowA("Internet Explorer_TridentDlgFrame", "印刷プレビュー")
      Wend
    Next
  End With
End Sub

追加レスつかなかったですね。
『多少は不便』という事なので、一応テストコードだけ全文載せておきます。
URLを入力したセル範囲を選択して実行です。
([winXP/2000|2003/ie7][vista/2000|2007/ie8]の環境でテスト)

'標準モジュール
Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
             ByVal dwMillsecounds As Long)

Private Declare Function FindWindowA Lib "user32.dll" ( _
                   ByVal cnm As String, _
 ...続きを読む

QWebBrowserの読み込み待ちの処理の仕方

VB2005にてプログラムしております。

WebBrowser内にて表示したページでID、PASSを自動入力、ログインするというプログラムですが、
-------------------------------------------------------------
    Dim IDCODE As String = TextBox1.Text
Dim PASSCODE As String = TextBox2.Text
'文字列で指定したURLに飛ぶ
WebBrowser1.Navigate("https://XXXXXXXXX.ne.jp/")
'表示終了まで待つ
??????
   ‘WebBrowser1へID、PASS入力処理

-------------------------------------------------------------
上記の ??????
部分に表示待ちの処理をするコードを入れると思うのですが、
With WebBrowser1
Do While .IsBusy = True
Loop
Do While .ReadyState <> "complete"
Loop
End With
を入力すると読み込み途中で止まってしまうみたいです。
なにかいい方法がありますか?

VB2005にてプログラムしております。

WebBrowser内にて表示したページでID、PASSを自動入力、ログインするというプログラムですが、
-------------------------------------------------------------
    Dim IDCODE As String = TextBox1.Text
Dim PASSCODE As String = TextBox2.Text
'文字列で指定したURLに飛ぶ
WebBrowser1.Navigate("https://XXXXXXXXX.ne.jp/")
'表示終了まで待つ
??????
   ‘WebBrowser1へID、PASS入力処理

-------------...続きを読む

Aベストアンサー

Windowsの場合コントロールの描画などを待つなら メッセージループをとめない工夫が必要です
ひとつのプロシージャ内で待機するのであれば
Application.DoEvents() などをつかって メッセージ処理をWindowsにさせましょう

Do Until .ResyState = WebBrowserReadyState.Complete
 Application.DoEvents()
Loop
といった具合です

または WebBrowserのDocumentCompletedイベント側で処理するといった手法もありますよ

QPDFファイルを開かずに印刷したい

幾つものPDFファイルを印刷したいのですが、
できればAdobeReaderを起動させずに印刷したいです。

ファイルのアイコン上で右クリック→印刷でも可能ですが、
数が多くなると、この作業も大変です。
そこでVisualBasic2008ExpressEditionを使って、
簡単なシステムを作りたいと考えています。

しかし、PDFを開かずに印刷する方法が、どうしてもわかりません。
ネット検索、教えてgoo内の検索でもヒットせず途方に暮れています。
参考になるホームページや書籍がありましたら教えてください。
「こんな手法があるよ」というものでも構いません。

宜しくお願いします。

Aベストアンサー

PDFを開く際にACRORD32.exeに対して以下のコマンドラインを指定してください。

ACRORD32.EXE /s /l /p /h [PDFのパス]

コマンドラインの解説は参照URLを。

参考URL:http://scripting.cocolog-nifty.com/blog/2007/07/adobe_reader_81_e41e.html

QWebbrowser上に表示した画像を保存したい

現在、WebBrowserでHTMLを読み込んで表示しています。
表示しているページはいつも同じです。
そのページの中には画像があって、WEBカメラの画像なので、常に更新されています。
そのため、一定時間ごとにページを更新しています。

そこまではOKなのですが
そのカメラの画像をJPEGファイルとして一定時間ごとにPCに保存もしたいのですが、そんなことってできるんでしょうか?

<環境>
VB6+SP5
Windows2000
IE6

Aベストアンサー

画面キャプチュアであれば、StretchBltで取れます。
Alt+PrintScreenキーを擬似的に発生させて、クリップボード経由でとる方法もあります。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=185224

QフォームでPDFを表示させたいときは

エクセルマクロでフォームを作成しました。
そこに、PDFで作成したものを表示させたいのですが
画像は「image」に表示させる事が出来るようですが
PDFは読み込んでくれません。

なにかいい方法はないでしょうか?
もしPDFを画像に変換して表示させる事ができるのであれば
それでも構わないのですが、変換するソフトで何かいいものがありますか?

よろしくお願いします。

Aベストアンサー

WebBrowserコントロールというものを利用すれば簡単にできるようです。

Private Sub UserForm_Activate()
WebBrowser1.Navigate "C:\hoge.pdf"
End Sub

バージョンや環境面の記載がない為、miz_kさんの環境でも使用可能かはよくわかりませんが・・・。
とりあえず、自分の環境では凝らずに表示させるだけなら1分でできました。

※WebBrowserはツールメニュー→その他のコントロールで表示されるコントロールの追加ダイアログにて「Microsoft Web Browser」という名前で登録されていました。

QPDFファイルを開き、印刷し、閉じるマクロ

Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。

Dim AA, AAA

AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)

にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。

Aベストアンサー

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional prin...続きを読む

QVBからPDFファイル自動生成するには

VBから印刷イメージを自動にPDFファイルに変換し指定フォルダに保存するにはどのようにすればよいのでしょうか?
いろいろ調べても良くわかりません。
できればサンプルプログラムもあれば幸いです。

現在は、通常使うプリンタにAcrobat PDFWriterを指定し手動でPDFファイルを作っている次第です。

環境としてはWindows2000、VB6.0、Acrobat4.05です。

どんな情報でも結構です。お待ちしております。

Aベストアンサー

サンプルです。

Option Explicit

'開発環境: VB6SP5 Acrobat4.0
'参照設定:Adobe Acrobat 4.0 Type Library
'    参照設定初回設定時は「Acrobat」と表示されています
'    一度チェックをつけ、もう一度参照設定ダイアログを開くと「Adobe Acrobat 4.0 Type Library」になっているはずです。

Sub TEST()
  Dim acroApp     As CAcroApp   'CAcroAppオブジェクト
  Dim acroPDDoc    As CAcroPDDoc  'CAcroPDDocオブジェクト
  Dim acroExchAVDoc  As CAcroAVDoc  'CAcroAVDocオブジェクト
  Dim blnRtn     As Boolean   '戻り値
  Dim lngAVDocNum   As Long
  
  'インスタンス生成
  Set acroApp = CreateObject("AcroExch.APP")
  Set acroPDDoc = CreateObject("AcroExch.PDDoc")
  Set acroExchAVDoc = CreateObject("AcroExch.AVDoc")

'デバッグ用
acroApp.Show
 
  'ファイルオープン
  blnRtn = acroExchAVDoc.Open("c:\test.bmp", "")
  If blnRtn Then
    MsgBox "オープンエラー"
    GoTo PGMEND:
  End If
  
  '変換処理中の待機処理
  Do While lngAVDocNum = acroApp.GetNumAVDocs
    DoEvents
  Loop
  
  '変換済みのアクティブPDFファイルオブジェクト取得
  Set acroExchAVDoc = acroApp.GetActiveDoc()
  Set acroPDDoc = acroExchAVDoc.GetPDDoc()
    
  'PDFファイルとしてセーブ
  blnRtn = acroPDDoc.Save(PDSaveFull Or PDSaveCollectGarbage Or PDSaveLinearized, "c:\test.pdf")
  
  If Not blnRtn Then
    MsgBox "セーブエラー"
    GoTo PGMEND:
  End If
 
 
PGMEND:
  '閉じる
  blnRtn = acroExchAVDoc.Close(False)
  acroApp.Exit
 
  '開放
  Set acroExchAVDoc = Nothing
  Set acroPDDoc = Nothing
  Set acroApp = Nothing
End Sub

サンプルです。

Option Explicit

'開発環境: VB6SP5 Acrobat4.0
'参照設定:Adobe Acrobat 4.0 Type Library
'    参照設定初回設定時は「Acrobat」と表示されています
'    一度チェックをつけ、もう一度参照設定ダイアログを開くと「Adobe Acrobat 4.0 Type Library」になっているはずです。

Sub TEST()
  Dim acroApp     As CAcroApp   'CAcroAppオブジェクト
  Dim acroPDDoc    As CAcroPDDoc  'CAcroPDDocオブジェクト
  Dim acroExchAVDoc  As CAcroAVDoc  'CAcro...続きを読む

QWebBrowserに表示されているページのソースの取得方法

RichTextBox1.Text =WebBrowser1.Document.body.innertext
とすれば表示されている文字は取得できるのですがタグ付きのソースは
取得できません。

webBrowserコントロールに表示されている文字だけでなくタグもいっしょに
取得するにはどうすればよいのでしょうか

Aベストアンサー

WebBrowser1.Document.body.outerHTML
で取得できると思います。

QACCESS フォームをそのまま印刷について

お世話になります。
ACCESSのフォームを印刷する方法ってどうすればいいのでしょうか?レポートは使いたくなくて・・・・
ボタンをクリックしたらボタンを非表示にして印刷させたいのですが、やり方がわかりません。
また、印刷プレビューを表示させるボタンも作りたいのですが・・・

よろしくお願いいたします。

Aベストアンサー

>ACCESSのフォームを印刷する方法ってどうすればいいのでしょうか?
普通に[ファイル][印刷]とすれば印刷できます
どのような形で印刷されるかは印刷プレビューで確認できます

>ボタンをクリックしたらボタンを非表示にして印刷させたいのですが
VBAなら印刷はPrintformメソッドです
印刷時非表示はDisplayWhenプロパティーで設定できます

>印刷プレビューを表示させるボタンも作りたいのですが・・・
プレビューはレポートにしかないようですね
フォームは表示されているんですよね、だったら要らないのでは

>レポートは使いたくなくて・・・・
フォームと同じフォーマットのレポートなら
右クリック、名前をつけて保存でレポートを選ぶだけで簡単に作れますよ

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング