本文首發於2024年10月10日,收錄於我的同名***Excel Live Learning and Practical Use (VBA Programming Practice),更多文章和案例,請搜尋關注!陣列、字典。
工作表複製。
行將動態插入到工作表中。
合併工作表中的單元格。
哈嘍大家好,我是冷水泡茶,這兩天在論壇上看到一篇求助帖,要求按照出庫時間表,按照模板生成一張送貨單,同乙個位址合併成一張送貨單。
關於生成發貨單的情況,我們分享了乙個【批量生成發貨單,根據訂單彙總表生成客戶發貨單】,不過今天這個略有不同,一起來看看吧:
這是出站計畫,它是乙個單獨的檔案:
這是要生成的交貨單模板,也是乙個單獨的檔案:
他給的模板裡有很多行,我刪掉了一部分,只留下一行,作為模板,格式是固定的。 當有不止一行資料時,我們會根據需要插入行,以避免空白行。
他的要求是:根據出庫計畫中的位址,根據交貨單的資訊,彙總出庫資料,然後以出庫單號命名,多個出庫單號與-連線。
花了一點時間,終於完成了,所以我分享給大家:
基本思路和實施過程。
1. 設定使用者窗體 userform1,用於選擇出庫計畫、選擇工作表、選擇生成的交貨單儲存資料夾。
2.將啟動表單的命令按鈕放入選單欄“載入項”中,主要原因是如果在模板表中新增命令按鈕,那麼在複製工作表時需要將其刪除,如果新增工作表並放置命令按鈕,則有點鬆動。 所以,這一次我們將嘗試另一種方式。
3.我們點選“附加元件”選項卡,點選“交貨單”,點選“生成”,然後啟動使用者表單userform1。
4. userform1 啟動後,我們選擇檔案,開啟出站詳細資訊檔案,然後選擇正確的工作表。 為了不影響後續操作,我們隱藏開啟的工作表。
set wb = workbooks.open(filepath)wb.windows(1).visible = false5.選擇儲存路徑,我們點選“生成”按鈕,根據既定要求生成交貨單。
1) 將資料讀入陣列 arr。
2)迴圈陣列arr,以位址為鍵,陣列arrtem作為itme新增到字典dic中。ARRTEM 儲存詳細資料。
3)迴圈字典的鍵,取出專案到arrtem,用“-”作為儲存檔名連線“出庫單號”的第四列。
4)將“交貨單”模板表複製到新的工作簿中,這裡我們直接複製工作表並儲存檔案。
ws.copyset wb = activeworkbookwb.s**eas s**efolder & "\" & filename(5)根據ARNTEM中的列數插入相應的行,並將ARRTEM資料寫入工作表。
6)設定總計行的彙總公式。
.cells(5 + u + 1, 3).formula = "=sum(" & rng.address & ")"(7)設定出庫訂單編號列的格式,並將相同的編號單元格合併到中心。
for i = 5 to 5 + u if .單元格(I, 4) 6.工作表排序:在上述單元格合併居中操作中,我們需要連續排列相同的出庫訂單號,否則合併居中的結果可能不符合我們的預期(雖然不會錯),所以在提取資料之前,我們按照出庫訂單號公升序對出庫計畫進行排序。我們需要在兩個地方進行排序操作(乙個是當我們選擇乙個檔案時,會自動選擇第乙個表,另乙個是 cmbsheets 的 change 事件,它選擇工作表),所以我們對多個呼叫做了乙個單獨的排序過程:不要看他的內容,其實可以錄製乙個自定義排序的巨集。 可以將一些屬性新增到自定義過程的引數中,以使其更適用。private sub sortsheet(ws as worksheet) with ws.sort .sortfields.clear .sortfields.add key:=ws.cells(1, 9), sorton:=xlsortonvalues, order:=xlascending, _dataoption:=xlsortnormal .setrange ws.usedrange .header = xlyes .matchcase = false .orientation = xltoptobottom .sortmethod = xlpinyin .apply end withend sub
7、資料校驗:我們儲存檔案的時候,是以出庫單號為檔名,資料採集的標準是以位址為依據的,同乙個出庫單可以有不同的位址嗎?然後,檔案可能會被覆蓋,從而導致資料丟失。 因此,在生成交貨單之前,會進行資料檢查,如果同一出庫訂單有多個位址,則該程式將被撤銷。
雖然這種情況不太可能發生,但從寫作的角度來看,必須考慮。 這看起來有點慌亂,但它應該幫助我們擴充套件思維,讓我們更全面地思考。 當然,這肯定會增加工作量。
實際上,出現此問題的原因是他要求以不是 100% 確定它是唯一檔名的方式儲存檔案。
為了解決這個問題,我們可以使用 DIC 的鍵,也就是“位址”,作為檔名,或者在檔名後新增乙個不能重複的隨機數,比如當前時間等。 但是,話又說回來,使用位址作為檔名可能包含不符合檔名要求的字元,這是另一件麻煩的事情。
8、當我準備把檔案發到論壇時,發現房東的需求又變了,他想把“位址”放在“總計”下面。 算了,不要發。 不要改變它,僅此而已。
結束戰鬥!有關完整的**,請參閱第二條推文。
~end~~~
如果你喜歡它,喜歡它,點選它,發表評論,分享它!感謝您的支援!