• ベストアンサー

エクセルVBAで、テキストボックスに値を入れる(3)

質問がバラバラになってしまってすみません! エクセルVBAで、テキストボックスに値を入れる(1)の 回答13で、 データシートの何行目~何行目までを印刷させる方法(Sheet7にボタン) をさせるには、どうしたら良いでしょうか?宜しくお願いします。 前回のURL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=79173       http://oshiete1.goo.ne.jp/kotaeru.php3?qid=85389

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.11

***(3)*** ユーザーフォームを挿入します。プロパティを例えば、オブジェクト名:ufSyoriCyu ユーザーフォームにラベルを作ります。Caption:"しばらくお待ちください"にします。 フォント等は適当に調整します。このフォームを表示したい時に、ufSyoriCyu.Show。処理が終わったら、ufSyoriCyu.Hideとします。 Private Sub CommandButton1_Click() ufSyoriCyu.Show 何かの処理・・・・ ufSyoriCyu.Hide End Sub ただし、処理の中身が問題で、"しばらくお待ちください"のフォームを表示しているため次の操作ができなくなることも考えられます。飾り的な機能は一番最後に追加すべきですね。 次はステータスバーに表示する方法です。 シートのコードウインドウに貼り付け。 Private Sub CommandButton1_Click() StatusShow True 'これ '何かの処理・・・・ StatusShow False 'これ End Sub 標準モジュールに貼り付け Public oldStatusMsg As String Public Sub StatusShow(OnOrOff As Boolean) With Application If OnOrOff = True Then oldStatusMsg = .DisplayStatusBar .DisplayStatusBar = True .StatusBar = "しばらくお待ちください..." Else .StatusBar = False .DisplayStatusBar = oldStatusMsg End If End With End Sub ***(4)*** UserForm1.Hide です。 (1)、(2)は考慮中です。

rurucom
質問者

お礼

nishi6さん、長い間有り難うございます。 こちらの(3)の窓は閉じておきます。つづきを(4)へお願いします。 現在、このプログラムの分は、仮完成状態で実用化しながら検証しています。いろいろと問題も出てきていますが・・・どうにか こうにか修正しながらなんとかやっています。おかげさまで、随分勉強になりました。本当に有り難うございます。 で、今は、また別なものにも挑戦しています。少しずつですが、何とか出来てきています。今度は自分でどれだけ出来るか試してみたいです。(またお世話になるかもしれませんが・・・) それでは、(4)の方につづきをお願いします。

rurucom
質問者

補足

nishi6さん! 本当にいつもありがとうございます。 OKです。nishi6さんの言うように、装飾的なものは、あんまりつけない方が良さそうです。わずらわしいときがあるようです。 >(1)、(2)は考慮中です。 よろしく、お願いします。

その他の回答 (10)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.10

挿入する2行を WakuView Val(sPatt), False WakuView Val(sPatt), True としてみてください。

rurucom
質問者

補足

お返事が遅れてすみません。 OKです。うまくいきました。 今、本データで試してます。それでまたもや質問ですが・・・ おしえていただいた、下記のコードで・・・ ***(3)***該当しなかった場合にその行のデータを別のシートに並べること出来ませんか? ***(2)***A列に、データがある場合は、判定せずにデータをフォームのシートに送らないと言うことをさせたいのですが、よろしくお願いします。 Public Function Hantei(rowNo As Long) 'パターンの自動認識 With Workbooks(wbNM).Worksheets(wsNM) 'データシートを見る Hantei = 0 Select Case True '各パターン認識設定(項目にデータの有無を判定) Case .Range("E" & rowNo + 1) <> "" 'And .Range("E" & rowNo + 1) <> "" Hantei = 1 Case .Range("C" & rowNo + 1) <> "" And .Range("F" & rowNo + 1) <> "" Hantei = 2 Case .Range("F" & rowNo + 1) <> "" And .Range("I" & rowNo + 1) <> "" Hantei = 3 Case .Range("C" & rowNo + 1) <> "" And .Range("I" & rowNo + 1) <> "" Hantei = 4 End Select End With End Function '判定終了 ***(3)***それから、贅沢なんですが・・・ プログラムが動いているときに、しばらくお待ちください。と表示させること出来ますか? ***(4)*** 結構、いろいろ付け加えてきました。で・・・ユーザーフォームを表示させて値をセルに入れているんですが、この処理が(OKボタンを押したあと)ユーザーフォームを自動で消すには、どんなコードを書いたらいいのですか? 「表示させるには、UserForm1.show でその反対は?」 またお世話になりますが、よろしくお願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.9

原因が分かりました。 rurucomさんが試されたのは、「エクセルVBAで、テキストボックスにセルの値を入れる」で回答したANo.#13のようです。私はANo.#14でOKと思い、「エクセルVBAで、テキストボックスにセルの値を入れる(3)」のANo.#7では、ANo.#14の印刷VBAを想定して書いています。 問題無ければ修正版のANo.#14で試して下さい。 少し説明を・・・・ ANo.#14の印刷ルーティンは各シートから呼び出したり、一括指示等をしたいということなので   Public Sub page_Print(sPatt, iPatt As Integer) に修正しました。  sPattは印刷パターン(=シート番号)  iPattは各シートから印刷する時は印刷パターン、一括指示する時はゼロ(全部の意味)です。  こうやって、iPattでVBA内部で処理を分岐させています。  WakuView sPatt, False は  sPattは印刷パターン(=シート番号)  Falseは線を消す WakuView sPatt, True  True は線を表示する意味です。 印刷時うまくいっていれば、シート番号はsPattで分かっているので、WakuViewを使って印刷前に強制的に線を消して印刷後線を表示できると考えています。多分、ANo.#14に2行追加でうまくいくと思います。

rurucom
質問者

補足

すみません!私も振り返ってみていたら、14番だったことにきずきました。なんだか違うなぁと思いながらすすめてました。 で、早速やってみましたら、コンパイルエラー「ByRef 引数の型が一致しません」になってしましました。多分また私が簡単なミスをしているのじゃないかなぁ?・・・・・ 何度の見直してみたのですが、どうもパニックです。またお世話になりますが、よろしくお願いします。 Public Sub page_Print(sPatt, iPatt As Integer)******ここに黄色マーク Dim myMsg As String 'メセージ If iPatt = 0 Then myMsg = (Worksheets("Sheet1").Range("B5") - 1) & " 行目" & vbLf myMsg = myMsg & "印刷パターン " & StrConv(sPatt, vbWide) & " を印刷します。" & vbLf myMsg = myMsg & "  用紙をセットしてください。" & vbLf & vbLf myMsg = myMsg & "(印刷しない場合はキャンセルを押します。)" & vbLf & vbLf If MsgBox(myMsg, vbOKCancel) = vbCancel Then Exit Sub End If End If WakuView sPatt, False '******* 追加 *******   →sPattここが反転(範囲指定状態)で印 Range("Print_Area").Select: Selection.Font.ColorIndex = 2 ActiveWindow.SelectedSheets.PrintPreview 'PrintOut Selection.Font.ColorIndex = xlAutomatic Range("Print_Area").Cells(1, 1).Select WakuView sPatt, True '******* 追加 ******* End Sub

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.8

回答した、「job_Print」と「page_Print」が今どのようになっているか補足して下さい。すぐ答えはでると思います。 なお、job_Printのメッセージボックス部分は不要です。(あってもいいですが)

rurucom
質問者

補足

この部分は、まだテストデータなので、まだ教えていただいたときのままです。 Public Sub job_Print() '指定して連続印刷 Dim myMsg As String 'メセージ Dim myNum 'インプット帰り値 Dim prtPattern As Integer '印刷パターン、0は全て Dim startRow As Long '印刷開始行、0は開始、最終行を自動計算 Dim endRow As Long '印刷最終行、0は最終行を自動計算 Dim rowCot As Long '行カウンタ myMsg = "印刷開始行を入力" & vbLf & "  <0(ゼロ)は全データ>" myNum = InputBox(myMsg): If Len(myNum) = 0 Then Exit Sub Else startRow = Val(myNum) If startRow = 0 Then startRow = 1 endRow = Workbooks(wbNM).Worksheets(wsNM).UsedRange.Rows.Count - 1 ElseIf startRow >= 1 Then myMsg = "印刷最終行を入力" & vbLf & "  <0(ゼロ)は最終行>" myNum = InputBox(myMsg): If Len(myNum) = 0 Then Exit Sub Else endRow = Val(myNum) If endRow = 0 Then endRow = Workbooks(wbNM).Worksheets(wsNM).UsedRange.Rows.Count - 1 End If Else MsgBox "エラー": Exit Sub End If Application.ScreenUpdating = False For rowCot = startRow To endRow '連続ページ印刷 Range("A2") = rowCot Tensou rowCot, prtPattern If prtPattern = 0 Or (prtPattern = shtPatt) Then '印刷パターンを判定 page_Print End If Next Application.ScreenUpdating = True Worksheets("Sheet7").Activate End Sub Public Sub page_Print() '単ページ印刷、変更しています Range("Print_Area").Select: Selection.Font.ColorIndex = 2 ActiveWindow.SelectedSheets.PrintOut 'PrintOut Selection.Font.ColorIndex = xlAutomatic Range("Print_Area").Cells(1, 1).Select End Sub 宜しくお願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.7

>印刷時がダメでした! 表示しているときは、印刷されてしまいます。これはしょうがないですかね!何かよい方法があったらお願いします。 今、モジュールがどう変わっているか分かりませんので想像ですが、 page_Print に2行追加してみて下さい。 印刷時、枠を非表示にして印刷するはずです。 Public Sub page_Print(sPatt, iPatt As Integer) Dim myMsg As String 'メセージ If iPatt = 0 Then myMsg = (Worksheets("Sheet1").Range("B5") - 1) & " 行目" & vbLf myMsg = myMsg & "印刷パターン " & StrConv(sPatt, vbWide) & " を印刷します。" & vbLf myMsg = myMsg & "  用紙をセットしてください。" & vbLf & vbLf myMsg = myMsg & "(印刷しない場合はキャンセルを押します。)" & vbLf & vbLf If MsgBox(myMsg, vbOKCancel) = vbCancel Then Exit Sub End If End If WakuView sPatt, False '******* 追加 ******* Range("Print_Area").Select: Selection.Font.ColorIndex = 2 ActiveWindow.SelectedSheets.PrintPreview 'PrintOut Selection.Font.ColorIndex = xlAutomatic Range("Print_Area").Cells(1, 1).Select WakuView sPatt, True '******* 追加 ******* End Sub

rurucom
質問者

補足

うまくいきません! >WakuView sPatt, False '******* 追加 *******ここでエラー!変数が定義されていませんになってしまいます。 sPattは何を表しているのかおしえてください。あと、全体的に処理させている内容もいまいちわかりません!すみません勉強不足で・・・多分、私が*****  追加  ******を入れる場所が悪いような気もするのですが・・・・ ただ、プログラムも複雑になってきました。 この処理方法として、枠を表示非表示させるコードの中に印刷ボタンが押されたときに枠が表示状態だったら、エラーメッセージ「非表示にしてください」で印刷キャンセルさせるようにできないか?  それか、枠表示は、一時的にテキストボックスの位置を動かすための場所が分かるようにするために表示させるだけなので、表示ボタンを押したあと、一度いずれかのテキストボックスがアクティブになり、非アクティブになった時点で非表示になるなどできないかなぁと思っているんですが、どうでしょうか? よろしくおねがいします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

各テキストボックスにはmyText・・・と名前が付いていることを前提にしています。 Sheet1にコントロールツールボックスからトグルボタンを1つ配置します。 オブジェクト名=togWakuView、Caption="枠を非表示"、Value=False にします。 これをコピーして、Sheet2~Sheet5に貼り付けます。 次を標準モジュールに貼り付けます。 '*** 枠の表示切替 *** Public Sub WakuView(vwSht As Integer, OnOrOff As Boolean) Dim shp As Shape For Each shp In Worksheets("Sheet" & vwSht).Shapes If Left(shp.Name, 6) = "myText" Then shp.Select Selection.ShapeRange.Line.Visible = OnOrOff End If Next End Sub Sheet1~Sheet5のシートモジュールに貼り付けます。 Private Sub togWakuView_Click() If togWakuView = False Then WakuView Right(Me.Name, 1), True togWakuView.Caption = "枠を非表示" Else WakuView Right(Me.Name, 1), False togWakuView.Caption = "枠を表示" End If Range(togWakuView.TopLeftCell.Address).Select End Sub トグルボタンを押す毎にテキストボックスの枠の表示・非表示が切り替わります。 こういう主旨でした?

rurucom
質問者

補足

ありがとうございました。 枠の表示、非表示はばっちりです。 印刷時がダメでした! 表示しているときは、印刷されてしまいます。これはしょうがないですかね! 何かよい方法があったらお願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

>1)検索ボタン~Sheet7に配置~ 標準モジュールの最初(Publicがある場所、Public Sub・・・ の前)に貼り付け Public strAdr, endAdr As String '検索開始、最終アドレス Public mySearch As String '検索文字 標準モジュールに貼り付け '*** 検索 *** Public Sub Kensaku() Dim wbAcv As String 'メニューブック名 Dim wsDat As Worksheet 'データシート名 Dim foundCell As Range '検索結果 Const topAdr = "$B$1" '検索開始位置 wbAcv = ActiveWorkbook.Name Set wsDat = Workbooks(wbNM).Worksheets(wsNM) If Len(strAdr) = 0 Then strAdr = topAdr endAdr = Left(topAdr, 2) & "$" & wsDat.UsedRange.Rows.Count If Len(mySearch) <> 0 Then If MsgBox("継続しますか?(新規はキャンセル)", vbOKCancel, "継続") = vbCancel Then mySearch = InputBox("検索文字を入力して下さい。"): If Len(mySearch) = 0 Then Exit Sub strAdr = topAdr End If Else mySearch = InputBox("検索文字を入力して下さい。"): If Len(mySearch) = 0 Then Exit Sub strAdr = topAdr End If Application.ScreenUpdating = False wsDat.Activate: wsDat.Range(strAdr & ":" & endAdr).Select '検索範囲 Set foundCell = Selection.Find(mySearch) '検索実行 Workbooks(wbAcv).Worksheets("Sheet7").Activate If foundCell Is Nothing Then '検索文字無し strAdr = topAdr: MsgBox "検索文字:" & mySearch & "は見つかりません。" ElseIf foundCell.Address = strAdr Then '全検索終了 strAdr = topAdr: MsgBox "検索は終了しました。" Else '検索文字発見 MsgBox "検索文字:" & mySearch & "は " & StrConv((foundCell.Row - 1), vbWide) & "行目 です。" strAdr = foundCell.Address Tensou foundCell.Row - 1, 0 '対象シートを表示 End If Application.ScreenUpdating = True End Sub シート7のシートモジュールに貼り付け。検索ボタンのオブジェクト名=cmdKensaku Private Sub cmdKensaku_Click() Kensaku End Sub 連続して検索できるはずです。

rurucom
質問者

補足

お返事が遅れてすみません! これも完璧です!検索の処理(連続検索)に感動しました。かなり実用的です。 予想以上のもので、本当にありがとうございます。 それと・・・またもや新たな問題ですが、 テキストボックス(図形)の枠の線の処理で、各シート毎で線を表示するとしないのボタンを作りたいのですが、お願いします。 条件は、線が表示されていても、印刷はしないようにしたいです(テキストボックスの中の文字は印刷する) 印刷ボタンは、各シートに1枚の印刷ボタンとSheet7に一括印刷ボタンが出来ています。 すみません!よろしくお願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

>2)終了ボタン~Sheet7に配置~ ここでは、メニュー(終了できる方)を「OkWeb_Menu.xls」 データシートを「OkWeb_Data.xls」とします。(ご自分のファイル名に変えてください)   1.タイトルバーの左のアイコンのクリック、   2.タイトルバーの右クリック   3.タイトルバーの×ボタン、   4.メニュー→閉じる、   5.ブックの× では閉じれなくする データシートのThisWorkBookのシートモジュールに貼り付けます。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Workbooks("OkWeb_Menu.xls").saveOk = False Then MsgBox "メニューから終了させてください!", vbOKOnly Cancel = True Else ActiveWorkbook.Save End If End Sub メニュー(終了できる方)のThisWorkBookのシートモジュールに貼り付けます。 Public saveOk As Boolean '終了ボタンでTrue Private Sub Workbook_BeforeClose(Cancel As Boolean) If saveOk = False Then MsgBox "終了ボタンをクリックしてから終了させてください!", vbOKOnly Cancel = True Else Cancel = False End If End Sub メニューの終了ボタンがあるシートのシートモジュールに貼り付けます。 Private Sub cmdSyuryo_Click() Dim myMsg As String myMsg = "データシートとフォームのシートを保存して終了します。" If MsgBox(myMsg, vbOKCancel, "確認") = vbCancel Then Exit Sub End If Workbooks("OkWeb_Menu.xls").saveOk = True Workbooks("OkWeb_Data.xls").Close saveChanges:=True ActiveWorkbook.Save Application.Quit End Sub 仮のファイルかコピーを作って試してください。一旦保存しないと効力を発揮しません。 データシートを単独に保存できなくするのは簡単ですが、メニューから保存指示すると、データシートの保存不可機能が働いて、データシートが保存できなくなるため、メニューからの指示ならOKという条件付にするのにブック間のモジュールレベルの変数の参照が可能か調べていました。結果はいたって単純でした。勉強になりました。 >3)前回の続きから始める~Sheet7に配置~ これは、メニューを保存(上の2)したので(すれば)、ご自分で作られた「1行前を表示」ボタンか次のデータを表示すれば自然に表示されます。 >1)検索ボタン~Sheet7に配置~ これはB列に同じ値があるんですよね。(連続検索) 明日にでも・・・(窓が全部閉じてるかと思いました。ここは明けておいて下さい)

rurucom
質問者

お礼

ありがとうございました。ばっちりです!

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

Select Case の使い方の質問のように思えましたが、違ってる? Select Caseの使い方に関しては(よく本に書いてあるのが)   Select Case Atai     Case 1: Kekka = "結果A"     Case 2: Kekka = "結果B"      ↓     Case 9: Kekka = "結果Z"   End Select という風に、Ataiという変数が1,2,・・9に従ってKekkaという変数に"結果A"、"結果B"、・・・が入るというように使います。ここで大事なのは、1回の判定ではAtaiは1~9の1つの値しかとらないということです。 Hanteiでの使い方は少し違っていて、   Select Case True     Case Atai = 1: Kekka="結果A"     Case Atai = 2: Kekka="結果B"      ↓     Case Atai = 9: Kekka="結果Z"   End Select としています。各Caseの次の式がTrue(正しい)だったら対応した値がKekkaに入ります。この使い方でも上記と同様に各Caseの次の式が同時にTrueになったら判定がおかしくなります。<Atai = 1>という式は、If Atai = 1 Then で使うように、論理式です。論理式ですから、X=1 And Y=1 AND Z=1 のような使い方ができます。Ifを使うより分かり易い(かな)と思って使いました。 まずい例を上げると、Atai1、Atai2(両者とも0または1とします)で判定する場合、   Case Atai1 = 1   Case Atai1 = 1 And Atai2 = 1 と書くと、最初の判定でAtai2がどうであれ処理されて、2つ目の式の評価がされないことになります。式の順番を逆にすればうまくいきます。VBAは上から下に順に処理していくためです。 従って、判定がどう複雑になっても、Caseの次の式がそれぞれ独立ならば正しく判定されます。 しかし、入力は人間が行ったりするのでミスはつきものです。  (1)各パターンの判定はそれぞれが独立になるように充分検討して設定する      まずい例のようになっていないか検証する必要があります。  (2)入力ミスに備えて、各パターンに該当しなかったデータについても対応する ことが必要でしょう。(2)については、パターンの判定の最後に、   Case Else: MsgBox "パターン判定エラー" というようにエラー対応し処理を中断できるようにするべきでしょう。 質問の1)、2)、3)については、暫くお待ちを。 自分で改良できるのは、分かってきた証拠でしょう。頑張って下さい。

rurucom
質問者

補足

ありがとうございます。納得しました。多分!?・・・・・ 対象の列にデータがあるかないかだけを認識しているわけですね!問題は、順序と言う事ですね! 質問の1)、2)、3)の件は、今日もいろいろ試してみましたが、やはりまだ出来ませんでした。はぁ・・・私は、まだまだですね! 宜しく、お願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

シート7のボタンの機能は、このボタンだけで  1.パターンの入力    0ならパターン無視(全パターンが印刷対象)    1~5ならそのパターンを印刷  2.開始行の入力    0なら全行    1以上ならそれが開始行  3.開始行が1以上なら最終行の入力    0なら最終行を自動設定    1以上ならそれが最終行 の手順とすることで、全パターンまたは指定パターンについて、全頁または指定頁間が印刷可能なように考えました。 したがって、 >パターン毎に印刷する場合   <<パターンの入力=1、2、3、4または5、開始行の入力=0>>     指定したパターンの全行が対象です。当然、指定パターンの開始、最終行     の入力もできます。 >データの行を範囲指定して印刷する場合   M行目からN行目の場合、   <<パターンの入力=0、開始行=M、最終行=N>>     パターンは全パターンになっているので、M行からN行が対象になります。     蛇足ですが、パターンの入力=0、開始行=0で全データの印刷になります。 説明不足でしたか。

rurucom
質問者

補足

あいやーすみません!実は、このプログラムを別の似たような処理に使おうと思って質問したので、パターンの選択はいらなっかたのです。すみません!でも、最初のインプットボックスのコードを消してとりあえず解決しました。大丈夫ですよね?ちゃんと動いてますし! ところで、本体の方の完成度はかなり高くなってきました。感謝感激です!といってもまだ、テストデータのテスト用の本体ですが・・・ほんとにありがとうございます。そこで疑問があるのですが、Hanteiの理屈を教えていただきたいのですが・・・というのが、実際のデータでは、テストデータより列数が多くて、しかもデータのあるセルとないセルがいろいろあるのですが、A列、B列、C列、を判定させただけでうまくいくのかが、心配です。差し支えなければ、理屈を教えてください。現在、実際のデータにあわせて作っている最中ですが、まだまだかかりそうなのでよろしくお願いします。 そろそろ、最後の質問になってくると思いますが・・・あといくつかお願いします。やればやるほど欲が出てきてしまってすみません! いろいろ付け加えているのですが、下記の内容の処理がわかりません! 1)検索ボタン~Sheet7に配置~ ボタンを押すことで、インプットボックスが開きそこに入力された文字や数字を列Bから検索させて、該当データを印刷フォームを表示する。 2)終了ボタン~Sheet7に配置~ 終了ボタンを押すことで、データシートを「上書き保存」してデータシートとフォームのシートを閉じる。 もし、「×」で閉じようとしたら、エラーメッセージ、終了ボタンをクリックしてから終了させてください!と表示させる。 3)前回の続きから始める~Sheet7に配置~ ゲームで言うコンティニューみたいなもので・・・前回最後に印刷させた行を表示させるボタン。 ※Sheet7は、メインメニューとして使っています。 その他、こんなものを付け加えました。nishi6先生からおこられるかなぁ?一応動いてくれてます。ご指摘がありましたらよろしくお願いします。 (1)******* Private Sub CommandButton3_Click() '先頭行の表示ボタン Range("B5") = 1 Tensou Range("B5") - (Range("B5") = 0), 0 End Sub (2)******* Private Sub CommandButton4_Click() '1行前を表示 Range("B5") = Range("B6") 'B6のセルに"=B5-2"を入れました。 Tensou Range("B5") - (Range("B5") = 0), 0 End Sub (3)******* Private Sub CommandButton2_Click()’任意で行を指定して表示させました。 Dim tiMsg As String 'メッセージ Dim tiNum 'インプット帰り値 Dim StRow As Long '表示する行 tiMsg = "最初に表示させたい行を入力" & vbLf tiNum = InputBox(tiMsg) Range("B5") = tiNum - 1 Tensou Range("B5") - (Range("B5") = 0), 0 End Sub (4)****** Private Sub CommandButton4_Click()  ’データシートを表示させるボタンをSheet7につけました。 Workbooks.Open "データ.xls" Worksheets("Sheet1").Activate  ※ここで本当は、データの左上を表示させたかったのですが出来ませんでした。 End Sub (5)****** Private Sub Workbook_Open()’ThisWorkBookにコーディング  ’本体を開くとデータシートも開くようにしました。 Workbooks.Open ("データ.xls") Worksheets("Sheet7").Activate MsgBox ("ようこそ") End Sub あとは、ヘルプ機能を付けていきたいと思っています。ヘルプと言ってもワードかメモ帳にでも項目毎にちょこっと書いて、それを見に行くようにするだけですけど・・・この辺は、がんばって出来そうです。 長くなりましたが、よろしくお願いします。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

シート7にボタンを1つ作成します。VBAのコントロールツールボックス(トンカチとスパナみたいなアイコン)のコマンドボタンです。 コマンドボタンをダブルクリックして、VBE画面のシート7のシートモジュールに 下記を貼り付けます。13の回答ではCommandButton1が複数表れるので、3番目のボタンの意味でCommandButton3と書いてしまいました。シート7にコマンドボタン1個の場合はCommandButton1となるはずなので job_Print を書けばおしまいです。 ====印刷シート7のシートモジュールに貼り付け===== Private Sub CommandButton1_Click() job_Print End Sub

rurucom
質問者

補足

説明不足ですみませんでした。 パターン毎に印刷する場合と、データの行を範囲指定して印刷する場合とを別々にしたかったのです。現在のボタンは残したままでいいのですが、別にパターンを無視した行の指定をさせたたかったのです。 本当にすみません!説明不足で!よろしくお願いします。

関連するQ&A

  • エクセルVBAで、テキストボックスにセルの値を入れる(2)

    エクセルVBAで、テキストボックスにセルの値を入れる(1)の 回答13で >うまくいったとしてもデータの書込みとテキストボックスの更新が同期がとれない時がある という部分で これは、どういった理由で同期がとれなくなるのでしょうか? それとその場合の対処法を教えてください。 前回URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=79173

  • テキストボックスに値を入れる(4)

    テキストボックスに値を入れる(3)で回答をいただいた、終了ボタンなんですが、このときは、2つのファイルを上書き保存して終了させたのですが、「OkWeb_Menu.xls」の方だけ、上書きせずに終了させたいのですが、どうしたらよいでしょうか? いろいろ試して見ましたが、うまくいきません。よろしくお願いします。 前回の回答 2)終了ボタン~Sheet7に配置~ ここでは、メニュー(終了できる方)を「OkWeb_Menu.xls」 データシートを「OkWeb_Data.xls」とします。(ご自分のファイル名に変えてください)   1.タイトルバーの左のアイコンのクリック、   2.タイトルバーの右クリック   3.タイトルバーの×ボタン、   4.メニュー→閉じる、   5.ブックの× では閉じれなくする データシートのThisWorkBookのシートモジュールに貼り付けます。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Workbooks("OkWeb_Menu.xls").saveOk = False Then MsgBox "メニューから終了させてください!", vbOKOnly Cancel = True Else ActiveWorkbook.Save End If End Sub ***省略*** Workbooks("OkWeb_Menu.xls").saveOk = True Workbooks("OkWeb_Data.xls").Close saveChanges:=True ActiveWorkbook.Save Application.Quit End Sub 前回のURL(3):http://oshiete1.goo.ne.jp/kotaeru.php3?q=85392     (1)  http://oshiete1.goo.ne.jp/kotaeru.php3?qid=79173     (2)  http://oshiete1.goo.ne.jp/kotaeru.php3?qid=85389

  • テキストボックスの移動(2)

    前回、質問しましたが、回答いただいたプログラムで、別のシートから複数のシートのテキストボックスの移動を移動させたいのですが・・・ たとえば、Sheet1・Sheet2・Sheet3にテキストボックス1が配置してあって、A位置とB位置に動くようにしてあります。 前回のプログラムでは、各シートに位置を指定するボタンが配置してありましたが、このボタンをSheet5に配置して、Sheet1・Sheet2・Sheet3の各テキストボックス1が一斉に動くようにしたいのですがよろしくお願いします。 前回のURL → http://oshiete1.goo.ne.jp/kotaeru.php3?q=85846

  • エクセルVBAで、テキストボックスにセルの値を入れる

    宜しくお願いします。 エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・ 各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか? 進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。 ※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・) また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。 データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。 以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

  • テキストボックスをグループ化するVBA

    エクセル上に並んだテキストボックスを、ボタンを押すことで、任意のテキストボックスをグループ化させたい。また、別のボタンでグループ化の解除が出来るようなVBAをおしえてください。 テキストボックスは、Sheet1~3まであって、ボタンもそれぞれに配置してあり、 どこのSheetのボタンを押しても、各シート、それぞれに任意の設定したテキストボックスがグループ化できるようにしたい ※各シート、グループ化するテキストボックスはおなじでなない・・・ よろしくお願いします。

  • テキストボックスの値をExcelシートに反映

    ユーザーフォームのテキストボックス2個の値がExcelシート1の値にマッチしたらそのシート1の値が任意の値に変換される。VBA初心者ですご教授のほどよろしくお願いします。

  • テキストボックスの大きさを、基準の大きさに戻す(エクセルVBA)

    図形のテキストボックスの大きさを取得して、その値を各テキストボックスの基準の大きさとして記録しておき、テキストボックスの大きさをマウスでドラッグして大きさを変えた後、ボタン1つでもとの大きさに戻したいのですが、どのようにすればよいでしょうか? 1)図形のテキストボックス、大きさの取得方法は? 2)基準の大きさと記録する方法は? 3)記録された大きさに戻すには?(シート上に配置されたボタンで実行) ※ 複数のシートに複数のテキストボックスがあります。 ※ シート毎にセットします。(シート毎にテキストボックスのサイズが違う為) ※ 現在、各テキストボックスには、基準位置がセットしてあり、ボタンで基準位置へ戻る仕組みが組まれています。(これをそのままにして・・・) ※ エクセル97と2000で使えるようにします。(作成は97) 宜しくお願い致します。

  • EXCEL VBA テキストボックスを見やすくしたい

    いつもお世話になっております。 EXCEL VBA のユーザーフォーム上の テキストボックスについて教えて下さい。 大きめのテキストボックスを作り 改行を許可して、数十文字を表示させることができたのですが、行と行の間が詰まりすぎていて、見づらいのです。 行間を空ける方法を教えて下さい。

  • EXCEL VBAについて、ワークシート上に置いたTextBoxに値を入れる方法について

    すいませんEXCEL VBAについて質問があります。 エクセルのワークシート上にコントロールツールボックスから テキストボックスを2つ、コマンドボタンを1つ設置する。 アクティブになっているテキストボックスに”goo”という値を入れる。 これをVBAで処理するにはどうしたらよろしいのでしょうか。 ユーザーフォームのテキストボックスであれば Private Sub CommandButton1_Click() Dim i As Object Set i = ActiveControl If TypeOf i Is MSForms.TextBox Then i.Text = i.Text & "goo" End If Set i = Nothing End Sub これでできるはずですが、シート上に置くテキストボックスだと うまくいきません。 よろしくお願いいたします。

  • フィルター後の表示セルの値をテキストボックスへ

    おせわになります。 エクセルのVBAで、 フィルターを掛けて表示されている行のセルの値を、 ユーザーフォーム・テキストボックスへ表示させたいと思っています。 ユーザーフォームの「進む」「戻る」ボタンを使って、 表示行の値を1行づつ取得したいのですが、 ・表示されているセルの値取得 ・ボタンを押すごとに表示行のみ一行づつ移動 がわからずにつまづいています。 よろしくお願い致します。

専門家に質問してみよう