標題:
[發問]
如何產生不同名稱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函數要傳回甚麼東西
基本上你的主程序應該是
Sub Remain_M()
For i = 0 To 5
Worksheets.Add
ActiveSheet.Name = CStr(Demand_M_2nd(i))
Next
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]
Private Sub CommandButton1_Click()
Macro5 '複製貼上Data匯整
'=====排序====
Range("B3").End(xlToRight).End(xlDown).Sort Key1:=Range("B3"), _
Order1:=xlAscending, Key2:=Range("C3"), Order2:=xlAscending, Key3:=Range("E3"), Order3:=xlAscending, Header:=xlYes
'=====排序====
'=====進階篩選====
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
Range("B2:B256").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"A2"), Unique:=True
'=====進階篩選====
Dim N As Integer
A = Application.CountA(Sheet2.[A3:A65536]) 'A統計出需要跑幾個Sheet
For N = 1 To A
Sheets.Add AFTER:=Worksheets(N + 1) '新增sheet
ActiveSheet.Range("A1") = Sheet2.Range("B2")
ActiveSheet.Range("B1") = Sheet2.Cells(2 + N, 1)
ActiveSheet.Range("B2") = Sheet2.Range("E2")
For K = 1 To 96
ActiveSheet.Cells(3 + Y, 1) = "POINT_" & K
ActiveSheet.Cells(3 + Y, 2) = 1
Y = Y + 1
Next
For K = 1 To 96
ActiveSheet.Cells(3 + Y, 1) = "POINT_" & K
ActiveSheet.Cells(3 + Y, 2) = 97
Y = Y + 1
Next
For K = 1 To 96
ActiveSheet.Cells(3 + Y, 1) = "POINT_" & K
ActiveSheet.Cells(3 + Y, 2) = 193
Y = Y + 1
Next
Y = 0
ActiveSheet.Name = Sheet2.Cells(2 + N, 1) 'Sheet2.Range("B2") & Sheet2.Cells(2 + N, 1) '標籤名稱 僅標上數字,若有需要請把=後面改回Sheet2.Range("B2") & Sheet2.Cells(2 + N, 1)
Do Until Sheet2.Cells(3 + H, 2) = ""
If Sheet2.Cells(3 + H, 2) = Sheet2.Cells(2 + N, 1) Then
If ActiveSheet.Cells(2, 2 + Z) = Sheet2.Cells(3 + H, 3) Then
Select Case Sheet2.Cells(3 + H, 5)
Case 1
For X = 1 To 96
ActiveSheet.Cells(2 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 97
For X = 1 To 96
ActiveSheet.Cells(98 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 193
For X = 1 To 96
ActiveSheet.Cells(194 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
End Select
Else
Z = Z + 1
ActiveSheet.Cells(2, 2 + Z) = Sheet2.Cells(3 + H, 3)
Select Case Sheet2.Cells(3 + H, 5)
Case 1
For X = 1 To 96
ActiveSheet.Cells(2 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 97
For X = 1 To 96
ActiveSheet.Cells(98 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
Case 193
For X = 1 To 96
ActiveSheet.Cells(194 + X, 2 + Z) = Sheet2.Cells(3 + H, 5 + X)
Next
End Select
End If
End If
H = H + 1
Loop
H = 0
Z = 0
ActiveSheet.Rows("2:2").Select
Selection.NumberFormatLocal = "yyyy/m/d"
Next
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
是這樣嗎?
Sub Remain_M()
For i = 0 To 5
Worksheets.Add
With ActiveSheet
.Name = "Im=" & i
End With
Demand_M_2nd i
Next
End Sub
Function Demand_M_2nd(ByVal Im As Integer)
For i = 3 To 5
If Worksheets(1).Cells(i, 2).Value - Im > 0 Then
ActiveSheet.Cells(i, 2).Value = Cells(i, 2).Value - Im
Else
ActiveSheet.Cells(i, 2).Value = 0
End If
Next
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/)