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.mzph.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…