Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5942 / 13646 ツリー ←次へ | 前へ→

【48067】標準のモジュールの変数を他の標準のモジュールの変数に引き継ぐ方法につい... ToShiYo 07/4/2(月) 18:26 質問[未読]
【48068】Re:標準のモジュールの変数を他の標準のモ... りん 07/4/2(月) 18:48 回答[未読]
【48069】Re:標準のモジュールの変数を他の標準のモ... neptune 07/4/2(月) 18:48 回答[未読]
【48070】Re:標準のモジュールの変数を他の標準のモ... Hirofumi 07/4/2(月) 18:52 回答[未読]
【48074】Re:標準のモジュールの変数を他の標準のモ... ToShiYo 07/4/2(月) 19:56 質問[未読]
【48082】Re:標準のモジュールの変数を他の標準のモ... Hirofumi 07/4/2(月) 21:11 回答[未読]
【48084】Re:標準のモジュールの変数を他の標準のモ... ToShiYo 07/4/2(月) 21:54 お礼[未読]

【48067】標準のモジュールの変数を他の標準のモジ...
質問  ToShiYo  - 07/4/2(月) 18:26 -

引用なし
パスワード
   標準のモジュールにコードが5個あります。
test1からtest5までです。

Sub test1()
 MsgBox "test1のコードの動作"
 i = 7
 Call シート単位印刷
End Sub

Sub test2()
 MsgBox "test2のコードの動作"
 i = 22
 Call シート単位印刷
End Sub

この上のtest1,test2・・・・test5でiの変数が異なります。
i=7やi=22のデータをCall先の「単位印刷」の変数に引き継ぎたいのですが
どのようにすると良いでしょうか?

Dim i As Integer
Sub シート単位印刷()
Sheets("名簿リスト").Activate
ActiveSheet.Cells(i, 1).Resize(21, 6).Offset(, 1).Copy
  :
End Sub


 

【48068】Re:標準のモジュールの変数を他の標準の...
回答  りん E-MAIL  - 07/4/2(月) 18:48 -

引用なし
パスワード
   ToShiYo さん、こんばんわ。
たとえば、引数で渡す方法とか。

>Sub test1()
> MsgBox "test1のコードの動作"
> i = 7
 シート単位印刷 i '直接7でもいい
>End Sub
>
>Sub test2()
> MsgBox "test2のコードの動作"
> i = 22
 シート単位印刷 i '直接22でもいい
>End Sub
>
>この上のtest1,test2・・・・test5でiの変数が異なります。
>i=7やi=22のデータをCall先の「単位印刷」の変数に引き継ぎたいのですが
>どのようにすると良いでしょうか?
>

'引数を指定するようにする
Sub シート単位印刷(i as Integer)
>Sheets("名簿リスト").Activate
>ActiveSheet.Cells(i, 1).Resize(21, 6).Offset(, 1).Copy
>  :
>End Sub

【48069】Re:標準のモジュールの変数を他の標準の...
回答  neptune  - 07/4/2(月) 18:48 -

引用なし
パスワード
   ▼ToShiYo さん:
こんにちは

基本的にはこんな感じと思いますが。。。

Sub test1()
dim i as long
 MsgBox "test1のコードの動作"
 i = 7
 Call シート単位印刷(i)
End Sub

Sub シート単位印刷(i as long)
Sheets("名簿リスト").Activate
ActiveSheet.Cells(i, 1).Resize(21, 6).Offset(, 1).Copy
  :
End Sub

【48070】Re:標準のモジュールの変数を他の標準の...
回答  Hirofumi  - 07/4/2(月) 18:52 -

引用なし
パスワード
   通常は、引数で渡します

Option Explicit

Sub test1()
 
  Dim i As Long
   
  MsgBox "test1のコードの動作"
  i = 7
  シート単位印刷 , i

End Sub

Sub test2()

  Dim i As Long
  
  MsgBox "test2のコードの動作"
  i = 22
  シート単位印刷 i
 
End Sub


'Dim i As Integer '★削除

Sub シート単位印刷(i As Long)

  MsgBox "i = " & i & "が渡されました"

  Sheets("名簿リスト").Activate
  ActiveSheet.Cells(i, 1).Resize(21, 6).Offset(, 1).Copy
  
End Sub

尚、渡される変数名と、渡す変数名は違っても構いません

Option Explicit

Sub test1()
 
  Dim j As Long
   
  MsgBox "test1のコードの動作"
  j = 7
  シート単位印刷 , j

End Sub

Sub test2()

  Dim k As Long
  
  MsgBox "test2のコードの動作"
  k = 22
  シート単位印刷 k
 
End Sub


'Dim i As Integer '★削除

Sub シート単位印刷(i As Long)

  MsgBox "i = " & i & "が渡されました"

  Sheets("名簿リスト").Activate
  ActiveSheet.Cells(i, 1).Resize(21, 6).Offset(, 1).Copy
  
End Sub

【48074】Re:標準のモジュールの変数を他の標準の...
質問  ToShiYo  - 07/4/2(月) 19:56 -

引用なし
パスワード
   ▼りんさん neptuneさん Hirofumi さん:

引数で渡す方法が理解できました。有難うございました。
無事思っている通りの動作ができました。感謝いたします。
もう一つ教えてください。

このtest1からtest5を
実は次のユーザーフォームから呼び出し(Call)ています。
コードは次の通りです。

Private Sub CommandButton1_Click()
 Dim k As Integer
  For k = 1 To 5
   If Me.Controls("CheckBox" & k).Value = True Then
   MsgBox "シート" & k & "の印刷指示が選択されました"
   
   Select Case k
    Case 1: Call test1 ←シート単位印刷1 と i=7を引き渡したいのです
    Case 2: Call test2 ←シート単位印刷2と i=22を引き渡したいのです 
    Case 3: Call test3
    Case 4: Call test4
    Case 5: Call test5
    End Select

  Controls("CheckBox" & k).Value = False 
  End If
 Next
End Sub
 
できましたら、このtest1を呼び出す代わりに「シート単位印刷」と変数を引き
渡すことができると、ユーザーフォームから直接呼び出せ、更にありがたいのですが・・・
Select Caseのコードのところで
シート単位印刷1でi=7を引き渡す
シート単位印刷2でi=22を引き渡す・・・ことはできるでしょうか

もし、できると
先ほどのコードなくして動作させられると考えるのですが、間違っているでしょうか。
良い方法・コードがありましたら、よろしくお願いします。

【48082】Re:標準のモジュールの変数を他の標準の...
回答  Hirofumi  - 07/4/2(月) 21:11 -

引用なし
パスワード
   出来るでしょ

Private Sub CommandButton1_Click()

  Dim k As Integer
 
  For k = 1 To 5
    If Me.Controls("CheckBox" & k).Value = True Then
      MsgBox "シート" & k & "の印刷指示が選択されました"
      Select Case k
        Case 1
          シート単位印刷 7 '直接数値を渡してもOK
        Case 2
          
          シート単位印刷 22
        Case 3
          シート単位印刷 35
        Case 4
          シート単位印刷 40
        Case 5
          シート単位印刷 55
      End Select
      Controls("CheckBox" & k).Value = False
    End If
  Next k
  
End Sub

Private Sub CommandButton2_Click()

  Dim lngNumb As Long
  Dim k As Integer
 
  For k = 1 To 5
    If Me.Controls("CheckBox" & k).Value = True Then
      MsgBox "シート" & k & "の印刷指示が選択されました"
      Select Case k
        Case 1
          lngNumb = 7
        Case 2
          lngNumb = 22
        Case 3
          lngNumb = 35
        Case 4
          lngNumb = 40
        Case 5
          lngNumb = 55
      End Select
      シート単位印刷 lngNumb
      Controls("CheckBox" & k).Value = False
    End If
  Next k
  
End Sub

Public Sub シート単位印刷(i As Long)

  Sheets("名簿リスト").Activate
  ActiveSheet.Cells(i, 1).Resize(21, 6).Offset(, 1).Copy
  ':
  
End Sub

【48084】Re:標準のモジュールの変数を他の標準の...
お礼  ToShiYo  - 07/4/2(月) 21:54 -

引用なし
パスワード
   ▼Hirofumi さん:

有難うございました。
これで、プリンターのトラブルで、部分的に選択して印刷できるようになりました。かなり便利な使い勝手ができそうです。
助かりました。
このコードの書き方を完全に把握しておきたいと思います。
何度もお手数をかけまして申し訳けございませんでした。
有難うございました。

5942 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free