Board logo

標題: [發問] 如何產生不同名稱worksheet [打印本頁]

作者: Helain    時間: 2011-10-20 17:42     標題: 如何產生不同名稱worksheet

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

Sub XXX()

For i = 1 to 5

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

Next

End sub
作者: Hsieh    時間: 2011-10-20 17:49

回復 1# Helain


     ActiveSheet.Name = " Im=" & i
作者: Helain    時間: 2011-10-20 17:59

謝謝版主: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
作者: Hsieh    時間: 2011-10-20 18:31

回復 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函數計算正確就能為工作表命名
作者: Helain    時間: 2011-10-21 11:13

我的問題是在 主程式不同個i之下,
去讀取子程式,再把子程式結果,輸出至一個新的工作表, 順便命名新的工作表名稱
作者: hugh0620    時間: 2011-10-21 11:52

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

回復 5# Helain

    樓主的問題~ 我以前也有問過~  
    個人貼帖的連結點資料衣條件 分SHEET
    提供一個版大們的處理手法~ 自己再截取所需要的部份~ 來完成的檔案~
   [attach]8295[/attach]
  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
複製代碼

作者: Hsieh    時間: 2011-10-21 12:29

回復 5# Helain

簡單的說妳的子程式就是工作表的命名規則
請說明你的命名規則
作者: Helain    時間: 2011-10-21 19:21

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

回復 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
複製代碼

作者: Helain    時間: 2011-10-21 20:36

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

p.s. 我是新手一切都還在摸索與學習
作者: Hsieh    時間: 2011-10-21 20:46

回復 10# Helain

其實這邊也不必用到With陳述式
直接使用ActiveSheet .Name = "Im=" & i即可
通常在同一物件的敘述時,為減少物件的使用
才需要將該物件要敘述的屬性利用With ...End With陳述式
作者: Helain    時間: 2011-10-23 15:29

我想要再問, 如果有2個變數,要如何命名
Sub Remain_M()
    For i = 0 To 5
          for j = 0 to 5
              Worksheets.Add
              With ActiveSheet
             .Name = (i,j)
             End With
    Demand_M_2nd i
    Demand_R_2ndj
  Next
Next
End Sub
作者: Hsieh    時間: 2011-10-23 16:14

本帖最後由 Hsieh 於 2011-10-23 16:16 編輯

回復 12# Helain


    怎麼命名?問你自己啊!
工作表名稱就是一個字串
兩個變數你要怎樣呈現?
是i & j嗎?
用F8逐行功能看變數的變化,來參考你想如何得到字串
作者: Helain    時間: 2011-10-23 18:38

恩~ 我知道如何呈現i&J, 在工作表名稱
不過我想要知道若我想呈現"Im=i, Ir=j" 這樣字串與變數的結合,我試不出來。
作者: Hsieh    時間: 2011-10-23 18:45

回復 14# Helain
是這樣的意思嗎?

    "Im=" & i & "," &  "Ir=" & j"
作者: Helain    時間: 2011-10-24 13:10

可以了! 謝謝
作者: mark15jill    時間: 2011-11-15 16:55

本帖最後由 mark15jill 於 2011-11-15 17:03 編輯

Sub CODE_ST1()
'螢幕更新關閉,提示關閉
Application.DisplayAlerts = False
Application.ScreenUpdating = True
   
'活頁簿新增
For AAA = 1 To 6 '1 TO 6 是 創造6個 SHEET
    QQ = Sheet1.Range("A" & AAA).Value
'QQ的值為 SHEET1的A欄位的值 , 如果是要多字串合併(如 a欄位和b欄位合併) 則 這串更改為 QQ = SHEET1.RANGE("A"&AAA ).VALUE & SHEET1.RANGE("B"&AAA).VALUE  
Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Sheet" & QQ + 1).Select   'QQ+1是避免 一開始的SHEET1
    Sheets("Sheet" & QQ + 1).Name = QQ
Next AAA
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)