• 締切済み

印刷マクロで・・・ No2904836の続き

No2904836の印刷マクロでWendy02さんから助けていただき自宅でのテストはできたのですが、職場でコードを書き終えて実行すると If WorksheetFunction.CountA(.Range("A1").CurrentRegion) < 2 Then の部分でエラ-438が出ます。 原因がわかりません。コードの書き違えもありません。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 確か、会社のExcelは、Ver.2000 でしたね。 「エラー438」というのは、その元になっているオブジェクトには、プロパテイやメソッドがないと意味のはずです。そのコードは、Excel 97も通ります。命令の部分が、仮に点一つでも違っていても、 「エラー438」は出てきます。 そういう時は、その部分だけを抜き出して、マクロにしてみるのがよいです。 Sub TestA() With Worksheets("Sheet1") If WorksheetFunction.CountA(.Range("A1").CurrentRegion) < 2 Then   MsgBox WorksheetFunction.CountA(.Range("A1").CurrentRegion) End If End With End Sub ただし、Applicationが通らないところでは、WorksheetFunction は利きません。その部分自体は、データのない時にエラー解除ですから、それ自体はなくてもかまいませんが、別の場所で同じエラーが出る可能性が高いです。

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。横から(?)失礼します。 >エラ-438 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」のエラーですか? #WorksheetFunction.CountAをサポートしてない? 職場でお使いのExcelのバージョンは何ですか? とりあえず If Application.CountA(.Range("A1").CurrentRegion) < 2 Then や If .Range("A1").CurrentRegion.Count < 2 Then や If .Range("A65536").End(xlUp).Row < 3 Then などと差替えて試してみてください。

関連するQ&A

  • 印刷マクロがおかしくなった~

    印刷マクロがおかしくなりました。 コ-ドは次のとおりです。 Sub 最終処理分印刷() '----- 印刷範囲 列指定 --------- Const Sh = "入力" '  <----- シ-ト名指定 Const Left_Col = "A" '  <------ 印刷範囲の左端列 Const Right_Col = "S" '  <----- 印刷範囲の右端列 Const Target_Col = "T" ' <----- 印刷データ判定列(日付形式) Const Prev_Mode = 1 '  <----- 0 = 直接印刷 /  1 = プレビュー '------------------------------ Dim TopRw As Long Dim EndRw As Long Dim Target_Date As Date Dim N As Long With Worksheets(Sh) EndRw = .Range(Target_Col & "65536").End(xlUp).Row If Not IsDate(.Range(Target_Col & EndRw).Value) Then MsgBox "印刷するデ-タがありません。 終了します。" Exit Sub Else Target_Date = .Range(Target_Col & EndRw).Value End If TopRw = EndRw Do While .Range(Target_Col & TopRw).Value = _ .Range(Target_Col & TopRw).Offset(-1).Value TopRw = TopRw - 1 If TopRw = 1 Then Exit Do Loop N = EndRw - TopRw + 1 .PageSetup.PrintArea = Range(Left_Col & TopRw & _ ":" & Right_Col & EndRw).Address If Err.Number > 0 Then MsgBox "プリンタ-の準備が、出来ていません。" Exit Sub End If If MsgBox("受付簿の印刷を開始します。印刷日は入力されていますか?", vbOKCancel, "確認") = vbOK Then '"通知書”欄から"保険証書”欄までは印刷しない .Range("K1:N1").EntireColumn.Hidden = True If Prev_Mode = 1 Then .PrintOut Preview:=True Else 'ユーザーフォームによるメッセージ表示 UserForm2.Show vbModeless DoEvents .PrintOut Preview:=False 'メッセージ用のユーザーフォームを閉じる UserForm2.Hide MsgBox Target_Date & " 印刷分を " & N & _ " 件 印刷しました。", , "印刷完了" End If End If .PageSetup.PrintArea = False '印刷終了後"通知書”欄から"保険証書”欄まで再度表示 .Range("K1:N1").EntireColumn.Hidden = False End With End Sub VBAを実行すると、 > .Range("K1:N1").EntireColumn.Hidden = True 実行時エラ-’1004’ RangeクラスのHiddenプロパティを設定できません。 原因がわかりません。

  • Excel 印刷のマクロ

    前任がExcelで作成した請求書のファイルで 「全印刷」のボタンを実行すると 顧客の請求書を1枚ずつ印刷する仕組みになっています。 新しい顧客ができたら、別のシートのリストに名前や金額を追加していくようになっているのですが、しばらくはうまくいっていたのに、あるときから、新しい顧客の請求書だけが印刷されなくなってしまいました。 そこで、全印刷のマクロのコードを確認すると下記のようになっていました。 'リストを1行1枚の伝票形式で印刷するマクロ Sub 全印刷() Worksheets("請求書").Activate TDATA = Range("g3") For 伝票カウンタ = 1 To TDATA Range("C3") = 伝票カウンタ STYPE = Range("E3") If (STYPE = 0) Then Else 印刷 End If Next 伝票カウンタ End Sub Sub 印刷() ' Range("B4:G48").Select ActiveSheet.PageSetup.PrintArea = "$b$4:$g$48" ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub と記述がありました。 この中で、印刷するリストや範囲に関係するような記述が分かれば何とかなるのかと考えているのですが・・・。 何か分かる方、教えていただけませんか?おそらく、直接的な印刷対象の記述はないように思えるのですが・・・ ヒントでもあればと思っています。

  • エクセルで簡単なマクロを組んだのですが…。

    連続印刷を行う簡単なマクロを組んだのですが、指定行を変更しても1行目からまた印刷されてしまうのですがどうしてでしょうか?ちなみにこんなマクロです。 'リストを1行1枚の伝票形式で印刷するマクロ Sub 個票発行() Worksheets("個票").Activate Dim 個票カウンタ As Integer For 個票カウンタ = 1 To _ Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) Range("B1") = 個票カウンタ 印刷 Next 個票カウンタ End Sub よろしくお願いいたします。マクロ初心者です。

  • 集約印刷のマクロについて

    Sub 印刷() Sheets("印刷用").Select If Range("$A$3") > Range("$B$3") Then End '印刷開始と終了の矛盾回避 Range("$B$1") = Range("$A$3") - 1 '印刷開始番号のセット For A = Range("$A$3") To Range("$B$3") '印刷繰り返し回数のセット Range("$B$1") = Range("$B$1") + 1 '印刷する番号の加算 If Range("$B$1") > Range("$B$4") Then Exit For '印刷終了番号にを越えたら終了 ActiveWindow.SelectedSheets.PrintOut Copies:=1 '印刷命令 Next A End Sub  EXCELで以上のようなマクロを組みました。 A3のセルに印刷を開始するシート2にあるデータを含むページ(VlOOKUPで参照)のページ数を、B1に印刷を終了する同じシート2にあるデータを含むページ(VlOOKUPで参照)のページ数を入力して、A4で150枚程度の印刷を行うマクロです。  用紙節約のため、A4の用紙に4枚、あるいは2枚を集約して印刷したいのですが、上の特定のページから特定のページへ印刷するマクロにどのようなマクロを組み込めば、A4の用紙に4枚、あるいは2枚を集約して印刷ができるでしょうか。ご教示のほど宜しくお願いいたします。  バージョンはEXCEL 2007  OS Windows 10です。印刷機器はNEC2900Cです。

  • 一覧表から特定の行のみを選択して印刷するマクロですが、もう一歩のところで悩んでいます。

    'リストを1行1枚の伝票形式で印刷するマクロ Sub 個票発行() Worksheets("個票").Activate Dim 個票カウンタ As Integer For 個票カウンタ = 1 To _ Application.WorksheetFunction.CountA(Worksheets("一覧表").Range("A1:A88")) Range("B1") = 個票カウンタ 印刷 Next 個票カウンタ End Sub これだとA1からA88まですべて印刷してしまうのですが特定のセルに★印のある行のみ選択後印刷したければどういうマクロを組みいれればいいですか?お教えください。

  • 再び印刷マクロを

    フィールド行はA列からT列までなのですが、途中のK列からN列までは印刷したくないために、2行のマクロ Range("K1:N1").EntireColumn.Hidden = True Range("A1:S1").PrintOut を挿入したのですが、エラーとなってしまいます。 印刷マクロは下のようになっています。 Sub 最終処理分印刷() '----- 印刷範囲 列指定 --------- Const Sh = "入力シート" '  <----- シート名指定 Const Left_Col = "A" '  <------ 印刷範囲の左端列 Const Right_Col = "S" '  <----- 印刷範囲の右端列 Const Target_Col = "T" ' <----- 印刷データ判定列(日付形式) Const Prev_Mode = 1 '  <----- 0 = 直接印刷 /  1 = プレビュー '------------------------------ Dim TopRw As Long Dim EndRw As Long Dim Target_Date As Date Dim N As Long With Worksheets(Sh)  EndRw = .Range(Target_Col & "65536").End   (xlUp).Row TopRw = EndRw Do While .Range(Target_Col & TopRw).Value = _ .Range(Target_Col & TopRw).Offset(-1).Value TopRw = TopRw - 1 If TopRw = 1 Then Exit Do Loop Range("K1:N1").EntireColumn.Hidden = True Range("A1:S1").PrintOut N = EndRw - TopRw + 1 .PageSetup.PrintArea = Range(Left_Col & TopRw & _ ":" & Right_Col & EndRw).Address If Err.Number > 0 Then Exit Sub End If If Prev_Mode = 1 Then .PrintOut preview:=True Else .PrintOut preview:=False End If .PageSetup.PrintArea = False End With End Sub

  • エクセルのマクロについて

    エクセルのマクロ実行についてですが、 例えば、 E1セルの値が1ならばこうする(マクロ名 E1セル1) E2セルの値が2ならばこうする(マクロ名 E1セル2) E3セルの値が3ならばこうする(マクロ名 E1セル3) というマクロを別々に作りました。 これをボタンで実行する時に、 If Range("E1").Value = 1 Then ElseIf Range("E1").Value = 2 Then 2行目には作ったマクロを全部貼り付けないといけないのでしょうか? それとも簡単にこの場合は、マクロ名E1セル1を実行するという命令することができるのでしょうか? できるのであれば、入力方法を教えてください。 質問が分かりにくいと思いますが、よろしくお願いします。

  • マクロでセルに関数を入れようしてもエラーになる

    Excel2007 windows7 使っています。以下のマクロを実行すると、アプリケーション定義やオブジエクト定義エラーになってしまします。どうしてでしょうか。ご教示お願いします。 sub test() If Not IsNumeric(Range("F17").Formula) Then Range("f17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(+D10,""*改定*""),78,39))" End If end sub

  • IF = 0 Then 空欄と認識してくれない

    下記のように、$B4:$B28セルが全て空欄の際にマクロ1を実行しないようにしたいのですが、うまくいきません。 Sub マクロ() If Application.WorksheetFunction.CountA(Sheets("一覧").Range("$B4:$B28")) = 0 Then Exit Sub End If マクロ1 End Sub $B4:$B28には、実際は空欄ではなくて、=IF(Sheet2!A1="","",Sheet2!A1)の関数がずらーっと入っています。 表示上は空欄の時でも空欄とは認識されず、マクロ1が実行されてしまうのです。 マクロを実行したい時は、$B4:$B28のセルの一部、または全てのセルに4桁の数字が表示された時だけです。 $B4:$B28のIF関数を消して完全に空セルにすると正常に動作して、マクロ1が実行されずに済みます。 $B4:$B28にIF関数を入れたままで表示上空欄に見える状態でマクロ1を実行させないような条件出し として、0 Thenが不適切なのでしょうか。 マクロ実行有無の条件設定として、他に適切な方法があるのでしょうか。 Win7 64bit エクセル2010 宜しくお願いします。

  • 2つのマクロを1つにしたい

    いつもお世話になっております。 今回もよろしくお願いいたします。 (1)14のシートがあるのですが、データーのある2から14までのシートを印刷する。 (2)上記のうち、c列のデーターで連続しているセルを結合する。 (1)と(2)を合わせて1つのマクロにしたいのですが、アクティブシート1つにしか(2)のマクロが動きません。 下記のコードの間違いを教えてください。 Sub 契約書目次印刷() Dim Sh As Worksheet Dim t As Long Dim i As Range t = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 'データーのあるシートだけ印刷 For Each Sh In Worksheets(Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)) If Sh.Range("A2").Value <> "" Then '連続データーセル結合 For Each i In Range("C1:C" & t) If i.MergeArea(1).Value = i.Offset(1).Value Then Range(i.MergeArea, i.Offset(1)).Merge End If Application.DisplayAlerts = False Next i End If Sh.PrintPreview Next Sh End Sub

専門家に質問してみよう