VBA+BOS單據+插件,解決計劃任務跟蹤的問題之二:導入ERP

第二步,就是要將拆分好的任務導入ERP了
1、將建一個BOS單據叫“任務池”,大概是這樣的
在這里插入圖片描述
然后在拆分工具中進行導數據,點擊“數據導出準備”,跳轉到“導入ERP”界面,然后點“獲取數據”,將拆分好的數據轉過來
在這里插入圖片描述
在這里插入圖片描述
代碼如下:

''獲取任務Sub list()
Dim rng1 As Range
Dim sRowsCount As Long, sColnumb As Long, tRowsCount As Long, tColnumb As Long
Dim itemnumb As String
Dim i As Integer, j As Integer, k As Integer, ZJsl As Integer
Dim jcbh As String, ZJnumb As String, ZJitemid As String, Fitemid As String, fnumber As String
Dim ARR
Dim tRNG As RangeApplication.ScreenUpdating = False  '關閉屏幕更新,加快程序運行
ActiveSheet.Unprotect Password:="chr"Worksheets("母版").Activate
sRowsCount = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row '行數按物料代碼行計算'
'For i = 8 To sRowsCount
'
' MsgBox IsComponents(Trim(Cells(i, 2)))
'NextWith ActiveSheet
jcbh = Trim(.Cells(4, 6)) '機床編號
ZJnumb = Trim(.Cells(3, 4)) '組件代碼
ZJitemid = Trim(.Cells(3, 10)) '組件的itemid
ZJsl = Trim(.Cells(5, 4)) '組件數量ReDim ARR(1 To sRowsCount - 7, 1 To 11)
i = 0
j = 0
k = 0
For i = 1 To UBound(ARR)
'    For j = 8 To sRowsCountj = i + 7  '取母版中的實際行數
''物料代碼規則中第三個點后第1個數字是1則為組部件,用以排除
If IsComponents(Trim(.Cells(j, 2).Value)) <> 1 Then
When34:ARR(i, 1) = jcbhARR(i, 3) = ZJnumbARR(i, 2) = ZJitemidARR(i, 4) = Trim(.Cells(j, 10).Value) '獲取零件的itemidARR(i, 5) = Trim(.Cells(j, 2).Value) '獲取零件的代碼ARR(i, 6) = Trim(.Cells(j, 5).Value) * ZJsl '獲取零件的數量''獲取采購、外協、機加的計劃完工日期If Not IsEmpty(Cells(j, 13).Value) Then     '采購ARR(i, 7) = 26370ARR(i, 8) = Trim(.Cells(j, 13).Value)End IfIf Not IsEmpty(Cells(j, 14).Value) Then  '外協ARR(i, 7) = 84761ARR(i, 8) = Trim(.Cells(j, 14).Value)End IfIf Not IsEmpty(Cells(j, 15).Value) Then  '新核交暢爾入庫的實質是采購任務ARR(i, 7) = 26370ARR(i, 8) = Trim(.Cells(j, 15).Value)End IfIf Not IsEmpty(Cells(j, 16).Value) Then  '機加ARR(i, 7) = 54492ARR(i, 8) = Trim(.Cells(j, 16).Value)End IfIf Not IsEmpty(Cells(j, 17).Value) Then  '倉庫ARR(i, 7) = 53681ARR(i, 8) = Trim(.Cells(j, 17).Value)End If''獲取鑄件、新核日期If Trim(.Cells(j, 15).Value) <> "" ThenIf Trim(.Cells(j, 16).Value) <> "" Then '判斷如果沒有機加日期,則是交暢爾的任務,應該算是采購ARR(i, 9) = 84046End IfARR(i, 10) = Trim(.Cells(j, 15).Value)End IfIf Mid(Trim(.Cells(j, 6).Value), 1, 1) = 5 ThenARR(i, 9) = 84048ARR(i, 10) = Trim(.Cells(j, 13).Value)End IfARR(i, 11) = Trim(.Cells(j, 8).Value) '獲取備注內容ElseIf (Mid(Trim(.Cells(j, 2).Value), 1, 1) = "3" Or Mid(Trim(.Cells(j, 2).Value), 1, 1) = "4") ThenGoTo When34End If
Next
End WithWorksheets("導入ERP").Activate
tRowsCount = UBound(ARR, 1)
tColnumb = UBound(ARR, 2)Worksheets("導入ERP").Range("A2").Select
Set tRNG = Selection.Resize(tRowsCount, tColnumb)tRNG.Value = ARR'重新獲取行數,以物料內碼列為準
tRowsCount = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Rowj = 0
For i = 2 To tRowsCountRange("M" & i).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-6],R2C27:R10C28,2,),"""")"
Range("N" & i).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-5],R2C27:R10C28,2,),"""")"'
'If IsEmpty(Cells(i, 4).Value) Then
'j = j + 1
'End IfIf IsEmpty(Cells(i, 1).Value) Then
Range("A" & i & ":N" & i).Select
Selection.Delete Shift:=xlUp
End IfNextCall moformat.form(2)ActiveSheet.Columns("A:Z").Locked = False
ActiveSheet.Range("A1:K1").Locked = True
ActiveSheet.Protect Password:="chr", AllowFormattingColumns:=True, AllowSorting:=True, AllowFiltering:=True, UserInterFaceOnly:=True ''增加保護:
Application.DisplayAlerts = TrueEnd Sub
''獲取物料代碼第3個.之后第1個數字是否為1,用以排除組部件
Function IsComponents(fnumber As String) As Integer
Dim numb As Integer, i As Integer, j As Integer
Dim point As Stringj = 0
For i = 1 To Len(fnumber)
If Mid(fnumber, i, 1) = "." Then
j = j + 1If j = 3 Thennumb = Mid(fnumber, i + 1, 1)End IfEnd IfNextIsComponents = numbEnd Function

即將導入數據庫的信息,有很多已轉換成內碼,點擊“導入ERP任務”,則會將數據導入到ERP中。
在這里插入圖片描述
在ERP中的任務池表中就有了數據
在這里插入圖片描述
代碼如下:


Sub Import()Dim objRec
Dim objConn
Dim rowscount As Long
Dim rng As Range
Dim i As Integer, j As Integer
Dim finterid As Long
Dim fbillno As String
Dim sqlStr  As StringWorksheets("導入ERP").Activate
rowscount = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row '按物料內碼算行數If Len(ActiveSheet.Cells(1, 27)) > 0 ThenMsgBox "導入ERP已執行,請查看!", , "BuildByWK"
Exit SubElse'先檢查物料內碼有沒有空的
For i = 2 To rowscount
If IsEmpty(Cells(i, 4).Value) Then
j = j + 1
End If
NextIf j > 0 Then
MsgBox "有物料內碼為空,請查看是否為組件或是物料不存在!", , "BuildByWK"
Exit Sub
End IfSet rng = ActiveSheet.Range("A2:K" & rowscount) '設置需要的數據范圍Set objRec = CreateObject("ADODB.Recordset")
Set objConn = CreateObject("ADODB.Connection")objConn.ConnectionString = "Provider=SQLOLEDB;Data Source=192.168.100.3;Initial Catalog=AIS20150813141843;User ID=sa;Password=Chr_2016"On Error GoTo Erro
objConn.Open''獲取任務池單據最大的內碼
sqlStr = "SELECT FMaxNum FROM ICMaxNum where FTableName='t_BOS257800039'"Set objRec = objConn.Execute(sqlStr)
If Not objRec.EOF Thenfinterid = objRec.Fields("FMaxNum").Value
End If
sqlStr = ""''獲取任務池單據最大的單據編號
sqlStr = "select FDesc from  ICBillNo where FBillID=257800039"
Set objRec = objConn.Execute(sqlStr)
If Not objRec.EOF Thenfbillno = objRec.Fields("FDesc").Value
End If
sqlStr = ""''將內碼和單據編號都加1賦給插入的單據
finterid = finterid + 1
fbillno = format(CLng(fbillno) + 1, "000000000")'''將內碼和單據編號插入表頭
sqlStr = "INSERT INTO t_BOS257800039 (fid,FClassTypeID,FBillNo,FDate) VALUES (" & finterid & ", " & 257800039 & ",'" & fbillno & "','" & Now & "')"
objConn.Execute sqlStr
sqlStr = ""'將內容插入表體For Each Row In rng.Rows
sqlStr = "INSERT INTO t_BOS257800039Entry2 (FID,FIndex,JCBH,ZJitemID,FitemID,Fquantity,FBase2,FPlanDate,FOutsource,FOutDate,FNOTE,FComboBOX) VALUES " _& "( '" & finterid & "','" & Row.Row - 1 & "','" & Row.Cells(1).Value & "'," _& " '" & Row.Cells(2).Value & " ','" & Row.Cells(4).Value & "','" & Row.Cells(6).Value & "','" & Row.Cells(7).Value & "'," _& " '" & Row.Cells(8).Value & " ','" & Row.Cells(9).Value & "','" & Row.Cells(10).Value & " ','" & Row.Cells(11).Value & "',0)"objConn.Execute sqlStr
sqlStr = ""
Next Row''更新任務池單據內碼
sqlStr = "update  ICBillNo set FDesc='" & fbillno & "' where FBillID=257800039"
objConn.Execute sqlStr
sqlStr = ""''更新任務池單據編號
sqlStr = "update  ICMaxNum set FMaxNum=" & finterid & "where FTableName='t_BOS257800039'"
objConn.Execute sqlStr
sqlStr = ""'關閉記錄集和連接
objRec.Close
objConn.Close'釋放對象
Set objRec = Nothing
Set objConn = NothingActiveSheet.Cells(1, 27) = Now()
MsgBox "數據導入完成!單據編號為:" & fbillno, , "BuildByWK"End IfExit Sub
Erro:MsgBox "連接失敗:" & Err.Description, vbCriticalIf Not objConn Is noting ThenobjConn.CloseEnd IfSet objConn = NothingEnd Sub

另外,為了方便留底,還能將拆分的表格另存出來

在這里插入圖片描述

代碼如下:

Sub SaveAsDialog()Dim savePath As StringDim FName As StringDim fileFilter As StringDim ws As WorksheetDim newWB As Workbook' 定義初始文件名和文件過濾器With ThisWorkbook.Sheets("母版")FName = Trim(.Cells(3, 4)) & "_" & Trim(.Cells(4, 4)) & "(" & Trim(.Cells(4, 6)) & ")" & ".xlsx"fileFilter = "Excel Files (*.xlsx), *.xlsx"  ' 文件過濾器End With' 調用 GetSaveAsFilename 方法savePath = Application.GetSaveAsFilename(initialFileName:=FName, fileFilter:=fileFilter)
Application.DisplayAlerts = False '不顯示警告信息' 設置要復制的工作表Set ws = ThisWorkbook.Sheets("母版") ' 修改為你的工作表名稱' 復制工作表到新工作簿ws.Copy' 設置新工作簿的引用Set newWB = ActiveWorkbook' 檢查用戶是否選擇了文件并點擊了“保存”On Error Resume NextIf savePath <> "" Then
'        ' 保存工作簿到用戶選定的位置
''        ThisWorkbook.SaveAs FileName:=savePath, _newWB.SaveAs FileName:=savePath, _FileFormat:=xlOpenXMLWorkbook  ' xlOpenXMLWorkbook 表示Excel 2007及以后版本的文件格式MsgBox "文件已保存到: " & savePathElseMsgBox "沒有選擇文件或取消操作。"End IfApplication.DisplayAlerts = True
End Sub'

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75044.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用uglifyjs對靜態引入的js文件進行壓縮

前言 因為有時候js文件沒有npm包&#xff0c;或者需要修改&#xff0c;只能引入靜態的js&#xff0c;那么這個時候就可以對js進行壓縮了。我其實想通過vite、webpack等插件進行壓縮的&#xff0c;可是他都不能定位到public目錄下面的文件&#xff0c;所以我只能自己壓縮了。編…

藍橋杯 web 水果拼盤 (css3)

做題步驟&#xff1a; 看結構&#xff1a;html 、css 、f12 分析: f12 查看元素&#xff0c;你會發現水果的高度剛好和拼盤的高度一樣&#xff0c;每一種水果的盤子剛好把頁面填滿了&#xff0c;所以咱們就只要讓元素豎著排列&#xff0c;加上是豎著&#xff0c;排不下的換行…

差分音頻轉單端音頻單電源方案

TI LMV321介紹 TI的LMV321是單通道的低壓軌到軌輸出運算放大器&#xff0c;適用于需要低工作壓、節省空間和低成本的應用。 其中&#xff0c;芯片設計中的軌到軌輸出&#xff08;Rail-to-Rail Output&#xff09; 是指通過特定的電路設計&#xff0c;使芯片&#xff08;如運算…

Pandas 庫

Pandas 是一個開源的數據分析和數據處理庫&#xff0c;它是基于 Python 編程語言的。 Pandas 提供了易于使用的數據結構和數據分析工具&#xff0c;特別適用于處理結構化數據&#xff0c;如表格型數據 Pandas 是數據科學和分析領域中常用的工具之一&#xff0c;它使得用戶能夠…

Vue 3 的<Teleport>功能與用法

Vue 3 的 <Teleport> 功能與用法 1. 基本用法 <Teleport> 是 Vue 3 的一個內置組件&#xff0c;允許將組件的內容渲染到 DOM 中的任意位置&#xff0c;而不改變其邏輯結構。以下是基本用法&#xff1a; 定義目標 DOM 元素&#xff1a;<div id"teleport-…

MySQL隨機獲取記錄之方法(The Method of Randomly Obtaining Records in MySQL)

MySQL中如何隨機獲取一條記錄 隨機獲取一條記錄是在數據庫查詢中常見的需求&#xff0c;特別在需要展示隨機內容或者隨機推薦的場景下。在 MySQL 中&#xff0c;有多種方法可以實現隨機獲取一條記錄&#xff0c;每種方法都有其適用的情況和性能特點。在本文中&#xff0c;我們將…

synchronized鎖升級詳解

synchronized鎖升級詳解 synchronized是Java中實現線程同步的關鍵字&#xff0c;它在JVM內部實現了鎖的升級機制&#xff0c;從偏向鎖到輕量級鎖再到重量級鎖&#xff0c;這種優化是為了減少鎖操作帶來的性能開銷。 1. 鎖的四種狀態 Java對象頭中的Mark Word會記錄鎖的狀態&…

C++函數如何返回多個參數

在編程中&#xff0c;我們經常會遇到需要函數返回多個值的場景。雖然 C 函數不能直接返回多個參數&#xff0c;但通過一些間接的方法&#xff0c;我們可以輕松實現這一需求。本文將詳細介紹幾種常見的實現方式&#xff0c;并分析它們的優缺點和適用場景。 1. 引言 在 C 中&…

最新版PhpStorm超詳細圖文安裝教程,帶補丁包(2025最新版保姆級教程)

目錄 前言 一、PhpStorm最新版下載 二、PhpStorm安裝 三、PhpStorm補丁 四、運行PhpStorm 前言 PhpStorm 是 JetBrains 公司推出的 專業 PHP 集成開發環境&#xff08;IDE&#xff09;&#xff0c;專為提升 PHP 開發效率設計。其核心功能包括智能代碼補全、實時語法錯誤檢…

【雜談】Godot4.4導出到Android平臺(正式導出)

學博而后可約&#xff0c;事歷而后知要。 目錄 一、準備二、Gradle構建三、配置Java SDK四、配置Android SDK五、配置密鑰 一、準備 本文在前文【雜談】Godot4.4導出到安卓平臺&#xff08;調試導出&#xff09;的基礎上&#xff0c;進行正式導出。調試導出并不是真正的編譯導…

隔行換色總結

功能效果展示&#xff1a; 第一種思路&#xff1a; 使用數組&#xff0c;將數組的內容渲染到頁面上&#xff0c;序號也就是將數組的下標輸出到第一個td上&#xff0c;將數組的內容輸出到第二個td上&#xff0c;&#xff08;使用拼接字符串&#xff09; 具體操作&#xff1a; …

使用文本翻譯API打破語言障礙

一、引言 在當今全球化的商業環境中&#xff0c;企業面臨著前所未有的語言挑戰。無論是出口商品、引進技術&#xff0c;還是與國際客戶進行交流&#xff0c;語言障礙始終是一個亟待解決的問題。文本翻譯API作為一款高效、穩定的工具&#xff0c;支持多種語言的翻譯&#xff0c…

【unity游戲開發入門到精通——動畫篇】Animator2D序列幀動畫

考慮到每個人基礎可能不一樣&#xff0c;且并不是所有人都有同時做2D、3D開發的需求&#xff0c;所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要講解C#的基礎語法&#xff0c;包括變量、數據類型、運算符、…

深入解析 Jenkins Agent 的 .jnlp 啟動文件

&#x1f9e9; 深入解析 Jenkins Agent 的 .jnlp 啟動文件 在 Jenkins 中&#xff0c;通過 JNLP&#xff08;Java Network Launch Protocol&#xff09;方式連接 Agent 是一種常見且靈活的方式。你可能曾見過類似這樣的命令&#xff1a; java -jar agent.jar -jnlpUrl file:/…

定積分__

practice makes perfect 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 若被積函數在積分區間上是可積的&#xff0c;那么變限積分函數在這個區…

Three.js 系列專題 7:性能優化與最佳實踐

內容概述 隨著 3D 場景復雜度的增加,性能優化變得至關重要。Three.js 項目可能因幾何體數量、紋理大小或渲染設置而變慢。本專題將介紹減少 draw call、優化紋理和使用調試工具的最佳實踐。 學習目標 學會減少 draw call 和幾何體復雜度。掌握紋理壓縮與內存管理。使用 Stat…

CentOS 7安裝Python3.12

文章目錄 使用pyenv安裝python3.12一、gitub下載pyenv二、升級GCC三.升級openssl這樣python3.12.9就完成安裝在CentOS上啦&#xff01; 使用pyenv安裝python3.12 一、gitub下載pyenv https://github.com/pyenv/pyenv 按照README&#xff0c;pyenv教程安裝即可 二、升級GCC 安…

【C++】優先級隊列+反向迭代器

priority_queue的介紹 通常用堆來實現&#xff0c;能在O(log n)的時間復雜度內插入和提取最高&#xff08;或最低&#xff09;優先級的元素。 優先隊列是一種容器適配器&#xff0c;根據嚴格的弱排序標準&#xff0c;它的第一個元素總是它所包含的元素中最大的(默認情況)。此…

mysql鏡像創建docker容器,及其可能遇到的問題

前提&#xff0c;已經弄好基本的docker服務了。 一、基本流程 1、目錄準備 我自己的資料喜歡放在 /data 目錄下&#xff0c;所以老規矩&#xff1a; 先進入 /data 目錄&#xff1a; cd /data 創建 mysql 目錄&#xff1a; mkdir mysql 2、鏡像查找 docker search hub.ra…

快速記憶法,提高知識點背誦效率

戰國七雄&#xff1a;齊秦 韓趙魏 燕楚 諧音記憶&#xff1a;齊秦 喊趙薇 演出 五等爵位&#xff1a;公侯 伯子 男 記憶方法&#xff1a;公猴 脖子 藍 安卓應用&#xff1a;記憶宮殿APP 記憶 腦力訓練&#xff0c;中小學各學科知識點速記&#xff0c;單詞趣味記憶&#xff0c…