• ベストアンサー

For~Nextで印刷だけさせようとしましたが、うまく動きません

マクロの初心者です。まだほとんどわかっておりませんので、よろしくお願いします。 ユーザーフォームにシートの表の任意の番号を入力して、業者1から業者2までの連番で封筒に住所が印刷したくてコードを書きました。 変数 i の使い方がわからないので教えてください、お願いします。 Private Sub Cmb業者1_AfterUpdate() '番号に対し業者名を表示する '変数の宣言 Dim MyKC As Long 'Txt業者に対応する業者名を表示する MyKC = Cmb業者1.Value Txt業者名1.Text = Application.WorksheetFunction. _ VLookup(MyKC, Range("電気住所"), 3) End Sub ------------------------------ Private Sub Cmb業者2_AfterUpdate() '番号に対し業者名を表示する '変数の宣言 Dim MyKCC As Long 'Txt業者に対応する業者名を表示する MyKCC = Cmb業者2.Value Txt業者名2.Text = Application.WorksheetFunction. _ VLookup(MyKCC, Range("電気住所"), 3) End Sub ------------------------------ Private Sub Cmd印刷_Click() '変数の宣言 Dim i As Long 'プリンターの設定 Application.ActivePrinter = "Canon iP4300:" '印刷クリック時の処理 For i = MyKC To MyKCC Range("A1").Value = i.Value            ここの i で止まります ActiveSheet.PrintOut Copies:=1 Next i Unload Form電気業者印刷 End Sub ------------------------------ Private Sub Cmd終了_Click() '「終了」ボタンをクリック時の処理 'MyDlgにFalseを代入し、フォームを閉じる MyDlg = False Unload Form電気業者印刷 End Sub 単純に印刷するだけです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

コードだけで推測します。 > For i = MyKC To MyKCC ここで使われているMyKCとMyKCCは、他のプロシージャの内側で宣言されているため、Private Sub Cmd印刷_Click()からは見えません。常に0が入るので、A1が0となります。 Dim MyKC As Long Dim MyKCC As Long をそれぞれSubプロシージャの外側に出し、Subの内側での宣言は削除してください。。 Dim MyKC As Long  ←Subの外側で宣言 Dim MyKCC As Long  ←Subの外側で宣言 Private Sub Cmb業者1_AfterUpdate() ・・・ Dim MyKC As Long ←ここは削除かコメントアウト ・・・ End Sub Private Sub Cmb業者2_AfterUpdate() ・・・ Dim MyKCC As Long ←ここも削除かコメントアウト ・・・ End Sub

daibaas
質問者

お礼

Wizard_Zero様 ありがとうございます。 A1 が 0 ではなく入力されました。 今度は MyKC の値を繰り返し印刷してしまい、値が変化しません。 封筒の印刷のためプリンターから一々紙の確認をしてくるのでだめなのでしょうか。 できれば確認もマクロ内に書きたいのですが、わかりません。 よろしくお願いします。

daibaas
質問者

補足

Wizard_Zero様 すみませんでした。 私の勘違いで、動きました。 ありがとうございました。 封筒の印刷のためプリンターから一々紙の確認をしてくるのを、できれば確認もマクロ内に書きたいのですが、わかりません。 できましたらよろしくお願いします

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

i.Value は i だけでいい .valueはセルなどの値を使うとき range("A2").value A2セルの値 他のコードは見てません気づいたところだけ

daibaas
質問者

お礼

早速の回答ありがとうございます。 i で動きましたが今度は A1 の値が 0 になってしまいました。 変数の定義が間違っているのでしょうか。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ユーザーフォームで入力するときに、値を残して訂正分だけ訂正して入力したいのですが、できません。

    マクロの初心者です。 参考書を見ながらマクロを書きましたが、ユーザーフォームからセルに書き込み後、Cmmandと、Txtに入力データを残しておいて、次は訂正部分だけを訂正して書き込みをしたいのですが、コードがわかりません。 まだマクロをほとんど理解していませんので、よろしくお願いします。 Option Explicit Public MyDlg As Boolean Sub 鳥獣入力() 'データ入力ダイアログを呼び出す MyDlg = True 'MyDlgにtrueを代入する '入力開始位置の取得 Sheets("様式1").Select Range("B9909").End(xlUp).Activate ActiveCell.Offset(1, 0).Activate 'MyDlgにFalseが代入されるまで繰り返しダイアログを表示する Do Until MyDlg = False Form鳥獣入力.Show Loop End Sub -------------------------------- Private Sub Cmd終了_Click() '「終了」ボタンクリック時の処理 'MyDlgにFalseを代入し、ダイアログを閉じる MyDlg = False Unload Form鳥獣入力 End Sub -------------------------------- Private Sub Cmd入力_Click() '入力クリック時の処理 'ダイアログのデータをワークシートに入力する ActiveCell.Value = Cmb登録種別.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Txt登録証.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb年月日.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb鳥獣名.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb雌雄の別.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Txt捕獲数.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmbメッシュ番号.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Cmb市町村名.Value ActiveCell.Offset(0, 1).Activate ActiveCell.Offset(1, -8).Activate Unload Form鳥獣入力 End Sub -------------------------------- 入力、書き込みはできましたがユーザーフォームにデータを残すことができません。 よろしくお願いします。

  • Excel  関数をまたいだTargetの使用

    excel2013 OS はwindows8を使用しています。 Excelのマクロで、以下のコードについて質問です。(コード内の・・・は省略の意) Private Sub Worksheet_Change(ByVal Target As Range) Dim ・・・・・・・      ・      ・  If Target.Value = ・・・・・    Call myfunction End If End Sub Sub myfunction() If 条件 Then Target.Offset(0,1).Value = "aaa" End If End Sub このマクロのPrivate Sub Worksheet_Change(ByVal Target As Range)を実行するとエラーが 出ます。エラーの内容は「オブジェクト変数またはwithブロック変数が設定されていません」 となり、 Target.Offset(,1).Value = "aaa" の行が黄色く表示されます。 myfuncton内で使用しているTargetが何なのかがわからないというエラーだと理解しています。 そこで私は以下の2つを試しました。 1つめはうまくいかず、2つめは何か2度手間のような感じがするのですが、正常動作する ようです。 そこで質問なのですが、Targetをプロシージャをまたいで利用したい場合に一般的に用いら れている手法などがあれば教えて頂きたいです。 1つめ・・Targetをプロシージャをまたいで使えるようにコードの一番上の部分 、つまり、Private Sub Worksheet_Change(ByVal Target As Range)の一行上の 部分にDim Target As Range と宣言してみました。が、これはうまくいきませんでした。 2つめ・・適当な(この場合e)変数を宣言し、プロシージャをまたいで使用する。 Dim e As Range Private Sub Worksheet_Change(ByVal Target As Range) Dim ・・・・・・・      ・      ・  If Target.Value = ・・・・・ Set e = Target    Call myfunction End If End Sub Sub myfunction() If 条件 Then e.Offset(0,1).Value = "aaa" End If End Sub 以上何か良い方法があれば教えて頂きたいです。また不明な点があれば ご質問ください     

  • VBAでファイルにFor・・・Nextを使いたい

    EXCEL2000でVBA作成しています。 シート名の違うシート10枚に次々に公式を入れていきます。以下のコードで目的を達成できました。 しかし、みるからに稚拙なコードです。 For・・・Nextを使ってこれを書き換えたいのですが(ループ回数10回)、変数の設定とかコードの書き方が分かりません。ご教示お願いします。 Sub 作成部品() Application.DisplayFormulaBar = True Dim i As IntegerIntegerActiveWindow.DisplayHeadings = False ActiveWindow.DisplayHorizontalScrollBar = False 'シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If Range("t4").Value = Date '日付をいれる Range("l12").Formula = "=if(+H12*J12=0,"""",+H12*J12)" ActiveSheet.Protect End Sub Sub 請求書入力() Application.ScreenUpdating = False Worksheets("SM").Activate 'シートをアクティブに Call 作成部品 Worksheets("I").Activate 'シートをアクティブに Call 作成部品 続く・・・ End Sub

  • ExcelVBA  For・・・Next

    今年に入ってからExcelVBAを勉強し始めました For・・・Nextについて疑問があります 例えば下記のような Sub aa() Dim i As Integer For i = 1 To 10 Next ActiveCell.Value = i End Sub 上記を実行するとアクティブセルは[11]になります 普通に考えると[10]だと思うのですが? なぜでしょうか? お願いします

  • リストから納品書の印刷

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1183409では、リストにあるデータの納品書の印刷について教えていただき、ありがとうございました。 Sub 楕円1_Click() Dim i '●●変数の宣言●● Worksheets("sheet1").Activate For i = 2 To 3 '300 Cells(1, "F") = i Range("a1:c8").PrintOut Next i End Sub sheet1で、印刷をすることにして、 リストは、sheet2にあるのですが、 マクロを実行すると、3行目までしか 印刷をしてくれないのですが、それはどうしてでしょうか。勉強不足なので何度も質問してごめんなさい。 よろしくお願いいたします。

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • EXCEL VBA UserForm のご質問

    よろしくお願いします ユーザーフォームに決定ボタンで、テキストボックスを任意の数追加しました。 追加されたテキストボックスにD1.D2.D3.D4・・・と名前をつけ、それぞれに 1.2.3と数値を記入し、 登録ボタンをクリックした後ワークシートkeyplanの 指定したセルD30~G30へ代入させようとしたところ、 「変数が定義されていません」となってしまいます。 Nameの付け方が悪いのでしょうか。転機の仕方が悪いのでしょうか。 マクロを勉強し始めて日が浅いので、対処の方法がわかりません。 ご回答よろしくお願いします。 Option Explicit Private Sub UserForm_Initialize() worksheets("keyplan").Select End Sub Private Sub 決定_Click() Dim txt As Variant Dim i As Integer 'テキストボックスを配置 i = nyuryokubox() For i = 1 To i Set txt = Me.Controls.Add("Forms.Textbox.1", , True) With txt .Width = 20 .Height = 18 .Top = 300 .Left = 1 + (.Width + 80) * (i + 1) .BorderColor = &H666666 .BorderStyle = fmBorderStyleSingle .Font.Size = 15 .Name = "D" & i End With Next End Sub Private Sub 登録_Click() With worksheets("keyplan").Select .Range("D30").Value = D1.text .Range("E30").Value = D2.text .Range("F30").Value = D3.text .Range("G30").Value = D4.text End With End Sub 変数 i にはテキストボックス(nyuryokubox)に直接数値を入れるようにしています

  • Objectで宣言するのとObject型で宣言する

    Objectで宣言するのとObject型で宣言するのではどちらがいいでしょうか? エクセルです。 VBAでコードを作るにおいて、どちらのほうがいいのでしょうか? どちらも同じ動きをします。 Sub Sample1() Dim buf As Range Set buf = Range("A1") MsgBox buf.Value End Sub Sub Sample2() Dim buf As Object Set buf = Range("A1") MsgBox buf.Value End Sub ご回答よろしくお願いします。

  • 再:(できる方)エクセルVBA印刷済を印刷しない

    リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。 リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように したいです。 例)10:00 1~3を入力/1~3を印刷済    11:00 4~6を入力/4~6を印刷する ※10:00の1~3hは再度印刷しないようにする ■したいこと 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、 次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたい ※現マクロは下記にしるしています。(モジュール1) ※画像に関連する2つのシートを添付しています 上部:データ入力 下部:問合せ回答一覧 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 流し込み印刷() Sheets("データ入力").Select Dim mylastRow As Long '最終行を格納する変数 Dim myLastCol As Integer '最終列を格納する変数 Dim myLastCell As String '最終セルを設定する変数 With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル '最終行の行番号 mylastRow = .Rows(.Rows.Count).Row '最終列の列番号 myLastCol = .Columns(.Columns.Count).Column End With Dim i As Integer For i = 7 To mylastRow '1 Sheets("問合せ回答一覧").Range("F3:J3") = Sheets("データ入力").Cells(i, 1).Value '2 Sheets("問合せ回答一覧").Range("F4:J4") = Sheets("データ入力").Cells(i, 2).Value '3 Sheets("問合せ回答一覧").Range("F5:J5") = Sheets("データ入力").Cells(i, 3).Value '4 Sheets("問合せ回答一覧").Range("H8:V8") = Sheets("データ入力").Cells(i, 4).Value '5 Sheets("問合せ回答一覧").Range("H9:V9") = Sheets("データ入力").Cells(i, 5).Value '6 Sheets("問合せ回答一覧").Range("H10:V10") = Sheets("データ入力").Cells(i, 6).Value '7 Sheets("問合せ回答一覧").Range("H11:V11") = Sheets("データ入力").Cells(i, 7).Value '8 Sheets("問合せ回答一覧").Range("H12:V12") = Sheets("データ入力").Cells(i, 8).Value '9 Sheets("問合せ回答一覧").Range("H13:V13") = Sheets("データ入力").Cells(i, 9).Value '10 Sheets("問合せ回答一覧").Range("H14:V14") = Sheets("データ入力").Cells(i, 10).Value '11 Sheets("問合せ回答一覧").Range("H15:V15") = Sheets("データ入力").Cells(i, 11).Value '12 Sheets("問合せ回答一覧").Range("H16:V16") = Sheets("データ入力").Cells(i, 12).Value '13 Sheets("問合せ回答一覧").Range("H17:V17") = Sheets("データ入力").Cells(i, 13).Value Sheets("問合せ回答一覧").PrintOut Next i = i + 1 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • VB初心者です For Nextの構文について

    処理したい内容はA列に数字1~10まで数字を A1のセルから順番に入力させるという処理を For Next を使用して実行させたいのですが上手くいきません。ソースは以下になります。 Sub 記入() Dim i As Integer Dim n As Integer n = 0 For i = 1 To 10 n = n + i Next >Range("A" + n) = n End Sub >の部分でエラーになります。ここの部分を A1 A2 A3 ・ ・    列番号 と A + ○ を繰り返しでカウント変数 n で繰り返しをさせたいのですが、どう処理すればよろしいですか? アドバイスお願いします。

このQ&Aのポイント
  • プリンターのEW-052Aを使用しており、3か所のボタンでランプが点滅し、印刷ができません。エラーコード033001が表示されています。
  • 3時間にわたり解決方法を試しましたが、問題は解決せず、どうにもならない状況です。
  • EPSON社製品に関する質問です。プリンターの問題について、解決方法を教えていただけると助かります。
回答を見る