返回列表 上一主題 發帖

是否有人可協助開發 ?

本帖最後由 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"鍵來逐行執行,你會很容易的了解程式的運作過程
以後的代碼我們再慢慢的來討論
1

評分人數

    • GBKEE: 精品文章金錢 + 4

TOP

回復 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 是可以省略的

TOP

回復 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
複製代碼

TOP

回復 19# oliwa


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

另外,工作表函數在 Visual Basic 中並不是很好用,用程式碼來表示有時會比工作表函數還要好用的多!

TOP

回復 22# oliwa


    對不起,offset不是工作表函數,Match才是,我寫錯了:P

TOP

        靜思自在 : 修行要繫緣修心,藉事練心,隨處養心。
返回列表 上一主題