Board logo

標題: 是否有人可協助開發 ? [打印本頁]

作者: oliwa    時間: 2015-3-25 11:51     標題: 是否有人可協助開發 ?

自修快一季了 , 實在搞不出來 , 是否有人可以協助開發 , 如附件的需求 ?
作者: mark15jill    時間: 2015-3-25 18:27

自修快一季了 , 實在搞不出來 , 是否有人可以協助開發 , 如附件的需求 ?
oliwa 發表於 2015-3-25 11:51



    請簡單敘述您的問題點   所需功能 動作方式
    只丟一段話 沒任何說明  很難讓人理解
作者: oliwa    時間: 2015-3-26 10:59

回復 2# mark15jill


    說明已在附件檔案中 , TKS .
作者: k123456770    時間: 2015-3-26 11:35

版主要考慮到 有些人無法下載附件...
作者: oliwa    時間: 2015-3-26 14:26

回復 4# k123456770


    想要在 Excel 上完成一些自動下載資料 , 計算 , 結果再滙整至首頁上的需求 , 相關資料連結需求說明都在檔案中說明了 .....
作者: GBKEE    時間: 2015-3-26 14:38

回復 5# oliwa

   
自修快一季了

為何附檔沒有你所寫的程式碼,對於有瓶頸的地方提出討論的.
作者: oliwa    時間: 2015-3-27 14:40

回復 6# GBKEE


    瓶頸就是不知如何下手 ?
    網上找了不少功能需求範例 , 拼在一起後根本無法解決問題 .......
作者: GBKEE    時間: 2015-3-27 15:11

本帖最後由 GBKEE 於 2015-3-27 15:18 編輯

回復 7# oliwa

VBA 要入門可多看看程式區的討論文, VBA的物件,方法,函數,屬性,多詳看說明,多練習說明的範例可.有不懂可問.

A)按下後新增一列 , 跳出視窗輸入公司代號 , 檢查是否已存在對應此代號的Sheet
新增一列的程式碼??  
跳出視窗的程式碼??   
檢查是否已存在對應此代號的Sheet??

B)復製Form Sheet , 及更名為該公司代號為Sheet名
復製Form Sheet的程式碼??                     
更名為該公司代號為Sheet名的程式碼??

這些程式碼你會哪些.... 試試哪些可用巨集錄製得到程式碼.
作者: joey0415    時間: 2015-3-27 17:21

回復 7# oliwa
自修一季卻沒有任何程式碼,這實在有問題
換做是我,自己要錄製一下,感受一下程式碼差別呢?
不然把你的想法發包出去,說不定有人就會幫忙
作者: mark15jill    時間: 2015-3-28 13:26

本帖最後由 mark15jill 於 2015-3-28 13:28 編輯

我想 可能是一開始我向樓主詢問的意思不明確
導致樓主誤會我的意思
+==================================+
"    請簡單敘述您的問題點   所需功能 動作方式
    只丟一段話 沒任何說明  很難讓人理解"
+==================================+
這段話是說 除了 "簡單敘述您的問題點 、  所需功能 動作方式"   還需要  附檔案
附檔案的意思  不是叫你丟個空程式碼檔案(不管有無內容)
然後就要人家幫你解決...
這樣就很像  今天某人機車壞掉 他拿去修理,卻沒把鑰匙給維修人員
這樣就算維修好  怎知道維修完成或沒完成?? 怎知道有沒有其他問題???
懂我意思?

今天不是說不能發問  (大字點 以免又被誤會我在嗆不能發問)
而是光丟個檔案 (或許內有說明) 沒任何程式碼  
就要人家幫你解決
說真的  如果是我 ...   你哪位???
你發問是學習 不是撿現成
像之前我發的文章
先自己嘗試、遇問題發問(需程式碼+說明)、自己才能學到
作者: oliwa    時間: 2015-3-29 19:34

回復 1# oliwa


    各位說的都沒錯 , 錄製也有試過 , 但整合起來就是不能正常運作 ,
    網上有不少範例 , 但COPY來COPY去就是無法正運作 , 因為參數引用不同自然無法連貫使用 ,
    有些語法有說明 , 有些沒有 , 自然是看不懂 , 叫好再繼續看範例找解說了 .....
作者: lpk187    時間: 2015-3-29 22:17

本帖最後由 lpk187 於 2015-3-29 22:19 編輯

回復 11# oliwa

oliwa 不用恢心!其實大家不是不幫你,而是你自己要一步一步去訂目標然後去完成你的目標,畢竟以後你寫的程式必須你自已去維護所以就算別人寫給你的程式如果達不到你的目標那時怎麼辦?
VBA是程式碼,所以COPY來COPY去,若沒修改你所需要的再怎麼COPY也沒用,我來先開個頭來說你的目標好了

新增
        A)按下後新增一列 , 跳出視窗輸入公司代號 , 檢查是否已存在對應此代號的Sheet
        B)複製Form Sheet , 及更名為該公司代號為Sheet名


上面的"新增"你是要利用你上傳檔案的儲存格或者是利用一個按鈕來表示?兩者所寫的代碼會有些許的不同,但利用儲存格則會留下缺點(必須跳出那一格後再點選那個儲存格)
利用"儲存格"方式大約可以這麼寫,""你必須了解每一條式子的意義才行""
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  '此事件是當你選取某個儲存格後發生
If Target.Address = Cells(Target.Row, "A").Address Then'下面判斷是先在"A欄"尋找有"新增"字樣的儲存格
    If Target = "新增" Then
        msg = MsgBox("是否新增一筆資料", 4)
        If msg = vbNo Then End         '判斷若按下右按鈕後則離開程式
        inp = InputBox("請輸入代號", "新增") '跳出視窗輸入公司代號
        '以下是你要的目標代碼
        '代碼(下次再演練)
        '''''''''''''''''''''''''''''''''''''''''''''''''
    End If
End If
End Sub
以上是部份代碼,你可以利用"F9"鍵來中斷第一個"IF",再利用"F8"鍵來逐行執行,你會很容易的了解程式的運作過程
以後的代碼我們再慢慢的來討論
作者: oliwa    時間: 2015-3-30 13:50

回復 12# lpk187


    收到 , 我試玩玩看這組 .....
作者: oliwa    時間: 2015-3-30 13:59

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Cells(Target.Row, "J").Address Then
    If Target.Select Then
       MsgBox "Hello !"
      
    End If
End If
End Sub

感謝協助 , 我改成如此的方式來運作 , 點選該該儲存格後即出現 MsgBox , 感謝 ...
用 MsgBox 改成 Call Sub , 即可達成選說即執行的動作了 ,

那請問 , 在點選後要取得該列某儲存格內容 , 是否可以用 Cells(Target.Row,1).Value ?
作者: lpk187    時間: 2015-3-30 14:13

回復 14# oliwa

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = .Address Then
    If Target.Select Then''''''''''這一個 IF...End If 是不必要的,只要第一個IF就可以達成你要的MsgBox的結果
       MsgBox "Hello !"
      
    End If
End If
End Sub
另Cells(Target.Row,1).Value    是可以讀取該儲存格的值,而且  .Value 是可以省略的
作者: oliwa    時間: 2015-3-30 14:14

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    LastRow = Sheets("List").Cells(1, "A").End(xlDown).Row
    If Target.Row < LastRow + 1 And Target.Row > 1 Then
        If Target.Address = Cells(Target.Row, "J").Address Then
            If Target.Select Then
                Id_Comp = Cells(Target.Row, "A").Value
                Id_Year = Cells(Target.Row, "D").Value
                MsgBox Id_Comp & Id_Year
            End If
        End If
    End If
End Sub

用 lpk187 的例子 + 說明後 , 試完如上的內容 , 可以達成按下某儲存格後即呼叫的動作 , 感謝 .......
作者: lpk187    時間: 2015-3-30 14:52

回復 16# oliwa

寫VBA本來就是要練習,而且要多看說明,
說實在的我並不是高手,只是自己公司有用到VBA去做進銷存,所以會的其實也不多!
我們再來以下的說明
新增
        A)按下後新增一列 , 跳出視窗輸入公司代號 , 檢查是否已存在對應此代號的Sheet
        B)複製Form Sheet , 及更名為該公司代號為Sheet名
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Address = Cells(Target.Row, "A").Address Then
  3.     If Target = "新增" Then
  4.         msg = MsgBox("是否新增一筆資料", 4)
  5.         If msg = vbNo Then End
  6.         inp = InputBox("請輸入代號", "新增")
  7.         If inp = "" Then End
  8.         For Each sh In Sheets ' 找尋所有工作表
  9.             If sh.Name = inp Then '如果有工作表名稱相同的,就結束此程序
  10.                 MsgBox "已有此代號存在,請重新輸入"
  11.                 End '結束 Sub
  12.             End If
  13.         Next
  14.         Sheets("From").Copy Before:=Sheets(2) '複製From工作表放在第2個位置
  15.         Sheets("From (2)").Name = inp '工作表各稱更改為InputBox輸入的代號
  16.         Sheets("List").Select
  17.         Rows(Target.Row).Insert '上面 For...Next 若沒找到InputBox相同代號則在"新增"的這個儲存格新增一列
  18.         Cells(Target.Row - 1, "A") = inp '新增一則後,在A欄的新增出來的儲存格其為InputBox輸入的代號
  19.     End If
  20. End If
  21. End Sub
複製代碼

作者: oliwa    時間: 2015-3-31 20:42

回復 17# lpk187


    收到 , 我來玩玩看 ..............
作者: oliwa    時間: 2015-4-2 12:08

謝謝 lkp187 的例子 , 我瞭解新增部分的語法了 , 感恩 ....
轉Web資料 , 經由錄製方式後也瞭解及運用 ,
目前讀取資料時 ,
I :
Offset(A1, Match("應收帳款淨額", Range("A2:A2000"), 0), 2)
Offset(A1, Match("應收帳款淨額", "A2:A2000", 0), 2)
Offset(A1, Match("應收帳款淨額", Range("A2:A2000"), 0), 2)
Offset(A1, Match("應收帳款淨額", "$A$2:$A$2000, 0), 2)
以上語法都說錯 , 不知如何修改 ?
不然就是說 Match 沒有定義 ??

II:
看網路介紹 Match 用法時 , 有提到資料要先排序 , 但 Web轉出來的資料 , 沒有排序 , 還有空行 , 也有相關欄位名稱 , 但前面一個四空格 , 另一個五格 ,
這種資料要如何下語法 , 才能正確比對出正確資料後回傳 ?
作者: lpk187    時間: 2015-4-2 13:15

回復 19# oliwa


    借用工作表函數必須要加上Application.WorksheetFunction或簡寫Application
例如Application.Offset(A1, Application.Match("應收帳款淨額", Range("A2:A2000"), 0), 2)

另外,工作表函數在 Visual Basic 中並不是很好用,用程式碼來表示有時會比工作表函數還要好用的多!
作者: oliwa    時間: 2015-4-2 13:36

回復 20# lpk187


   D_Receive = Application.Offset(A1, D_Row, 2)

  我改成如上 , 但仍出現錯誤 ??
作者: oliwa    時間: 2015-4-2 13:54

D_Receive = .Cells(D_Row, 2) 用這個取代 offset 那列語法 , 其它的我試試 .....
作者: lpk187    時間: 2015-4-2 14:35

回復 22# oliwa


    對不起,offset不是工作表函數,Match才是,我寫錯了:P
作者: oliwa    時間: 2015-4-4 20:25

For I = Data_Year To End_Year         ' 由現有資料年度至系統年度更新
   
        For J = 4 To 1 Step -1                    ' 由第四季往下找
            
            On Error Resume Next
            Err.Clear
            
            Msgbog I & "  " & J
            Call Report_IFRS(Data_Comp, I, J)
            
            If Err.true Then
                             
               With Sheets(Data_Comp)
                    .Activate
                    Write_Col = .Range("1:1").Find(I).Col
                  
                    If J = 1 Or J = 4 Then
                        Read_Col = 2
                        Else
                        Read_Col = 4
                    End If
                  
                    MsgBox I & "  " & J & "  " & Write_Col & "  " & Read_Col
                  
                    '資料轉寫
                    'Set 推銷費用位置 = Sheets("temp").Range("A:A").Find("*推銷費用*")
                    ' If 推銷費用位置 Is Nothing Then
                    '     推銷費用 = 0
                    ' Else
                    '     推銷費用 = 推銷費用位置.Offset(0, 1).Value
                    ' End If
            
                    .Cells(Write_Col, 2) = J
                    .Cells(Write_Col, 3) = .Cells(Worksheets("temp").Range("A:A").Find("   營業收入合計").Row, Read_Col)
               
                    J = 1 '已有最近季報 , 所以結束不再 Update
               End With
                                                         
            End If
               
            Next
    Next

目前資料轉寫如上 ,
年度資料執行上沒有錯 , 由資料最近年度至系統年度來執行 ,
而季報資料則由 4 -> 1 , 但卻出現
1) 它一次跳兩季 , 只有 4 , 2 資料 , 而不是 4 , 3 , 2 , 1 的順序
2) 網頁Web轉檔時 , 只要 4 , 3 , 2 , 1 下 , 第一個成功的即跳出 , 且資料轉寫 ; 若都不成功時才結束 , 但執行結果都是 4 , 2 , 然後又是 4 , 2 ... , 即使有 Web 轉檔成功但也沒有跳出 ,
這是那邏輯上錯誤 ? 還是語法上錯誤 ??
作者: oliwa    時間: 2015-4-5 23:56

我找到解法 !!
作者: oliwa    時間: 2015-4-6 01:50

我的需求都解決了 , 感謝 .......
作者: idnoidno    時間: 2015-4-13 20:43

看到這一帖完整的過程,發現,真得要實做,但是要有人願意指正,感動
希望lpk187大大也可以指點一下小弟,因為小弟也有樓上大大的困擾
期待




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)