ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 操作与技巧 > 資料複製的三種範例

資料複製的三種範例

作者:绿色风 分类: 时间:2022-08-18 浏览:102
楼主
allall
資料複製的三種範例

  1. Option Explicit
  2. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)  '讓電腦暫停一些時間  千分之一秒
  3. '
  4. ' 將資料從 表一 複製到 表二
  5. '
  6. Private Sub CommandButton1_Click()
  7.     Dim sht1 As Worksheet
  8.     Dim sht2 As Worksheet
  9.    
  10.     Dim nRow1 As Long  '紀錄現在處理至第幾列
  11.     Dim nRow2 As Long
  12.    
  13.     Dim blnContinue As Boolean
  14.    
  15.     Set sht1 = Sheets("表一")  '讓sht1 = 表一.. 萬一以後改名字, 在這裡修改即可
  16.     Set sht2 = Sheets("表二")
  17.    
  18.     nRow1 = 1
  19.     nRow2 = 1
  20.     blnContinue = True
  21.    
  22.     '以迴圈處理不定長度的資料
  23.     Do While blnContinue
  24.         
  25.         '複製資料的動作
  26.         sht2.Cells(nRow2, 1).Value = sht1.Cells(nRow1, 1).Value
  27.         sht2.Cells(nRow2, 2).Value = sht1.Cells(nRow1, 2).Value
  28.         sht2.Cells(nRow2, 3).Value = sht1.Cells(nRow1, 3).Value
  29.         
  30.         '若已經複製完成, 需要將處理列的標記+1
  31.         nRow1 = nRow1 + 1
  32.         nRow2 = nRow2 + 1
  33.         
  34.         '設定離開條件... 此例是 表一由上到下, 連續處理至空白時要停止動作, 離開迴圈
  35.         If sht1.Cells(nRow1, 1).Value = "" Then
  36.             blnContinue = False
  37.         End If
  38.     Loop
  39.    
  40. End Sub
  41. Private Sub CommandButton2_Click()
  42.     Dim sht1 As Worksheet
  43.     Dim sht2 As Worksheet
  44.    
  45.     Dim nRow1 As Long  '紀錄現在處理至第幾列
  46.     Dim nRow2 As Long
  47.    
  48.     Dim blnContinue As Boolean
  49.    
  50.     Set sht1 = Sheets("表一")  '讓sht1 = 表一.. 萬一以後改名字, 在這裡修改即可
  51.     Set sht2 = Sheets("表二")
  52.    
  53.     nRow1 = 1
  54.     nRow2 = 1
  55.     blnContinue = True
  56.    
  57.     '以迴圈處理不定長度的資料
  58.     Do While blnContinue
  59.         
  60.         '複製資料的動作
  61.         sht2.Cells(nRow2, 1).Value = sht1.Cells(nRow1, 1).Value
  62.         sht2.Cells(nRow2, 2).Value = sht1.Cells(nRow1, 2).Value
  63.         sht2.Cells(nRow2, 3).Value = sht1.Cells(nRow1, 3).Value
  64.         
  65.         '若已經複製完成, 需要將處理列的標記+1
  66.         nRow1 = nRow1 + 1
  67.         nRow2 = nRow2 + 1
  68.         
  69.         sht1.Cells(6, 9).Value = nRow1 '可以顯示現在複製到第幾行
  70.         
  71.         Call Sleep(20)  '只是為了讓處理速度變慢
  72.         
  73.         '設定離開條件... 此例是 表一由上到下, 連續處理至空白時要停止動作, 離開迴圈
  74.         If sht1.Cells(nRow1, 1).Value = "" Then
  75.             blnContinue = False
  76.         End If
  77.     Loop
  78.     Call MsgBox("完成")   '顯示已經做完了~~
  79. End Sub

  80. '  要先進行設定:
  81. '
  82. '  選單/工具/設定引用項目(R)...   -> [Microsoft Scripting Runtime] 打勾勾
  83. '
  84. Private Sub CommandButton3_Click()
  85.     Dim sht1 As Worksheet
  86.     Dim sht2 As Worksheet
  87.    
  88.     Dim shtTbl As Worksheet
  89.    
  90.     Dim nRow1 As Long  '紀錄現在處理至第幾列
  91.     Dim nRow2 As Long
  92.    
  93.     Dim blnContinue As Boolean
  94.    
  95.     '--------------
  96.    
  97.     Dim dicTbl As Dictionary     '儲存對照表的位置
  98.     Set dicTbl = New Dictionary  '建立一個 Dictionary 物件
  99.    
  100.     Set shtTbl = Sheets("對照表")
  101.     nRow1 = 2
  102.     blnContinue = True
  103.     '利用小迴圈將資料存到Dictionary
  104.     Do While blnContinue
  105.    
  106.         If Not dicTbl.Exists(shtTbl.Cells(nRow1, 1).Value) Then  '若不存在於 Dictionary 才加入
  107.             Call dicTbl.Add(shtTbl.Cells(nRow1, 1).Value, nRow1) '<-加入 Dictionary 中
  108.         End If
  109.         nRow1 = nRow1 + 1
  110.         If shtTbl.Cells(nRow1, 1).Value = "" Then
  111.             blnContinue = False
  112.         End If
  113.     Loop
  114.    
  115.     '---------------
  116.    
  117.     Set sht1 = Sheets("表一")  '讓sht1 = 表一.. 萬一以後改名字, 在這裡修改即可
  118.     Set sht2 = Sheets("表二")
  119.    
  120.     nRow1 = 1
  121.     nRow2 = 1
  122.     blnContinue = True
  123.    
  124.     '以迴圈處理不定長度的資料
  125.     Do While blnContinue
  126.         
  127.         '複製資料的動作
  128.         sht2.Cells(nRow2, 1).Value = sht1.Cells(nRow1, 1).Value
  129.         sht2.Cells(nRow2, 2).Value = sht1.Cells(nRow1, 2).Value
  130.         sht2.Cells(nRow2, 3).Value = sht1.Cells(nRow1, 3).Value
  131.         If dicTbl.Exists(sht1.Cells(nRow1, 1).Value) Then
  132.             sht2.Cells(nRow2, 4).Value = shtTbl.Cells(dicTbl(sht1.Cells(nRow1, 1).Value), 2).Value
  133.         End If
  134.         
  135.         
  136.         
  137.         '若已經複製完成, 需要將處理列的標記+1
  138.         nRow1 = nRow1 + 1
  139.         nRow2 = nRow2 + 1
  140.         
  141.         sht1.Cells(10, 9).Value = nRow1 '可以顯示現在複製到第幾行
  142.         
  143.         'Call Sleep(50)  '只是為了讓處理速度變慢
  144.         
  145.         '設定離開條件... 此例是 表一由上到下, 連續處理至空白時要停止動作, 離開迴圈
  146.         If sht1.Cells(nRow1, 1).Value = "" Then
  147.             blnContinue = False
  148.         End If
  149.     Loop
  150.     Call MsgBox("完成")   '顯示已經做完了~~
  151. End Sub
詳細請下載附件檔案page1.jpg
 

sample.rar
2楼
亡者天下
怎么用繁体字啊?

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap