Board logo

標題: 如何設定複製迴圈sheet1複製儲存格至sheet2固定位置???? [打印本頁]

作者: poke0817    時間: 2015-9-13 20:35     標題: 如何設定複製迴圈sheet1複製儲存格至sheet2固定位置????

本帖最後由 poke0817 於 2015-9-13 20:37 編輯

[attach]21968[/attach]
[attach]21969[/attach]
如圖一sheet1所示:A2及B2是所有需製做標籤的清單。
如圖二sheet2所示:已經製作好對應儲存格,A2(sheet1)需對應到B2(sheet2),B2(sheet1)對應到B3(sheet2)。

1、如何設定迴圈將sheet1(A2/B2)清單依序的複製在sheet2(B2/B3)固定位置上?
2、sheet2標籤的格式以製作好了,若設定迴圈可以直接複製貼到相對位置,那如果我沒有把製作格式複製好,可以利用迴圈複製標籤隔式嗎?





[attach]21970[/attach]
作者: lpk187    時間: 2015-9-13 22:36

回復 1# poke0817


  是這樣嗎?
我把標籤樣式改到Sheet3以應第2個問題
  1. Public Sub ex()
  2. Dim rng As Range, r%, c%
  3. Sheet3.Range("a1:h" & Sheet3.Cells(Rows.Count, 1).End(xlUp).Row).Delete
  4. r = 1
  5. c = 1
  6. For i = 1 To 8 Step 2
  7.     Sheet3.Columns(i).ColumnWidth = 9.65
  8.     Sheet3.Columns(i + 1).ColumnWidth = 18.13
  9. Next
  10. For Each rng In Sheet1.Range("a2:a" & Sheet1.Cells(Rows.Count, 1).End(xlUp).Row)
  11.     With Sheet3
  12.         If c < 8 Then
  13.             With .Range(.Cells(r, c), .Cells(r + 2, c + 1))
  14.                 .HorizontalAlignment = xlCenter
  15.                 .VerticalAlignment = xlCenter
  16.                 .WrapText = False
  17.                 .Orientation = 0
  18.                 .AddIndent = False
  19.                 .IndentLevel = 0
  20.                 .ShrinkToFit = True
  21.                 .ReadingOrder = xlContext
  22.                 .Borders(xlDiagonalDown).LineStyle = xlNone
  23.                 .Borders(xlDiagonalUp).LineStyle = xlNone
  24.                 With .Borders(xlEdgeLeft)
  25.                     .LineStyle = xlContinuous
  26.                     .ColorIndex = xlAutomatic
  27.                     .TintAndShade = 0
  28.                     .Weight = xlMedium
  29.                 End With
  30.                 With .Borders(xlEdgeTop)
  31.                     .LineStyle = xlContinuous
  32.                     .ColorIndex = xlAutomatic
  33.                     .TintAndShade = 0
  34.                     .Weight = xlMedium
  35.                 End With
  36.                 With .Borders(xlEdgeBottom)
  37.                     .LineStyle = xlContinuous
  38.                     .ColorIndex = xlAutomatic
  39.                     .TintAndShade = 0
  40.                     .Weight = xlMedium
  41.                 End With
  42.                 With .Borders(xlEdgeRight)
  43.                     .LineStyle = xlContinuous
  44.                     .ColorIndex = xlAutomatic
  45.                     .TintAndShade = 0
  46.                     .Weight = xlMedium
  47.                 End With
  48.                 With .Borders(xlInsideVertical)
  49.                     .LineStyle = xlContinuous
  50.                     .ColorIndex = xlAutomatic
  51.                     .TintAndShade = 0
  52.                     .Weight = xlThin
  53.                 End With
  54.                 With .Borders(xlInsideHorizontal)
  55.                     .LineStyle = xlContinuous
  56.                     .ColorIndex = xlAutomatic
  57.                     .TintAndShade = 0
  58.                     .Weight = xlThin
  59.                 End With
  60.                 With .Font
  61.                     .Name = "標楷體"
  62.                 End With
  63.             End With
  64.             With .Range(.Cells(r, c), .Cells(r, c + 1))
  65.                 .MergeCells = True
  66.                 .Value = "XX企業股份有限公司"
  67.                 With .Font
  68.                     .Size = 14
  69.                 End With
  70.             End With
  71.             .Cells(r + 1, c) = "財產編碼"
  72.             .Cells(r + 1, c + 1) = rng
  73.             .Cells(r + 2, c) = "品名"
  74.             .Cells(r + 2, c + 1) = rng.Offset(, 1)
  75.             c = c + 2
  76.         End If
  77.         If c > 8 Then
  78.             c = 1
  79.             r = r + 3
  80.         End If
  81.     End With
  82. Next
  83. End Sub
複製代碼

作者: 准提部林    時間: 2015-9-13 22:44

程式構想:
1.〔標籤清單〕工作表前3列,事先設定好表格樣式(只有標題文字,未填內容),
  一排要幾欄(視列印大小),可由此決定,貼入資料時,即以此為樣本往右往下轉貼。
2.貼入資料時,從第4列開始,樣式就用前3列為來源,再逐一填入資料,
  處理完成後,再刪去前3列。
3.執行〔清除〕,即可恢復原狀(爾後仍可重新更改樣式,程式只依樣複製)
  1. Sub 轉出()
  2. Dim R&, xR As Range, xH As Range, xE As Range
  3. Call 清除
  4. R = [標籤清單!A65536].End(xlUp).Row
  5. If R < 2 Then Exit Sub
  6. Set xH = [標籤樣式!A4]: Set xE = xH

  7. For Each xR In [標籤清單!A2].Resize(R - 1)
  8.     If xH = "" Then [標籤樣式!1:3].Copy xE
  9.     xE(2, 2) = xR
  10.     xE(3, 2) = xR(1, 2)
  11.     Set xE = xE(1, 3)
  12.     If xE = "" Then Set xH = xH(4): Set xE = xH
  13. Next
  14. [標籤樣式!1:3].EntireRow.Delete
  15. Application.Goto [標籤樣式!A1]
  16. End Sub
複製代碼
 
附件下載:
[attach]21971[/attach] 
 
作者: poke0817    時間: 2015-9-14 19:56

回復 2# lpk187


大大果然厲害,但很好奇,我在公司測試的時候公司是2003版本,卻一直出錯誤,因不了解各項次的設定所以沒在嘗試修改,回到家在測試一次,居然可以!!!!!!
這是有限版本嗎???
作者: poke0817    時間: 2015-9-14 20:12

回復 3# 准提部林

    版大,今天有測試您寫的,一開始出現錯誤,將Call 清除(這出現錯誤,刪除後就可以執行了),感謝啦!
但有個問題,我有嘗試將一個標籤用兩個財產編號,但修改後仍是一個一個跳如下:

Sub 轉出()
Dim R&, xR As Range, xH As Range, xE As Range
R = [標籤清單!A65536].End(xlUp).Row
If R < 2 Then Exit Sub
Set xH = [標籤樣式!A4]: Set xE = xH
For Each xR In [標籤清單!A2].Resize(R - 1)
    If xH = "" Then [標籤樣式!1:3].Copy xE
    xE(2, 2) = xR(1)
    xE(3, 2) = xR(2)
    Set xE = xE(1, 3)
    If xE = "" Then Set xH = xH(4): Set xE = xH
Next
[標籤樣式!1:3].EntireRow.Delete
Application.Goto [標籤樣式!A1]
End Sub
作者: GBKEE    時間: 2015-9-14 20:13

回復  lpk187


大大果然厲害,但很好奇,我在公司測試的時候公司是2003版本,卻一直出錯誤,因不了解 ...
poke0817 發表於 2015/9/14 19:56


我也是2003版本,准提部林版主的附檔可正常執行程式.
作者: poke0817    時間: 2015-9-14 20:31

回復 1# poke0817


   想請問,如果有一個清單,可是須對應三種標籤,
1、依項次1(清單),A~D的欄位for 標籤樣式1(對應該清單的料號、品名、批號、盒數),在依照清單(C7開始)高度排列(C7、C8、C9、C10),直到C欄清單結束。
2、依項次1(清單),F~I的欄位for 標籤樣式2(對應該清單的料號、品名、批號、盒數),在依照清單(H7開始)高度排列(B5、D5),直到C欄清單結束。(標籤3的方式應該跟此一樣,只是對應的清單區域不一樣)

標籤快把我搞死了,研究不出所以然來.......之前錄製巨集到眼花,又被主管打槍=  =!!
[attach]21977[/attach]
作者: 准提部林    時間: 2015-9-14 20:32

回復 5# poke0817


不可使用是因為您〔沒有下載〕附檔,詳細看裡面還有一個 sub 清除() 程式,
〔清除〕程式我一般會另外寫!

表格〔第一排〕請依您的所需先右貼,要貼幾個模板依〔列印寬度〕而定,而不是只有A1:B3一組,
這個做法可減少很多程式碼,反正第一排怎設定,程式依樣畫葫蘆,
若有更改也不須去更動大部份的程式,只要直接對表格修改即可!

xR(1) → xR.cells(1,1)
xR(2) → xR.cells(2,1) 是它的〔下一格〕,若要指定其〔右一格〕,則為 xR(1,2) → 等同于 xR.cells(1,2)
作者: poke0817    時間: 2015-9-14 21:34

回復 8# 准提部林


    准提部林 :感謝版大,因附件有限層級,小弟我還太嫩,所以沒辦法下載來看,有在針對你撰寫的程式去測試,依照一張標籤作對應清單四組修改,但在跑迴圈時還是會依照清單第二組開始重新續編,無法依照清單第五組開始,如圖所示....如果可以續編我其它三個標籤方式應該可以跟著修正,差在盒數的部分就沒辦法接續+1了。

[attach]21980[/attach]
作者: lpk187    時間: 2015-9-15 09:59

回復 4# poke0817


    製作儲存格格式,和版本有關係!2003不相容!
作者: 准提部林    時間: 2015-9-15 16:42

回復 9# poke0817

1.每次遇到問題內容演變到最後上傳的附件都不一樣,修修改改,很頭痛!
  只能做到這個附檔為止,若有差異請自行修改!
2.請務必下載範例檔詳細看(已設定標籤的列印樣式,幾乎是客製化了∼∼),
  以新入會員無法下載附檔,再破例多提供另一下載址,請儘量參與論壇交流,以提升下載權限!
3.標籤樣式有兩種,所以程式碼分別設置,比對兩種應可更了解程式的意思!
  1. Sub 轉入1()
  2. Dim xA As Range, xB As Range, xR As Range, xH As Range, xE As Range
  3. Call 清除1
  4. Set xA = [清單!C2]: Set xB = [清單!B7]
  5. If xB = "" Then Exit Sub
  6.  
  7. Set xH = [A10]: Set xE = xH '定位資料輸出儲存格位置
  8. Application.ScreenUpdating = False
  9.  
  10. Do: If xH = "" Then Rows("1:8").Copy xH(0, 1) '複製空白樣式
  11.   xE(2, 1) = xA(1, 1) '填入〔料號〕
  12.   xE(3, 2) = xA(1, 1) '填入〔料號〕
  13.   xE(4, 2) = xA(2, 1) '填入〔品名〕
  14.   xE(4, 4) = xA(4, 1) '填入〔批號〕
  15.   xE(5, 2) = xB(1, 2) '填入〔高度1〕
  16.   xE(6, 2) = xB(2, 2) '填入〔高度2〕
  17.   xE(5, 4) = xB(3, 2) '填入〔高度3〕
  18.   xE(6, 4) = xB(4, 2) '填入〔高度4〕
  19.   xE(7, 2) = xB(1, 1) '填入〔盒數〕
  20.   xE(7, 4) = xB(1, 3) '填入〔備註〕
  21.   Set xE = xE(1, 6) '定位下一筆填入位置
  22.   If xE = "" Then Set xH = xH(9): Set xE = xH  '若右方已無可填入表格,向下定位
  23.   Set xB = xB(5, 1) '下一筆資料來源位置
  24. Loop Until xB = ""
  25.  
  26. Rows("1:8").Delete
  27. End Sub
  28.  
  29. '===================================
  30. Sub 清除1()
  31. With ActiveSheet
  32.   .UsedRange.Offset(8, 0).EntireRow.Delete  '清除第8列以下資料
  33.   .[A3,B4,B5:B8,D5:D8] = ""
  34.   .[A2:E8].Copy [F2:o8]
  35. End With
  36. End Sub
複製代碼
 
附件下載:
[attach]21985[/attach]

http://www.funp.net/783355
作者: poke0817    時間: 2015-9-15 21:21

回復 11# 准提部林

准提部林  版大,不好意思啦!!原先是想說可以對應的話自己在另外設定其它三組標籤樣式,所以才沒一次說清楚,抱歉啦!!

已經有看到大大設定那三個標籤樣式了,真的是太厲害了..........而且還很貼心的全設定好了,連裁切的部分都考慮到,好大心阿{:3_59:}

努力了解程式原理中............非常感謝部林大大!!:handshake




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