返回列表 上一主題 發帖

[發問] 如何產生不同名稱worksheet

[發問] 如何產生不同名稱worksheet

我想請問如何利用excel VBA 一次新增5個worksheets,
順便更改worksheets名稱

Sub XXX()

For i = 1 to 5

     worksheets.Add
    ActiveSheet.Name = " Im=i"

Next

End sub

回復 1# Helain


     ActiveSheet.Name = " Im=" & i
學海無涯_不恥下問

TOP

謝謝版主:D

另外一個問題:
Sub Remain_M()

For i = 0 To 5

    Worksheets.Add
    ActiveSheet.Name = "Im=" & i
    Worksheets("Im=" & i) = Demand_M_2nd(Im)
(底線的部分該如何更改)
   
   
Next

   
End Sub

Function Demand_M_2nd(ByVal Im As Integer)

    For i = 3 To 5
   
        If Worksheets("Sheet1").Cells(i, 2).Value - Im > 0 Then
        
            Cells(i, 2).Value = Cells(i, 2).Value - Im
        
        Else
        
            Cells(i, 2).Value = 0
         
        End If
         
    Next
                 
End Function

TOP

回復 3# Helain
看不懂Demand_M_2nd函數要傳回甚麼東西
基本上你的主程序應該是
  1. Sub Remain_M()
  2. For i = 0 To 5
  3.     Worksheets.Add
  4.     ActiveSheet.Name = CStr(Demand_M_2nd(i))
  5. Next
  6. End Sub
複製代碼
只要能確定Demand_M_2nd函數計算正確就能為工作表命名
學海無涯_不恥下問

TOP

我的問題是在 主程式不同個i之下,
去讀取子程式,再把子程式結果,輸出至一個新的工作表, 順便命名新的工作表名稱

TOP

本帖最後由 hugh0620 於 2011-10-21 11:57 編輯

回復 5# Helain

    樓主的問題~ 我以前也有問過~  
    個人貼帖的連結點資料衣條件 分SHEET
    提供一個版大們的處理手法~ 自己再截取所需要的部份~ 來完成的檔案~
    Data_VBA完成版_1.rar (103.16 KB)
  1. Private Sub CommandButton1_Click()
  2. Macro5 '複製貼上Data匯整

  3. '=====排序====
  4. Range("B3").End(xlToRight).End(xlDown).Sort Key1:=Range("B3"), _
  5. Order1:=xlAscending, Key2:=Range("C3"), Order2:=xlAscending, Key3:=Range("E3"), Order3:=xlAscending, Header:=xlYes
  6. '=====排序====

  7. '=====進階篩選====
  8.     Range("B2").Select
  9.     Range(Selection, Selection.End(xlDown)).Select
  10.     Range("B2:B256").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
  11.         "A2"), Unique:=True
  12. '=====進階篩選====

  13. Dim N As Integer

  14. A = Application.CountA(Sheet2.[A3:A65536])  'A統計出需要跑幾個Sheet

  15. For N = 1 To A

  16.   Sheets.Add AFTER:=Worksheets(N + 1)           '新增sheet
  17.   ActiveSheet.Range("A1") = Sheet2.Range("B2")
  18.   ActiveSheet.Range("B1") = Sheet2.Cells(2 + N, 1)
  19.   ActiveSheet.Range("B2") = Sheet2.Range("E2")
  20.   
  21.     For K = 1 To 96
  22.     ActiveSheet.Cells(3 + Y, 1) = "POINT_" & K
  23.     ActiveSheet.Cells(3 + Y, 2) = 1
  24.     Y = Y + 1
  25.     Next
  26.     For K = 1 To 96
  27.     ActiveSheet.Cells(3 + Y, 1) = "POINT_" & K
  28.     ActiveSheet.Cells(3 + Y, 2) = 97
  29.     Y = Y + 1
  30.     Next
  31.     For K = 1 To 96
  32.     ActiveSheet.Cells(3 + Y, 1) = "POINT_" & K
  33.     ActiveSheet.Cells(3 + Y, 2) = 193
  34.     Y = Y + 1
  35.     Next
  36.     Y = 0
  37.   ActiveSheet.Name = Sheet2.Cells(2 + N, 1) 'Sheet2.Range("B2") & Sheet2.Cells(2 + N, 1) '標籤名稱 僅標上數字,若有需要請把=後面改回Sheet2.Range("B2") & Sheet2.Cells(2 + N, 1)
  38.    
  39.     Do Until Sheet2.Cells(3 + H, 2) = ""
  40.         If Sheet2.Cells(3 + H, 2) = Sheet2.Cells(2 + N, 1) Then
  41.             If ActiveSheet.Cells(2, 2 + Z) = Sheet2.Cells(3 + H, 3) Then
  42.                 Select Case Sheet2.Cells(3 + H, 5)
  43.                     Case 1
  44.                         For X = 1 To 96
  45.                         ActiveSheet.Cells(2 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
  46.                         Next
  47.                     Case 97
  48.                         For X = 1 To 96
  49.                         ActiveSheet.Cells(98 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
  50.                         Next
  51.                     Case 193
  52.                         For X = 1 To 96
  53.                         ActiveSheet.Cells(194 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
  54.                         Next
  55.                 End Select
  56.             Else
  57.                 Z = Z + 1
  58.                 ActiveSheet.Cells(2, 2 + Z) = Sheet2.Cells(3 + H, 3)
  59.                 Select Case Sheet2.Cells(3 + H, 5)
  60.                     Case 1
  61.                         For X = 1 To 96
  62.                         ActiveSheet.Cells(2 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
  63.                         Next
  64.                     Case 97
  65.                         For X = 1 To 96
  66.                         ActiveSheet.Cells(98 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
  67.                         Next
  68.                     Case 193
  69.                         For X = 1 To 96
  70.                         ActiveSheet.Cells(194 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
  71.                         Next
  72.                 End Select
  73.             End If
  74.         End If
  75.     H = H + 1
  76.     Loop

  77.     H = 0
  78.     Z = 0
  79.     ActiveSheet.Rows("2:2").Select
  80.     Selection.NumberFormatLocal = "yyyy/m/d"
  81. Next
  82. End Sub
複製代碼
學習才能提升自己

TOP

回復 5# Helain

簡單的說妳的子程式就是工作表的命名規則
請說明你的命名規則
學海無涯_不恥下問

TOP

不好意思,我可能說的不是很清楚
我想利用主程式不同的Im,
然後到子程式去做運算,
再把子程式算出來的結果,
輸出到新的工作表,
然後, 我想為我的工作表命名(想要命名方式為Im= i , 這種型態)

TOP

回復 8# Helain

是這樣嗎?
  1. Sub Remain_M()
  2. For i = 0 To 5
  3.     Worksheets.Add
  4.     With ActiveSheet
  5.     .Name = "Im=" & i
  6.     End With
  7.     Demand_M_2nd i
  8. Next
  9. End Sub
  10. Function Demand_M_2nd(ByVal Im As Integer)

  11.     For i = 3 To 5
  12.    
  13.         If Worksheets(1).Cells(i, 2).Value - Im > 0 Then
  14.         
  15.             ActiveSheet.Cells(i, 2).Value = Cells(i, 2).Value - Im
  16.         
  17.         Else
  18.         
  19.             ActiveSheet.Cells(i, 2).Value = 0
  20.          
  21.         End If
  22.          
  23.     Next
  24.                  
  25. End Function
複製代碼
學海無涯_不恥下問

TOP

感謝Hsieh大大的解答,
不過,可否為我解釋一下主程式的部分
為何要用with ~ end with
這是什麼狀況下用的呢?

p.s. 我是新手一切都還在摸索與學習

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題