標題:
[發問]
EXCEL 2007 VBA 在EXCEL 2010 執行出問題
[打印本頁]
作者:
li_hsien
時間:
2014-4-24 14:53
標題:
EXCEL 2007 VBA 在EXCEL 2010 執行出問題
請問各位大大
最近幫個客戶弄了一個巨集程式
我本身作業是用2007版EXCEL撰寫,儲存成2003可執行的版本
但到客戶端,發現是2010版的EXCEL
基本上我覺得語法應該沒使用到2010不能使用到的部分(因為都蠻單純的)
主要寫到的功能
1. 開啟要處理的來源檔案
2. 刪除來源檔中不必要的儲存格
3. 改變來源檔圖表的格式
(原本來源檔就有Chart了,只是我刪了不必要的儲存格,所以圖表會有點縮減;且須修改部分格式,像是線寬、標記的樣式等等)
4. 最後跳出處理完成的訊息視窗
客戶端開啟來源檔後,只跳出最後處理完的訊息視窗。
前半段的刪除部分及圖表部分都沒執行到@@
也沒有錯誤訊息
後來我實際用了2010版的EXCEL執行,完全跟用2007執行一樣,結果正常
不知是不是客戶公司那設定了什麼???
想請問各位大大,這方法有沒有什麼處理方式? 還是可能需要做什麼設定???
P.S. 客戶是用英文版的2010
煩請幫忙 謝謝
作者:
li_hsien
時間:
2014-4-24 20:33
小弟附個檔讓大家試試
麻煩幫我抓個問題@@
程式是0424,另一個檔案是需要匯入的檔案
我只附了第一個按鈕要開啟的檔案
第二張圖是跑完後應該出現的畫面
TKS~
[attach]18149[/attach]
[attach]18147[/attach][attach]18148[/attach]
作者:
GBKEE
時間:
2014-4-25 06:20
回復
2#
li_hsien
Sub w_report_Click()
'-----開啟W表單-----
Dim program_file As String, filename As String, w_file As String
program_file = Left(ActiveWorkbook.Name, Application.Find(".", ActiveWorkbook.Name) - 1)
filename = Application.GetOpenFilename
On Error GoTo HandleErr '你希望程式碼有錯誤到 HandleErr
A w_file '但執行此程序,如有錯誤會回到HandleErr,你不易偵錯的
複製代碼
Sub A(w_file)
Dim this_week As Integer, end_col As Integer, end_row As Integer, i As Integer, delete_col As Integer
'w_file->W1414_GF108_CP_weekly_report
'w_file 正確為 W1414_GF108_CP_weekly_report.xls
With Workbooks(w_file).Worksheets(1) 'Workbooks(w_file)才不會出錯
複製代碼
作者:
li_hsien
時間:
2014-4-25 07:57
回復
3#
GBKEE
版大 你說的偵錯處理
我後來有想到 哈哈
所以都把他關掉
直接讓錯誤顯示出來
以下是經客戶再次測試的結果,麻煩幫我看看,問題點都一樣@@
好像CHART的處理有問題
[attach]18155[/attach][attach]18156[/attach][attach]18157[/attach]
不過開檔案那個好像沒有問題 ,因為我檔案還是可以開啟執行耶,只是圖表跟儲存格處理有問題
而且我一直不解的是,我找了三個一樣用2010的朋友幫我測試
都一樣正確OK
不知道是不是英文版的有差異 還是需要做什麼設定@@
煩請幫我測試看看 謝謝
作者:
GBKEE
時間:
2014-4-25 09:43
回復
4#
li_hsien
我的是2003版,執行附檔程式碼是2003版以上版本寫的.
錯誤點都是 "不支援此屬性或方法" ,可以標出錯誤點是哪裡,看看如何解決
Sub A_chart(w_file)
'Dim C As ChartObject
'Set C = Workbooks(w_file).Worksheets(1).ChartObjects("Chart 3")
With Workbooks(w_file).Worksheets(1).ChartObjects("Chart 3").Chart
'.ChartArea.Format.Line.Visible = msoFalse '2003錯誤
.ChartArea.Border.LineStyle = msoFalse '改成這樣對嗎?
.SizeWithWindow = True
'.ChartArea.Width = 362.5 '寬度 原1449.25 '2003錯誤
'.ChartArea.Height = 124.75 '高度 原178.75 '2003錯誤
.Parent.Width = 362.5 ' *** 這樣對嗎? ***
.Parent.Height = 124.75
With .PlotArea
.Height = 102.148661417323 '繪圖區高度 原120.97031496063
.Width = 342.872283464567 '繪圖區寬度 原358.980866141732
.Left = 10 '繪圖區位移
.Top = 10 '繪圖區位移
End With
'圖表標題
With .ChartTitle
If IsError(Application.Find(".", Worksheets(2).Range("G2"))) = False Then
.Text = Left(ActiveChart.ChartTitle.Text, Application.Find(" ", ActiveChart.ChartTitle.Text) - 1) _
& "-" & Mid(Worksheets(2).Range("G2"), Application.Find(".", Worksheets(2).Range("G2"), Application.Find(".", Worksheets(2).Range("G2")) + 1) + 1, 3) _
& " " & "wk" & Right(Worksheets(2).Range("A2"), 4) & " " & Right(ActiveChart.ChartTitle.Text, 15)
ElseIf IsError(Application.Find(".", Worksheets(2).Range("G2"))) = True Then
.Text = Left(ActiveChart.ChartTitle.Text, Application.Find(" ", ActiveChart.ChartTitle.Text) - 1) _
& "-" & Mid(Worksheets(2).Range("G2"), Application.Find("_", Worksheets(2).Range("G2"), Application.Find("_", Worksheets(2).Range("G2")) + 1) + 1, 3) _
& " " & "wk" & Right(Worksheets(2).Range("A2"), 4) & " " & Right(ActiveChart.ChartTitle.Text, 15)
End If
.Font.Size = 6.5 '標題字體大小
.Font.Name = "Arial" '標題字型
.Left = 123 '標題位移
End With
With .Legend
.Position = xlLegendPositionBottom '圖例列底部
'.Legend.Top = 300 '圖例位移
.Top = Range("A21").Top
.Font.Size = 6.5 '圖例字體大小
.Font.Name = "Arial" '圖例字型
End With
With .SeriesCollection("Yield")
' .SeriesCollection(4).Border.ColorIndex = 18 '線條顏色
.Border.Color = 5066944 '線條顏色
'.SeriesCollection("Yield").Format.Line.Weight = 1 '線條&標記寬為1
'.Format.Line 2003錯誤 ***********
.Border.Weight = 1 '.LineStyle = 0
.Border.Weight = -4138 '只改變線條
.MarkerStyle = 2 '標記菱形
.MarkerBackgroundColorIndex = 2 '標記顏色(白)
.MarkerSize = 5 '標記大小5
.MarkerForegroundColor = 5066944 '標記外框
.ApplyDataLabels '顯示資料標籤
.DataLabels.Font.Size = 5 '上列數值字體大小
.DataLabels.Font.Name = "Arial" '上列數值字型
End With
'.SeriesCollection("Yield").Select '不需要
' .SetElement (msoElementDataLabelTop) '資料標籤置上 '2003沒這選項
.Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 6.5 'Y軸標題大小
.Axes(xlValue, xlPrimary).AxisTitle.Font.Name = "Arial" 'Y軸標題字型
.Axes(xlValue, xlPrimary).AxisTitle.Left = -3 'Y軸標題位移
.Axes(xlCategory).TickLabels.Font.Size = 5 'X軸字體大小
.Axes(xlCategory).TickLabels.Font.Name = "Arial" 'X軸字型
.Axes(xlValue).TickLabels.Font.Size = 6.5 'Y軸字體大小
.Axes(xlValue).TickLabels.Font.Name = "Arial" 'Y軸字型
.SeriesCollection("Yield").DataLabels.Font.Size = 5 '上列數值字體大小
.SeriesCollection("Yield").DataLabels.Font.Name = "Arial" '上列數值字型
End With
End Sub
複製代碼
作者:
li_hsien
時間:
2014-4-25 13:13
回復
5#
GBKEE
謝謝版大
轉換成這樣的寫法我自己測試也OK
不過換到對方那邊還是一樣不行@@
且如果With Workbooks的方式變成有副檔名就不行了= =
可是我自己電腦測試有副檔名 沒副檔名都可以
也太奇怪了
作者:
GBKEE
時間:
2014-4-25 13:22
本帖最後由 GBKEE 於 2014-4-25 13:25 編輯
回復
6#
li_hsien
自己電腦測試有副檔名 沒副檔名都可以 (也是2003版嗎?,可以嗎?)
'Workbooks(program_file).Worksheets(1).w_file = "" '2003這裡是錯誤的
w_file = ""
複製代碼
作者:
li_hsien
時間:
2014-4-25 14:42
本帖最後由 li_hsien 於 2014-4-25 14:43 編輯
回復
7#
GBKEE
我環境是2007的,有無副檔名都可以
不過我給客戶(2010英文版),有加副檔名好像會錯誤
現在真不知為什麼客戶那邊2010英文版的為什麼不能執行@@
明明我用自家別台電腦(也是2010)就可以跑出圖表
給其他朋友測試也都可以
不知道是哪段程式或是設定出了問題@@
作者:
GBKEE
時間:
2014-4-25 14:49
本帖最後由 GBKEE 於 2014-4-25 14:51 編輯
回復
8#
li_hsien
那不好意思我只有2003版幫不上忙了.需有請2010版的幫忙.
作者:
li_hsien
時間:
2014-4-25 15:03
回復
9#
GBKEE
版大 沒關係
謝謝你!!!
平時已經幫忙解決了不少問題
我也學到了不少東西!!!
TKS~
作者:
li_hsien
時間:
2014-4-25 20:02
回復
9#
GBKEE
版大我還有一問想請教,不知能否幫忙
Sub w_report_Click()
'-----開啟W表單-----
Dim program_file As String, filename As String, w_file As String
program_file = Left(ActiveWorkbook.Name, Application.Find(".", ActiveWorkbook.Name) - 1)
filename = Application.GetOpenFilename
' On Error Resume Next
' On Error GoTo HandleErr
Workbooks.Open filename
w_file = Dir(filename)
Debug.Print w_file
A w_file
A_chart w_file
F w_file
Workbooks(program_file).Worksheets(1).w_file = ""
MsgBox "DONE !!!"
' Exit Sub
'
'HandleErr:
' MsgBox "請開啟W表單。"
End Sub
複製代碼
客戶執行時發現出錯在這行
w_file = Dir(filename)
主要是用來抓開啟的檔案名稱
後來我用個儲存格放檔名讓他測試
EX:
w_file = range("A1") ->儲存格A1來放檔名
這樣就可以了
不知是不是Dir不能使用
請問有什麼另外可以抓到檔名的方法嗎???
哦~而且最後確認
客戶用EXCEL2010英文版的,一樣要像版大說的加上副檔名才行
感謝!!!!
作者:
GBKEE
時間:
2014-4-25 20:22
回復
11#
li_hsien
MsgBox filename '有副檔名的
'Dir 函數 語法 Dir [(pathname[, attributes])]
w_file = Dir(filename, vbNormal) '加 attributes這參數試試看
複製代碼
作者:
li_hsien
時間:
2014-4-25 22:45
回復
12#
GBKEE
謝謝版大
結果客戶那邊還是不行
好像是Dir都不管用@@
結果我想到比較直觀的方法
Workbooks.Open filename
w_file = ActiveWorkbook.Name
讓來源檔開起來的時候
再接一次ActiveWorkbook.Name
雖然好像笨了點
但是可行 哈哈
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)