|
▼VBA初心者 さん:
コード案提示に加えて上でいくつか質問しています。
その中で "シートを選択" するのはなぜ? というのがあったかと思います。
要は該当のシートを、確認の上印刷すればいいんですね?
シートを、ことさら選択する必要はありませんね。
提示済みのものを、ほぼそのまま使っています。
ユーザーフォームモジュールに。
Private Sub CommandButton1_Click()
Dim sh As Worksheet
Dim shN As Variant
Dim shV() As String
Dim k As Long
Dim f As Double, t As Double, n As Double
Dim s1 As String, s2 As String
Dim ok As Boolean
s1 = TextBox1.Value
s2 = TextBox2.Value
If Len(s1) = 0 Or Len(s2) = 0 Then
MsgBox "シート 開始/終了を入力してから実行してください"
Exit Sub
End If
f = getValue(s1)
If f Then
t = getValue(s2)
If t Then ok = True
End If
If Not ok Then
MsgBox "シート範囲を正しく指定してください"
Exit Sub
End If
ReDim shV(1 To Worksheets.Count)
For Each sh In Worksheets
n = getValue(sh.Name)
If n >= f And n <= t Then
k = k + 1
shV(k) = sh.Name
End If
Next
If k = 0 Then
MsgBox "該当のシートがありません"
Exit Sub
End If
ReDim Preserve shV(1 To k)
If MsgBox("以下のシートが選ばれました。印刷してよろしいですか?" & vbLf & _
Join(shV, vbLf), vbYesNo) = vbNo Then Exit Sub
For Each shN In shV
Sheets(shN).PrintOut
Next
End Sub
Private Function getValue(ByVal s As Variant) As Double
Dim wk As Variant
s = LCase(StrConv(s, vbNarrow))
wk = Split(s, "k")
If UBound(wk) = 1 Then
getValue = Val(wk(0)) + Val(wk(1)) / 1000
End If
End Function
|
|