返回列表 上一主題 發帖

[發問] VBA loop and select case問題 (HELP)

[發問] VBA loop and select case問題 (HELP)

表格(OrderForm)資料會自動轉移到OrderData sheet
在表格中的Case type 是drop down list 有Red, White,Mixed
請問一下如何令Quantity根據前面的Case type 轉移到OrderData sheet
因為表格資料現在只會順序地轉移到工作表
如果case type 裏的選項不同了,那不會match 工作表中的redno, white no, mixed no 的數目
可能我的表達不清楚,但請高手幫忙
這份excel是大學的assignment




CT5002 14-15-001CaneyScopelLiu2.zip (38.83 KB)
  1. Sub TransferDetails()
  2. '
  3. ' TransferDetails Macro
  4. ' This Macro will make a record of the current details in the order form.
  5. '
  6. ' Keyboard Shortcut: Ctrl+Shift+T
  7. '
  8.    
  9.    

  10.     Sheets("OrderData").Select
  11.    
  12. 'This IF statement will determine whether or not there is a value in the first row of the database and will paste the data accordingly
  13.    
  14.     If IsEmpty(ActiveSheet.Range("A2")) Then
  15.    
  16.     Range("A2").Select
  17.    
  18.     Else
  19.    
  20.     Sheets("OrderForm").Select
  21.     Sheets("OrderData").Select
  22.     Range("A1").Select
  23.     Selection.End(xlDown).Select
  24.     ActiveCell.Offset(1, 0).Range("A1").Select
  25.    
  26.     End If
  27.    
  28.     Sheets("OrderForm").Select
  29.         Range("D14").Select
  30.             Selection.Copy
  31.         Sheets("OrderData").Select
  32.             Selection.PasteSpecial Paste:=xlPasteValues
  33.             ActiveCell.Offset(0, 1).Range("A1").Select
  34.             
  35. ' Forloop starts here

  36. Sheets("OrderForm").Select
  37.    
  38. Dim Winetype As Integer
  39. Dim RWM As String


  40. RWM = ("RWM")

  41.     For Winetype = 1 To 3

  42. ' LOOP ONE

  43. ' This section places the Wine Type Into the RWM Cell for referencing
  44. ' 2.1
  45.     '2.1.1
  46.    
  47.         Sheets("OrderForm").Select
  48.    
  49.     ' 2.1.2
  50.    
  51.         '2.1.2.1
  52.             Range("C17").Select ' <--- C17 = Base Cell
  53.         
  54.         '2.1.2.2
  55.             ActiveCell.Offset(0, 0).Range("A1").Select ' <--- No Change Due to First Iteration
  56.         
  57.     '2.1.3

  58.         '2.1.3.1
  59.             Selection.Copy

  60.         '2.1.3.2.
  61.             Sheets("Price&GiftInfo").Select
  62.                 Range("RWM").Select
  63.                 Selection.PasteSpecial Paste:=xlPasteValues
  64. '2.2

  65.     '2.2.1
  66.         Sheets("OrderForm").Select
  67.         
  68.     '2.2.2
  69.         ActiveCell.Offset(0, 2).Select
  70.         
  71.     '2.2.3
  72.         Selection.Copy
  73.         
  74. '2.3

  75.     '2.3.1.
  76.    
  77.         Sheets("OrderData").Select
  78.             ActiveCell.Select ' <---- No current movement as First Iteration
  79.         
  80.     '2.3.2
  81.         Select Case RWM
  82.         
  83.         Case Is = "Red"
  84.             ActiveCell.Offset(0, 0).Select
  85.             
  86.         Case Is = "White"
  87.             ActiveCell.Offset(0, 1).Select
  88.         
  89.         Case Is = "Mixed"
  90.             ActiveCell.Offset(0, 2).Select
  91.             
  92.         End Select
  93.         
  94.     '2.3.3
  95.         Selection.PasteSpecial Paste:=xlPasteValues
  96.         
  97.       Next
  98.       
  99.       For Winetype = 3 To 3
  100.       
  101.       
  102.       
  103.       
  104.       
  105.       
  106. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  107.       
  108. ' LOOP TWO

  109. '2.1
  110.    
  111.     '2.1.1
  112.         Sheets("OrderForm").Select
  113.    
  114.     '2.1.2
  115.    
  116.         '2.1.2.1
  117.             Range("C17").Select
  118.         
  119.         '2.1.2.2
  120.             ActiveCell.Offset(1, 0).Range("A1").Select ' <---- Second iteration = Move one down
  121.         
  122.     '2.1.3

  123.         '2.1.3.1
  124.             Selection.Copy

  125.         '2.1.3.2.
  126.             Sheets("Price&GiftInfo").Select
  127.                 Range("RWM").Select
  128.                 Selection.PasteSpecial Paste:=xlPasteValues
  129.    
  130. '2.2

  131.     '2.2.1
  132.         Sheets("OrderForm").Select
  133.         
  134.     '2.2.2
  135.         ActiveCell.Offset(0, 2).Select
  136.         
  137.     '2.2.3
  138.         Selection.Copy
  139.         
  140. '2.3

  141.     '2.3.1.
  142.         Sheets("OrderData").Select
  143.         
  144.         ActiveCell.Offset(0, 1).Select ' <---- Second Iteration = Move One Across
  145.         
  146.     '2.3.2
  147.         
  148.         Select Case RWM
  149.         
  150.         Case Is = "Red"
  151.             ActiveCell.Offset(0, -1).Select
  152.             
  153.         Case Is = "White"
  154.             ActiveCell.Offset(0, 0).Select
  155.         
  156.         Case Is = "Mixed"
  157.             ActiveCell.Offset(0, 1).Select
  158.             
  159.         End Select
  160.         
  161.     '2.3.3
  162.         Selection.PasteSpecial Paste:=xlPasteValues
  163.         
  164.         
  165.        Next
  166.       
  167.        For Winetype = 3 To 3
  168.       
  169.       
  170.       
  171.       
  172.       
  173. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  174.       
  175. ' LOOP THREE

  176. '2.1
  177.     '2.1.1
  178.         Sheets("OrderForm").Select
  179.    
  180.     '2.1.2
  181.    
  182.         '2.1.2.1
  183.             Range("C17").Select
  184.         
  185.         '2.1.2.2
  186.             ActiveCell.Offset(2, 0).Range("A1").Select ' <---- Third iteration = Move two down
  187.         
  188.     '2.1.3

  189.         '2.1.3.1
  190.             Selection.Copy

  191.         '2.1.3.2.
  192.         
  193.             Sheets("Price&GiftInfo").Select
  194.                 Range("RWM").Select
  195.                 Selection.PasteSpecial Paste:=xlPasteValues
  196.    
  197. '2.2
  198.     '2.2.1
  199.         Sheets("OrderForm").Select
  200.         
  201.     '2.2.2
  202.         ActiveCell.Offset(0, 2).Select
  203.         
  204.     '2.2.3
  205.         Selection.Copy
  206.    
  207.         
  208. '2.3
  209.     '2.3.1.
  210.         Sheets("OrderData").Select
  211.         
  212.         ActiveCell.Offset(0, 1).Select ' <---- Third Iteration = Move Two Across
  213.         
  214.     '2.3.2
  215.         
  216.         Select Case RWM
  217.         
  218.         Case Is = "Red"
  219.             ActiveCell.Offset(0, -2).Select
  220.             
  221.         Case Is = "White"
  222.             ActiveCell.Offset(0, -1).Select
  223.         
  224.         Case Is = "Mixed"
  225.             ActiveCell.Offset(0, 0).Select
  226.             
  227.         End Select
  228.         
  229.     '2.3.3
  230.         Selection.PasteSpecial Paste:=xlPasteValues
  231.         
  232.     Next Winetype
  233.    
  234.    
  235.    
  236.         
  237. ' Forloop ends here
  238. ActiveCell.Offset(0, 1).Select

  239.    
  240.     Sheets("OrderForm").Select
  241.         Range("E23").Select
  242.         Application.CutCopyMode = False
  243.         Selection.Copy
  244.     Sheets("OrderData").Select
  245.         Selection.PasteSpecial Paste:=xlPasteValues
  246.         ActiveCell.Offset(0, 1).Range("A1").Select
  247.    
  248.     Sheets("OrderForm").Select
  249.         Range("E25:F25").Select
  250.         Application.CutCopyMode = False
  251.         Selection.Copy
  252.     Sheets("OrderData").Select
  253.         ActiveCell.Select
  254.         Selection.PasteSpecial Paste:=xlPasteValues
  255.         ActiveCell.Offset(0, 1).Range("A1").Select
  256.    
  257.     Sheets("OrderForm").Select
  258.         Range("F21").Select
  259.         Application.CutCopyMode = False
  260.         Selection.Copy
  261.     Sheets("OrderData").Select
  262.         Selection.PasteSpecial Paste:=xlPasteValues
  263.         ActiveCell.Offset(0, 1).Range("A1").Select
  264.    
  265.     Sheets("OrderForm").Select
  266.         Range("H17").Select
  267.         Application.CutCopyMode = False
  268.         Selection.Copy
  269.     Sheets("OrderData").Select
  270.         Selection.PasteSpecial Paste:=xlPasteValues
  271.         ActiveCell.Offset(0, 1).Range("A1").Select
  272.    
  273.     Sheets("OrderForm").Select
  274.         Range("H19").Select
  275.         Application.CutCopyMode = False
  276.         Selection.Copy
  277.     Sheets("OrderData").Select
  278.         Selection.PasteSpecial Paste:=xlPasteValues
  279.         ActiveCell.Offset(0, 1).Range("A1").Select
  280.    
  281.     Sheets("OrderForm").Select
  282.         Range("H21").Select
  283.         Application.CutCopyMode = False
  284.         Selection.Copy
  285.     Sheets("OrderData").Select
  286.         Selection.PasteSpecial Paste:=xlPasteValues
  287.         ActiveCell.Offset(0, 1).Range("A1").Select
  288.    
  289.     Sheets("OrderForm").Select
  290.         Range("H23").Select
  291.         Application.CutCopyMode = False
  292.         Selection.Copy
  293.     Sheets("OrderData").Select
  294.         Selection.PasteSpecial Paste:=xlPasteValues
  295.         ActiveCell.Offset(0, 1).Range("A1").Select
  296.    
  297.     Sheets("OrderForm").Select
  298.         Range("H25").Select
  299.         Application.CutCopyMode = False
  300.         Selection.Copy
  301.     Sheets("OrderData").Select
  302.         Selection.PasteSpecial Paste:=xlPasteValues
  303.         ActiveCell.Offset(0, 1).Range("A1").Select
  304.    
  305.     Sheets("OrderForm").Select
  306.         Range("H27").Select
  307.         Application.CutCopyMode = False
  308.         Selection.Copy
  309.     Sheets("OrderData").Select
  310.         Selection.PasteSpecial Paste:=xlPasteValues
  311.         ActiveCell.Offset(0, 1).Range("A1").Select
  312.         
  313. ' Updates the ref no.
  314.    
  315.     Sheets("Price&GiftInfo").Select
  316.         Application.CutCopyMode = False
  317.         
  318.     Range("A21").Select
  319.         ActiveCell.FormulaR1C1 = "='OrderData'!R[18]C[-13]+1"
  320.         
  321.     Sheets("OrderForm").Select
  322.         Range("H14").Select
  323.         ActiveCell.FormulaR1C1 = "='OrderData'!R[7]C[-7]+1"
  324.         Selection.Copy
  325.         
  326.     Sheets("OrderData").Select
  327.         Selection.PasteSpecial Paste:=xlPasteValues
  328.     Application.CutCopyMode = False
  329.     Selection.Copy
  330.    
  331.     Sheets("Price&GiftInfo").Select
  332.         Selection.PasteSpecial Paste:=xlPasteValues
  333.         Application.CutCopyMode = False
  334.     Sheets("OrderData").Select
  335.     ActiveCell.Select
  336.    

  337. End Sub
複製代碼

回復 1# hildaliu
只針對那3個資料的拷貝
  1.   Dim iI%
  2.   Dim lTRow&
  3.   Dim rTar As Range
  4.   Dim shSou As Worksheet
  5.   
  6.   Set shSou = Sheets("OrderForm")
  7.   With Sheets("OrderData")
  8.     lTRow = .Cells(Rows.Count, 2).End(xlUp).Row + 1
  9.     For iI = 17 To 19
  10.       Set rTar = shSou.Cells(iI, 3)
  11.       Select Case rTar
  12.         Case "Red"
  13.           .Cells(lTRow, 2) = rTar.Offset(, 2)
  14.          
  15.         Case "White"
  16.           .Cells(lTRow, 3) = rTar.Offset(, 2)
  17.             
  18.         Case "Mixed"
  19.           .Cells(lTRow, 4) = rTar.Offset(, 2)
  20.       End Select
  21.     Next
  22.   End With
複製代碼

TOP

回復 2# luhpro th
Thanks so much!
unfortunately, I just tried to run it out, but it's still not working
可不可explain一下它的運作?
因為我不太明白這code有什麼意思
Sorry for any inconvenient for explain to me!

TOP

本帖最後由 luhpro 於 2014-11-9 21:52 編輯

回復 3# hildaliu
  Dim iI% ' 定義iI為Integer(整數)變數
  Dim lTRow& ' 定義lTRow為Long(長整數)變數
  Dim rTar As Range ' 定義rTar為儲存格指標
  Dim shSou As Worksheet ' 定義shSou為工作表指標
  
  Set shSou = Sheets("OrderForm") ' 設定指標shSou指向OrderForm工作表
  With Sheets("OrderData") ' 設定系統預設指標 . 的標的, 底下以 . 開頭的物件或變數中, 其 . 代表OrderData工作表,直到 End With 為止, Cells指令用於表示儲存格, 其格式為 Cells(列號,欄號)
    lTRow = .Cells(Rows.Count, 2).End(xlUp).Row + 1 ' 設定lTRow的值等於 .(即OrderData工作表) 中第2(即B)欄的最底下一個有資料儲存格的列號,
                                                                                                ' Cells(Rows.Count, 2)=B欄最末列, .End(xlUp) 往上找第一個有資料的儲存格, .Row 取得其列號

    For iI = 17 To 19 ' 設定 iI(此處用於列號)的初值為17, 接著執行後續指令,遇到Next時,先將iI加1後再返回此行執行,迴圈內指令重複執行直到 iI 大於 To 後面的數字(本例為19),再接續執行Next後的指令
      Set rTar = shSou.Cells(iI, 3) ' 設定rTar=shSou(即OrderForm工作表)的第3(即C)欄第iI列儲存格
      Select Case rTar ' 底下將依據 rTar 的值做分支處理
        Case "Red" ' 當rTar="Red"時執行底下的指令直到 Case 或 End Select
          .Cells(lTRow, 2) = rTar.Offset(, 2)  ' 設定OrderData工作表的  B欄第lTRow列=rTar向右位移兩欄(即OrderForm工作表的E欄第iI列儲存格)
         
        Case "White" ' 當rTar="White"時執行底下的指令...
          .Cells(lTRow, 3) = rTar.Offset(, 2) ' 同上 C欄第lTRow列=...
            
        Case "Mixed" ' 當rTar="Mixed"時執行底下的指令...
          .Cells(lTRow, 4) = rTar.Offset(, 2) ' 同上 D欄第lTRow列=...
      End Select ' 選擇性分支指令結束
    Next ' 繼續執行下一個 For 指令條件判斷, 以決定是否繼續執行迴圈內的指令
  End With ' With 區塊結束,系統預設指標.的標的指向解除,若上層還有.的指向定義,從之.

TOP

回復 4# luhpro
Finally,i got it and the code is totally working!
Thanks for your explanation !!
Thanks so much!!!

TOP

        靜思自在 : 一個人的快樂.不是因為他擁有得多,而是因為他計較得少。
返回列表 上一主題