返回列表 上一主題 發帖

[發問] 如何設立可指定計算期數範圍的InputBox?

回復 9# GBKEE
超版大:您好!
不好意思,本題原有2個細部需求,為避免文字說明"落落長",易令人混淆不解,所以先只針對第1個細部需求做說明;第2個細部需求~等第1個細部需求解決後,再另做說明和討論。


備註:已將不相關的程式碼改為註解型態。
第1個需求:
依據UpRow InputBox填入的數字,顯示同樣編號和對等個數的效果檔案~
EX:UpRow = 填入"1-4",可以得到T49_S欄最後n個值_1_200期;T49_S欄最後n個值_2_200期;T49_S欄最後n個值_3_200期;T49_S欄最後n個值_4_200期等四個效果檔案。
EX:UpRow = 填入"2,5,8",可以得到T49_S欄最後n個值_2_200期;T49_S欄最後n個值_5_200期;T49_S欄最後n個值_8_200期等三個效果檔案。

※ 本需求不討論~
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\T49_S欄最後n個值_"& UpRow & "_" & mthcount & "期.xls"檔案的內容~
只要檔案之UpRow的”名稱”和檔案的”個數正確即可

DATA!列70~列94和列97和列100程式碼的錯誤~
勞駕您撥冗賜正~謝謝您^^

測試檔: TT49_S欄最後n個值(主檔).rar (29.05 KB)

TOP

本帖最後由 GBKEE 於 2018-6-25 15:08 編輯

回復 11# Airman
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim UpRow As Variant, E As Variant, i As Integer, Msg As String
  4.     'NUM = "10" ' InputBox("請選擇公式的起迄序號", "序號10-99")
  5.     'Nrange = "200" ' InputBox("請輸入運算的起迄期數", "輸入期數")
  6.     UpRow = InputBox("請選擇S欄最後n個值", "輸入1個-239個", "5,8,9")
  7.     Msg = "選擇S欄最後n個值,格式 數值 有誤"
  8.     'Ttim = Timer
  9.     '[B2] = ""
  10.     '[B3] = ""
  11.     '[F2] = ""
  12.     'numx = NUM
  13.     If InStr(UpRow, "-") Then
  14.         For Each E In Split(UpRow, "-")
  15.             If Not IsNumeric(E) Or i > E Then MsgBox Msg: End  '檢查是否為數字或小於上一個數字
  16.             i = E
  17.         Next
  18.         E = Split(UpRow, "-")(0)   '第一個數字
  19.         ReDim UpRow(E To Split(UpRow, "-")(UBound(Split(UpRow, "-")))) '重置陣列數的大小
  20.         'ReDim 陳述式 在程序層次中用來重新配置動態陣列變數的儲存空間。
  21.         'Split 函數 傳回一個陳列索引從零開始的一維陣列,它包含指定數目的子字串。
  22.         'UBound 函數 傳回 Long值,表示指定陣列某維最大可使用的陣列索引。
  23.         UpRow(E) = E
  24.         For i = UpRow(E) + 1 To UBound(UpRow)
  25.             UpRow(i) = UpRow(i - 1) + 1       '依序將 UpRow 如  5-9 轉為陣列
  26.         Next
  27.     ElseIf InStr(UpRow, ",") Then
  28.         For Each E In Split(UpRow, ",")
  29.             If Not IsNumeric(E) Or i > E Then MsgBox Msg: End      '檢查是否為數字或小於上一個數字
  30.             i = E
  31.         Next
  32.         UpRow = Split(UpRow, ",")  '將 UpRow 如  5,9,11 轉為陣列
  33.     ElseIf IsNumeric(UpRow) Then
  34.         UpRow = Array(UpRow)
  35.     Else
  36.         MsgBox Msg: End
  37.     End If
  38.     For Each E In UpRow
  39.     '*** 做你想做的的事*****
  40.     '*** 也可呼叫 程式 (你想做的的事)
  41.     Next
  42.    
  43. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 12# GBKEE
超版大:您好!
謝謝您的耐心註解~2個需求一併解決了。
再次感謝您的費神指導~感恩^^

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題