VBAの初心者です。詳しく教えてください。
1.下記のVBAでシートを非表示にしたときに実行時エラー1004が出るのですが  どうしたらよいのですか。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub printappointedrange()

Worksheets("シート1").Activate
Range("A1:AB42").Select 'セル範囲の選択

With ActiveSheet
.PageSetup.PrintArea = Selection.Address '印刷範囲の指定
.PrintOut '印刷
.PageSetup.PrintArea = False '印刷範囲のクリア
End With

End sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

2.シートに印刷ボタン作成して、印刷はできるのですが、印刷する前にプリンターの設定を変更する方法は無いのですか。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

シート2の表示、非表示にかかわらず、印刷を行います。


簡単にしてあります。

Sub printappointedrange()
  Dim ws As Worksheet 'ワークシート
  Set ws = Worksheets("シート2")

  Dim ws2visible As Boolean 'シート2の表示条件

  Application.ScreenUpdating = False '画面更新ストップ

  ws2visible = ws.Visible
    'シート2が非表示なら表示する
    If ws2visible = False Then
      ws.Visible = True
    End If

  ws.Activate
  ws.PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定

  Application.Dialogs(xlDialogPrint).Show 'プリンタ設定

  'シート2の表示を戻す
  If ws2visible = False Then
    ws.Visible = False
  End If

  Worksheets("シート1").Activate
  Application.ScreenUpdating = True '画面更新

End Sub
    • good
    • 0
この回答へのお礼

いろいろ、教えていただきありがとうございます。
本に記載されている、マクロの記述と回答を頂いた記述が違ったので、悩みましたが、本より回答を頂いたほうが、よく分かりました。

お礼日時:2002/01/18 12:38

質問の『印刷する前にプリンターの設定を変更する方法』の意味がよくわからなかったので、


xlDialogPrintとxlDialogPrinterSetupを回答したのですが、補足では、『xlDialogPrint』が使ってあり、
このままでは、

1.『xlDialogPrint』のダイアログでOKボタンを押したためにボタンがあるシート1を印刷

2.マクロの『.PrintOut』でシート2の印刷

となって、シート1、シート2が印刷されるはずです。

A.『プリンターの設定』が印刷書式の設定なら『xlDialogPageSetup』を
B.『プリンターの設定』がプリンタの切替等なら『xlDialogPrinterSetup』を使用します。

C.『印刷』のダイアログをだすのなら『xlDialogPrint』ですが、このままだとシート1も印刷してしまいます。

『印刷する前にプリンターの設定を変更する方法』がCの場合は補足してください。

この回答への補足

申し訳ありませが、『印刷する前にプリンターの設定を変更する方法』Cの場合を教えてもらえますか。
よろしくお願いします。

補足日時:2002/01/13 22:53
    • good
    • 0

中に書き込んでみました。


非表示なら表示して印刷後非表示に戻しています。
非表示でも印刷しています。(質問でここが一番分からない。非表示なら印刷する?しない?)

プリンタの設定は『'』をはずして確認して下さい。

Sub printappointedrange()
  Dim Sheet1Visible As Boolean 'Sheet1のマクロ実行時のVisibleの設定

  'プリンタの設定→どちらのことでしょうか。『'』をはずして試して下さい。
  'Application.Dialogs(xlDialogPrint).Show
  'Application.Dialogs(xlDialogPrinterSetup).Show

  Sheet1Visible = Worksheets("シート1").Visible

  Application.ScreenUpdating = False '画面更新をストップ
  If Sheet1Visible = False Then
    '非表示ならSheet1を表示する
    '非表示の場合印刷しないなら Exit Sub を書く
    Worksheets("シート1").Visible = True
  End If
  '/// ここまで追記 ///

  Worksheets("シート1").Activate
  '/// このマクロがどのコードウインドウにあるか分からないので ActiveSheet. を追加 ///
  ActiveSheet.Range("A1:AB42").Select 'セル範囲の選択

  With ActiveSheet
    .PageSetup.PrintArea = Selection.Address '印刷範囲の指定
    .PrintPreview '印刷
    .PageSetup.PrintArea = False '印刷範囲のクリア
  End With

  '/// 以下を追記 ///
  '元に戻す
  Worksheets("シート1").Visible = Sheet1Visible
  Application.ScreenUpdating = True '画面更新を戻す

End Sub

この回答への補足

質問の仕方が悪かったので、すみませんが、もう少し教えてください。
○状況
・現在シート2を非表示にしてあります。
・シート1に印刷ボタンがあります。(ボタンをマクロ登録しています・・・下記 VBAです。)
・下記のVBAで「プリンタ設定、画面更新ストップ」を追加したときに、シート1及 びシート2(選択範囲のみ)が印刷されます。
○質問
・シート1及びシート2が印刷されるので、シート1を印刷しないようにし、シート2を印刷したいのです。
・プリンタの種類によっては、プリンタ設定を2回聞いてきます。(シート1とシ ート2が印刷されるからですか)
○その他
・下記のVBAは回答を頂いたのを、私なりに修正しました。
・下記のVBAで「プリンタ設定、画面更新ストップ」を記述しない場合はシート2し か印刷されませんでした。
---------------------------------------------------------------------
Sub printappointedrange()

Dim ws As Worksheet 'ワークシート
Dim PrintFlg As Boolean '印刷するかの判定

On Error GoTo ErrorHandler 'エラー対応(非表示シート対応)

Application.Dialogs(xlDialogPrint).Show 'プリンタ設定
Application.ScreenUpdating = False '画面更新ストップ

For Each ws In Worksheets '全てのシートを調べる
With ws
Select Case .Name
Case "シート2"
.PageSetup.PrintArea = "A1:AB42" '印刷範囲の指定
.PrintOut '印刷
.PageSetup.PrintArea = "" '印刷範囲クリア
End Select
End With
Next
Exit Sub '終わり

ErrorHandler:
'シートが非表示の場合
If Err = 1004 Then
ws.Visible = True '表示する
ws.PrintOut
ws.Visible = False '非表示に戻す
End If
Resume Next '次の処理
End Sub

---------------------------------------------------------------------

補足日時:2002/01/11 18:56
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

QエクセルVBAのWith~End With構文

Win2000エクセル2000です。
下記のMacro11はTEST11のようにWith~End Withでくくれると思うのですがエラーになります。
どこがおかしいのでしょうか?

Sub Macro11()
ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
Selection.ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59
Selection.ShapeRange.Adjustments.Item(1) = 0.3016
Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD7
Selection.ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal
Selection.ShapeRange.ThreeD.Depth = 144#
End Sub

Sub TEST11()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120)
.ShapeRange.Line.Weight = 0.75
.ShapeRange.Line.ForeColor.SchemeColor = 64
.ShapeRange.Fill.ForeColor.SchemeColor = 10
.ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59
.ShapeRange.Adjustments.Item(1) = 0.3016
.ShapeRange.ThreeD.SetThreeDFormat msoThreeD7
.ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal
.ShapeRange.ThreeD.Depth = 144#
End With
End Sub

Win2000エクセル2000です。
下記のMacro11はTEST11のようにWith~End Withでくくれると思うのですがエラーになります。
どこがおかしいのでしょうか?

Sub Macro11()
ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
Selection.ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59
...続きを読む

Aベストアンサー

こんにちは。maruru01です。

>出来ればSelectしないでShapeRangeの属性を一括変更したいのですが・・・。
Selectしないならこうです。


Sub TEST12()
With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120)
.Line.Weight = 0.75
.Line.ForeColor.SchemeColor = 64
.Fill.ForeColor.SchemeColor = 10
.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59
.Adjustments.Item(1) = 0.3016
.ThreeD.SetThreeDFormat msoThreeD7
.ThreeD.PresetMaterial = msoMaterialMetal
.ThreeD.Depth = 144#
End With
End Sub

Q実行時エラー'9' "インデックスが有効範囲にありません。"

こんにちは。
OS・・・Win95
Excel97
を使用しているマシンで、
既存ExcelBookを開いたり、新規にBookを開いたりするときに常にこのエラーがでます。
実行時エラー'9' "インデックスが有効範囲にありません。"
というエラーです。
過去ログを見てみるとマクロが関連しているかもしれないようですが、マクロは使ってません。
「終了」すると通常に使えますが、どうしたら直るのでしょうか?
どなたか教えてください。
よろしくお願いします。

Aベストアンサー

#1です。

Personal.xlsを別のフォルダに移動しましょう。
もし本当に不要ならゴミ箱へポイしても構いません。

その後Excelを起動したらどうでしょう?

Q印刷したい範囲が2ヶ所ある時の印刷範囲に設定する場合

いつも御世話になります。
複数の印刷範囲を指定して印刷したいが何かいい方法がないでしょうか
例えば

A4:C16
G4:I16

と言う具合に2ヶ所があるときはどうすればいいでしょうか。
いい方法があればご指導下さい。
よろしく御願いします。

Aベストアンサー

D~F列番号をドラッグ選択し
右クリックで「非表示」にしてから
印刷するのではダメですか?

QエクセルシートのPPTへの挿入...おしえて。

すみません。どうしてもうまく行かないもので。(^_^;)?


日頃、細かい編集が楽なのでいろいろなプレゼンテーションのシートをエクセルで作っています。図の貼り付けや文字ベタガキも混在しています。

たまたま事情があって、それをPPT(=パワーポイント)に落とし込まなくてはいけなくなりました。

---

○ 指定のエクセルファイルの指定シートを開いた状態で保存。
○ PPTを開いて[挿入][オブジェクト]からエクセルファイルを指定します。

すると、欲しい1シートがまるごと入ってこなくて、部分的にしかインポートされません。全体の2/3ぐらいだけです。

元のエクセルシートには[ページ設定]としては100%~60%までいろいろあります。その設定をあえて100%に戻してみましたが状態は変わりません。

しかたなく[挿入]は使わないで、ふつうにコピー&ペーストもしてみましたが変わりませんでした。部分的です。

唯一成功したのは、新しくエクセルシートをつくって、[ページ設定]も100%としたダミーデータを作って[挿入]..をしてみたら全部入りました。ただ最初の1回だけで、その後元データを少々編集していたら、またいつものとおりになってしまいました。2/3ぐらいしか入ってきません。(+_+)


何かヒントはありますでしょうか?

すみません。どうしてもうまく行かないもので。(^_^;)?


日頃、細かい編集が楽なのでいろいろなプレゼンテーションのシートをエクセルで作っています。図の貼り付けや文字ベタガキも混在しています。

たまたま事情があって、それをPPT(=パワーポイント)に落とし込まなくてはいけなくなりました。

---

○ 指定のエクセルファイルの指定シートを開いた状態で保存。
○ PPTを開いて[挿入][オブジェクト]からエクセルファイルを指定します。

すると、欲しい1シートがまるごと入ってこ...続きを読む

Aベストアンサー

Microsoftのホームページに「Excel ワークシートに入力した文字列が一部しか表示されない」という記載がありました。
解決なるでしょうか?

参考URL:http://www.microsoft.com/JAPAN/support/kb/articles/J028/3/43.htm?LN=JA&SD=SO&FR=0

QGoToRecordで実行時エラー '2105'

教えてください。Access2000です。

Private Sub 次へ_Click()
On Error GoTo Err_次へ_Click
On Error Resume Next
DoCmd.GoToRecord , , acNext
Exit_次へ_Click:
Exit Sub
Err_次へ_Click:
MsgBox ERR.Description
Resume Exit_次へ_Click

End Sub

って書いたのですが、最後のレコードまで行った後
「次へ」をクリックすると実行時エラーになってしまいます。
移動できませんとかメッセージで逃げたいのですがどうすればいいのでしょうか?
お願いします。

Aベストアンサー

こんにちは。maruru01です。

先頭レコードや末尾レコードは以下のように判定出来ます。


Dim tempRecNum As Long

tempRecNum = Me.CurrentRecord
Select Case tempRecNum
  Case Me.Recordset.RecordCount
    MsgBox "一番後ろのレコード"
  Case 1
    MsgBox "一番前のレコード"
  Case Else
    MsgBox tempRecNum & "番目のレコード"
End Select


人気Q&Aランキング

おすすめ情報