台灣最大程式設計社群網站
線上人數
2001
 
會員總數:246056
討論主題:189637
歡迎您免費加入會員
討論區列表 >> VB.NET >> 請問VBA 原在xp win7 可以正常執行在win10 就有異常訊息
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問VBA 原在xp win7 可以正常執行在win10 就有異常訊息
價值 : 20 QP  點閱數:398 回應數:6
樓主

定義
門外漢
0 2
18 3
發送站內信

Dim excelSQL As String, conStr As String, strDBQ As String
strDBQ = "DBQ=" + ActiveWorkbook.FullName + ";"
conStr = "Driver={Microsoft Excel Driver (*.xls)};" & _
strDBQ & _
"ReadOnly=True"
excelSQL = "select * from [" + WSH.Name + "$] "
Dim Con As New ADODB.Connection, rst As New ADODB.Recordset
Con.Open conStr
rst.Open excelSQL, Con
Dim MergeNum As Integer, 上次理想模數 As Integer

While Not rst.EOF
'If (RST.Fields("週需求量").Value > 0) Then
MergeNum = rst.Fields("合併").Value

' If MergeNum > 0 Then
上次理想模數 = 0
' End If
If (Sheets("sheet2").Range("成型站").Value = "KY-P1410") Or (Sheets("sheet2").Range("成型站").Value = "KY-P1210") Then
If (MergeNum > 0 And tempRecordNum <> RecordNum) Then
RowIndex = RowIndex + 6
tempRecordNum = tempRecordNum - 6
End If
Else
If (MergeNum > 0 And tempRecordNum <> RecordNum) Then
RowIndex = RowIndex + 1
tempRecordNum = tempRecordNum - 1
End If
End If
'If (MergeNum > tempRecordNum ) Then
If (MergeNum >= tempRecordNum And tempRecordNum <= 0) Then

ReportLayout.generateLayout WSHOut, RowStart, ColStart, PageNum
ReportLayout.generateDateLayout WSHOut, RowStart, ColStart
ReportLayout.setContentFormat WSHOut, RowStart, ColStart
PageNum = PageNum + 1
'tempRecordNum = RecordNum
tempRecordNum = 19
RecordNum = 19
RowIndex = RowStart + 4
RowStart = RowStart + PAGERECLIMIT
End If
Dim 加硫工具群組編號 As String
Dim loRange As Range, 成代Range As Range
Dim 剩餘可用加硫模數 As Integer, 成品代號 As String, 成型機代號 As String
With WSHOut
Dim 加硫模數 As Integer
.Cells(RowIndex, 1).Value = rst.Fields("工具群組").Value ---> 從這裡往後 rst.Fields("****") 都跳出 <所要求名稱或序數的相關集合物件中找不到此項目> 無法寫入excel
成品代號 = rst.Fields("成品代號").Value
.Cells(RowIndex, 2).Value = 成品代號
.Cells(RowIndex, 3).Value = rst.Fields("規格").Value
.Cells(RowIndex, 4).Value = rst.Fields("特性").Value

'加硫模數 = RST.Fields("加硫模數").Value 'edit by bruce
'加硫模數改抓第一天開模數 by taddy 20100111
加硫模數 = rst.Fields("第一天開模數").Value
'加硫模數 = rst.Fields("理想模數").Value
加硫工具群組編號 = rst.Fields("加硫工具群組").Value
' bruce 一律填上理想模數
' If (MergeNum = 0) Then '不是合併群組的第一筆資料
' If (.Cells(RowIndex, 5).Font.ColorIndex = 3) Then
' .Cells(RowIndex, 5).Value = 加硫模數
' Else
' .Cells(RowIndex, 5).Value = ""
' End If
' Else
' .Cells(RowIndex, 5).Value = 加硫模數
' End If
'
' If rst.Fields("合併").Value > 0 Then
上次理想模數 = 0
'End If
.Cells(RowIndex, 5).Value = 加硫模數 - 上次理想模數
'.Cells(RowIndex, 5).Value = 加硫模數 'bruce 20081008
成型機代號 = " "
成型機代號 = Mid(rst.Fields("成型機代號").Value, 1, 30)
.Cells(RowIndex, 6).Value = 成型機代號
上次理想模數 = 加硫模數


'計算剩餘可用工具模數
'.Cells(RowIndex, 20 + (day - 7)).Value = BasicData.get加硫模具數量(加硫工具群組編號)
Dim rst1 As New ADODB.Recordset, sql1 As String
'顯示巨大或內外銷資料 20130305 by taddy
rst1.ActiveConnection = Vsqlcon
sql1 = "SELECT toolsetid,(SELECT MIN(qty) FROM aps_temp_tool WHERE id = aps_temp_toolset_line.toolid) moldqty FROM aps_temp_toolset_line " & _
"WHERE toolsetid IN (SELECT UNIQUE toolsetid FROM aps_temp_item_spec WHERE itemid = '" & Trim(rst.Fields("成品代號").Value) & "' AND stepseq = '2' )"
rst1.Open sql1
While Not rst1.EOF ----> 這一段無窮迴圈
If Trim(.Cells(RowIndex, 20 + (day - 7)).Value) <> "" Then
.Cells(RowIndex, 20 + (day - 7)).Value = Trim(.Cells(RowIndex, 20 + (day - 7)).Value) & " ," & rst1("moldqty").Value
Else
.Cells(RowIndex, 20 + (day - 7)).Value = rst1("moldqty").Value
End If
rst1.MoveNext
Wend ----> 這一段無窮迴圈
rst1.Close

搜尋相關Tags的文章: [ VBA win10 ] ,
本篇文章發表於2020-01-02 14:12
1樓
回應

P陳
檢舉此回應
您有二個 while 卻只有一個 Wend
本篇文章回覆於2020-01-02 21:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

定義
檢舉此回應
P陳大大您好:

我這程式碼在win7 xp 都可以做使用,

轉到win10做使用時就有問題了,我只截到有問題的那兩段,

至於wend 其實是有的我沒有截到那麼下面

謝大大回覆~
本篇文章回覆於2020-01-03 08:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
看起來您的程式 可能會有以下狀況,您自己試看看,(指令不一定對,您要自行轉換成您的語言)

while rst.eof
rst1.Open sql1 <---3 在 rst1 開啟後檢查筆數
rst1.movelast
debug.print rst1.rowcount
rst1.movefirst
while rst1.eof
debug.print rst1("moldqty").Value <---2 請檢查 rst1("moldqty").Value 值的變化
rst1.movenext
Wend
rst.movenext <----- 1.如果沒有這句的話 就會跑不完了
wend
本篇文章回覆於2020-01-03 10:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

定義
檢舉此回應
P陳大大你好:

有嘗試過把程式碼改為不要無窮迴圈跑的方式往下跑,

可是程式碼那些物件的部分會找不到,

會跳出<所要求名稱或序數的相關集合物件中找不到此項目>

之前在win7 與XP 的部分都可以做正常跑

在win10的部分就有異常,

有嘗試過在vba 的設定引用項目裡做新增vba的物件的部分

引用項目如下

Visual Basic For Applications

Microsoft Excel 15.0 Object Libray

OLE Automation

Microsoft Office 15.0 Object Libray

Microsoft ActivX Data Objects 2.7 Libray

Microsoft Forms2.0 Objects Libray

Microsoft ActivX Data Objects Recordset 2.8 Libray

還是無法,正常執行
本篇文章回覆於2020-01-03 11:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

P陳
檢舉此回應
環境不同,那就猜不出來原因了。
本篇文章回覆於2020-01-03 16:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

定義
檢舉此回應
謝大大回覆
本篇文章回覆於2020-01-06 09:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.